脫殼第二講,手動脫殼PECompact 2.x
PS: 此博客涉及到PE格式.所以觀看此博客你要熟悉PE格式
首先,逆向inc2l這個工具,匯編中可能會用的 inc頭文件轉換為lib的工具
但是他有殼,先查殼.
發現是這個殼
利用Esp定律,脫掉這個殼.
首先,inc2l.exe是32位的,所以要放到虛擬機中.
一丶OD打開分析
1.OD分析
發現,首先給eax賦值,然后壓棧eax,那么eax肯定會訪問,那么我們F8到push eax的下面,也就是4022EA的位置
2.查看棧數據
查看棧數據.
那么在棧位置12FFC0的位置,肯定會有訪問,我們數據窗口 定位到ESP的位置,也就是0012FFC0
3.在數據窗口定位棧頂位置.
CTRL + G命令定位.
由於方便一起截圖,事先已經定位過來了.
4.針對棧內容下硬件訪問斷點(4個字節)
選中棧中地址的值,也就是 push 的eax的值,下硬件訪問斷點
5.F9運行起來,直到跟到我們的模塊分析
第一次F9
依次類推,下方肯定會跳轉到我們的程序里面.
一直找到一個跳轉到eax的位置
此時EAX的值是 004022E4
而JMP的位置是0040AC1E
由此可以判斷出,入口點的位置是4022E4
為什么?
因為殼一般加密之后,如果跳轉到入口點,那么它是一個遠跳
此時看JMP的地址,和跳的位置就是一個遠跳.
6.F7跟入JMP eax
此時如果F7跟進來了,那么就是下面的樣子
真正的入口點
8.使用OD插件,Dump內存,脫殼.
此時我們可以使用OD插件的dump內存的插件,在入口點位置脫殼了.
彈出界面:
點擊脫殼,選擇位置,存儲你脫殼后的文件.
此時OD不要關閉.
9.使用導入表修復工具,修復脫殼后的IAT表
(關於IAT表請熟悉PE格式后看)
此時OD調試的進程不要關閉,也就是帶殼的inc2l程序,如果關閉了,那么重新進行上面幾步,只需到定位到入口點即可.
現在脫殼完畢,IAT表肯定讓殼給抹掉了,而OD的dump工具修復的IAT表也不全,所以使用一個IAT表格修復工具修復.
我用的工具是 ImportREC1.7 具體下載可以去下載看雪大禮包.
(當然我會上傳,但是此工具比較老,會有Bug,一會修復完之后手工修復即可.)
9.1打開工具.並選擇我們OD掛起的未脫殼的inc2l的程序.
9.2 OEP位置給我們的OPE的偏移
OEP位置給我們的OEP的偏移,或者讓它自動查找.
然后點擊Get Imports
9.3 點擊 Fix Dump 給我們脫殼的程序修復
現在導入表已經有了,那么點擊Fix Dump給我們剛才脫殼后的程序修復一下.
9.4運行我們的脫殼程序查看是否可以運行.
提示錯誤,Winhex打開,查看PE格式.
首先,我們發現我們的導入表,被我們的導入表修復工具加了一個新的節, 也就是mackt的節
那么我們此時我們首先定位 sizeofHead (DOS頭+ NT頭 + 節表的總大小)我們看下是多少.
有沒有自動給我們增加.
並沒有增加,大小還是200,那么是錯的,因為加了一個分頁
也就是mackt的位置的大小並沒有加上,也不是說沒有加上,而是正好在200的位置處,也就是文件中1F0的位置.
那么這個程序出BUG了,此時我們改為1000 或者你自己看下多大.
保存文件,重新打開我們的殼程序試一下還會崩潰嗎.
為了方便,拷貝到住電腦上,然后命令行打開查看.
成功運行,因為這個程序點開會一閃而過,所以截圖不了,所以命令行打開,出來這個界面就成功了.
課堂代碼資料: 鏈接:http://pan.baidu.com/s/1kVL1f6Z 密碼:2ltj
作者:IBinary
出處:http://www.cnblogs.com/iBinary/
版權所有,歡迎保留原文鏈接進行轉載:)