winhex先Add再XOR後的數據恢復

AddXOR的恢復

 

近來經常有網友QQ問我,用winhex修改數據,先Add運算,再XOR運算,這樣修改後(加密)的數據如何恢復(還原)?

 

這個好像是中職(或高職)學生在參加全國數據恢復比賽時的題目。我試着做了一下,下面是過程:

 

首先創建了一個名爲“實驗doc文檔”,如下圖:

 

 image1.png                                             

 

winhex打開這個文件,選定所有字節,作如下運算:

 

    Add 23H ,再XOR 32H(這兩個數值是隨意選擇的)。如下圖:

 

image2.png

 

這樣運算之後的數據如下圖:

 

image3.png

 

數據已經被加密了。

 

下面開始恢復數據:

 

思路:首先把複合文檔的文件頭0x D0CF11E0A1B11AE1作爲關鍵字,而加密後關鍵字偏移位置的值爲0x C1C00631F6E60F36

 

已知關鍵字的當前值是由關鍵字先Add某個數值再XOR某個數值得到的,理論上反向操作(先XORAdd)的話,由於按字節運算了兩次(AddXOR),而一個字節最大可以表示256個數值(00 HFF H),那麼使用窮舉法,最多需要計算256的平方 =  65536 次就可以了。

 

如果通過反向運算後,得到了文件頭0x D0CF11E0A1B11AE1,那麼就可以得到這兩個運算(AddXOR)的數值。

 

可能有人會問,Add運算的結果,要用減法來還原才行啊。其實減去一個數就等於加一個負數,這樣就好理解了。呵呵。

 

很明顯,這個數量級的計算用手工就太慢了,所以需要編寫winhex腳本或小程序來完成計算。如下圖:

 

image4.png

 

用程序計算效率就高多了,很快結果就出來了。從圖中可以看到,通過反向計算,一共找到了兩組數值:1.  32 H DD H 2.  B2 H 5D H

 

通過驗證,這兩組數值都可以恢復原數據。那麼爲什麼有兩組呢?大家可以思考思考,在這兒就不詳細講了。

 

image5.png

 

image6.png

 

 

好了,以上就是我的恢復思路和方法。再見!


 

                                                                                                                                             2018 . 2 . 22

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章