winhex先Add再XOR後的數據恢復
近來經常有網友QQ問我,用winhex修改數據,先Add運算,再XOR運算,這樣修改後(加密)的數據如何恢復(還原)?
這個好像是中職(或高職)學生在參加全國數據恢復比賽時的題目。我試著做了一下,下面是過程:
首先創建了一個名為“實驗doc文檔”,如下圖:
用winhex打開這個文件,選定所有字節,作如下運算:
先 Add 23H ,再XOR 32H(這兩個數值是隨意選擇的)。如下圖:
這樣運算之後的數據如下圖:
數據已經被加密了。
下面開始恢復數據:
思路:首先把復合文檔的文件頭
已知關鍵字的當前值是由關鍵字先Add某個數值再XOR某個數值得到的,理論上反向操作(先XOR再Add)的話,由於按字節運算了兩次(Add和XOR),而一個字節最大可以表示256個數值(00 H至FF H),那麽使用窮舉法,最多需要計算256的平方 = 65536 次就可以了。
如果通過反向運算後,得到了文件頭0x D0CF11E0A1B11AE1,那麽就可以得到這兩個運算(Add和XOR)的數值。
可能有人會問,Add運算的結果,要用減法來還原才行啊。其實減去一個數就等於加一個負數,這樣就好理解了。呵呵。
很明顯,這個數量級的計算用手工就太慢了,所以需要編寫winhex腳本或小程序來完成計算。如下圖:
用程序計算效率就高多了,很快結果就出來了。從圖中可以看到,通過反向計算,一共找到了兩組數值:1. 32 H 和 DD H ; 2. B2 H 和5D H 。
通過驗證,這兩組數值都可以恢復原數據。那麽為什麽有兩組呢?大家可以思考思考,在這兒就不詳細講了。
好了,以上就是我的恢復思路和方法。再見!
2018 . 2 . 22
winhex先Add再XOR後的數據恢復