《解密系列》脫殼篇第二講學習筆記

主題:實踐是檢驗真理的唯一標準

實驗一:UnPackMe_CrypKeySDK5.7.exe

PEiD查殼:


脫完殼之後會發現殼依舊殘留在程序中,所以需要把它去掉:


在這裏需要用PE Editor來載入文件,然後點擊sections,在相應的地方點擊右鍵找到刪除就可以了,之後點擊OK並且rebuildPE

自己的操作:

使用OD載入,切換到內存映像裏面:

然後F8單步執行

執行到RETN部分的時候,程序跳到了4271B0這個地方,這個地方屬於代碼區,所以進入的應該是OEP

那麼這個時候把內存中的映像DUMP下來:


這裏已經自己把其實地址和入口地址修改好了。然後點擊脫殼,選擇保存的位置和名稱。這裏需要注意的是不要重建導入表。否則會出錯。

dump出來的程序大小444kb


這裏還殘留着殼的程序,所以要把殼的部分刪除。使用LoadPE載入程序:

在區段中把3個屬於殼的區段給移除掉,結果是這樣的:

最後點擊保存後再重建就可以了。最後的大小是404kb。



================================================================

練習二:根據堆棧平衡原理尋找OEP

文件:UnPackMe_EZIP1.0.EXE

關注ESP的值,只要有變化就可以下一步行動。數據窗口中跟隨,並下硬件斷點

自己的操作:

這個文件是用壓縮殼進行加殼的。依舊用OD打開:

看到這個入口點都是一堆jmp指令。先用F8進行單步調試,看到跳到了push和mov,但是這裏仔細分析還不是正真的區塊:

這裏的虛擬地址是4682DC,而從od的區塊可以看到整整的代碼段應該是再401000-44B000之間

當程序繼續往下執行一步之後會發現ESP變了,再ESP處點擊右鍵找到數據跟隨

隨便選中一塊地方,然後右鍵添加硬件斷點,這裏word和dword都可以

之後F9執行程序,發現程序在這裏停下了

寄存器可以看到此時的EAX是4271B0,是屬於代碼段的範圍:

再F8後看到跳到了以下界面

這時候算是程序的原始內容了。然後dump出內容:

這裏依舊不要重建導入表,之後dump保存

接着用LoadPE,查看區塊:

這裏可以看到代碼基址和數據基址都還是6開頭,不是原始的,所以需要進行修復。同時還要去除多餘的區塊。移除完成之後剩下的區塊如下:

同時修復那兩個基址:

最後就是保存和重建。完工


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