1. 程式人生 > >winhex先Add再XOR後的數據恢復

winhex先Add再XOR後的數據恢復

數據恢復 add後xor

AddXOR的恢復

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

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

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

技術分享圖片

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

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

技術分享圖片

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

技術分享圖片

數據已經被加密了。

下面開始恢復數據:

思路:首先把復合文檔的文件頭

0x D0CF11E0A1B11AE1作為關鍵字,而加密後關鍵字偏移位置的值為0x C1C00631F6E60F36

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

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

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

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

技術分享圖片

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

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

技術分享圖片

技術分享圖片

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


2018 . 2 . 22

winhex先Add再XOR後的數據恢復