Thebat!139脫殼詳情及對Asprotect加殼保護的一點小結
小弟本想脫thebat141的殼的,但小弟下載的thebat141卻沒有加殼,沒辦法,還是拿thebat139開刀了。
如果小弟下面的內容有錯漏的地方,請給小弟指正。
小弟的脫殼方法和冰毒的不同,他的方法我用不了,我用Procdump32脫不了thebat的殼。
廢話少說,let's go!
所用工具:soft-ice405、icedump6015、procdump1.6.2、ultraedit5.0。
首先載入softice,再載入icedump。執行procdump32,點選PE Editor,選擇thebat.exe
檔案,我們要記一下資料了:size of image:00314000 image base:00400000,
點選sections,記下.idata的資料:virtual siza:00003000 virtual offset:0022E000 ,這樣我們
可以知道.idata在記憶體中的地址為:0062E000,長度為:3000
啟動Symbol Loader,載入thebat.exe(載入過icedump後,softice可以成功攔截thebat),點選一下Load,
馬上被攔截,如下:
XXX:006FF001 PUSHAD **第一個PUSHAD指令**
XXX:006FF002 CALL 006FF008 按F8進入
XXX:006FF007 NOP
XXX:006FF008 POP EBP 按F10一直來到:
XXX:006FF0D6 CALL 006FF0DE 按F8進入
在這之後的一段程式要走的小心一點,我建議用F8,如果離開了thebat的就按一下F12,然後再按F8,
一直來到:
XXX:006FFA3B PUSHAD **第二個PUSHAD指令** 改按F10一直來到:
XXX:006FFB6C POPAD **和第二個PUSHAD指令是一對**
XXX:006FFB6D POP EBP
XXX:006FFB6E RET 0008 這個CALL走完了,來到:
XXX:006FF09F MOV ECX,EAX 按F10來到:
XXX:006FF0D6 CALL 006FF0DE 按F8進入,然後一直按F10來到:
XXX:006FFA3B PUSHAD **第三個PUSHAD指令** (難道又回去了?當然不是。)按F10直到:
XXX:006FFB6C POPAD **和第三個PUSHAD指令是一對**
XXX:006FFB6D POP EBP
XXX:006FFB6E RET 0008 走完這個CALL來到:
XXX:006FF1D3 PUSH 04
XXX:006FF1D5 PUSH 00001000 按F10一直到:
XXX:006FF218 CALL 006FF220 按F8進入,之後按F10一直到:
XXX:006FF2A2 CALL 006FF2AA 這裡開始一直按F8,如果離開了thebat,就按一下F12,再按F8來到:
XXX:0099E001 PUSHAD **第四個PUSHAD指令** F10一直來到:
XXX:0099E5C5 POPAD **和第四個PUSHAD指令是一對**
XXX:0099E5C6 JNP 009E5D0
XXX:0099E5C8 MOV EAX,00000001
XXX:0099E5CD RET 000C
XXX:0099E5D0 PUSH 00990B60
XXX:0099E5D5 RET 終於走完了這個CALL,來到這裡:
XXX:00990B60 PUSH EBP 按F10來到:
XXX:00990B8A CALL 00983DC4 F8進入,F10來到:
XXX:00990956 CALL 009904F4 F8進入,F10來到:
XXX:00990A11 CALL 00990110
XXX:00990A16 XOR EAX,EAX (這裡和冰毒一樣,我可省了不少時間:-))
這裡下: PAGEIN D 62E000 3000 D:\IDATA.BIN 得到完整的.idata部分
繼續F10來到:
XXX:00990B43 CALL 009904C8 F8進入,來到這裡:
XXX:009904D5 POPAD **和第一個PUSHAD指令是一對**
XXX:009904D6 PUSH EAX
XXX:009904D7 RET (這裡冰毒用Procdump32脫殼。可以嗎?我怎麼不行?誰可以就教教我。)
走完這裡來到:
XXX:0061C528 PUSH EBP
來到這裡後Soft-Ice中顯示著‘THEBAT!CODE+0021B526’,有‘CODE’的字樣,我們可以知道thebat是
用Broland寫,成的,而且我們已經進入了主程式,可以脫殼了。
下: PAGEIN D 400000 314000 D:\THEBAT.EXE 得到脫殼後的thebat.exe檔案
用ultraedit5.0開啟thebat.exe及idata.bin,將idata.bin的內容替換到thebat.exe的22E000--230FFF中。
這樣得到的程式還不能用,啟動Procdump32修改檔案Sections。
將每一項Section的 Raw Size ==> Virtual Size ; Raw Offset ==> Virtual Offset
將程式入口改成:0021C528(61C528-400000=21C528)
我記得冰毒說這樣脫殼的程式不行,當然了!因為他漏了最重要的一步(趁冰毒不在,說了他不少壞話,
大家可不要告訴他呦:-D):
點選Procdump32中的 PE Editor-->Directory,將 Import Table 的值改成:0022E000
自此程式已脫殼成功,我們來小結一下:
小弟透過對幾個用Asprotect加殼的軟體脫殼,對Asprotect加的殼有的一定了解,發現了一點共有的特徵,
用Asprotect加殼的軟體會出現3到4對‘PUSHAD--POPAD’指令(用Aspack或Upx加殼的軟體只會出現一對)
在走完這幾對‘PUSHAD--POPAD’指令後,我們便進入到主程式了,可以開始脫殼。脫殼後的檔案還要還
原PE檔案頭,要將完整的‘.idata’或‘.rdata’替換到脫殼後的檔案中,至於到底是‘.idata’還是
‘.rdata’就要大家自己去判斷了,最後修改檔案的Sections、Entry Point、Import Table各項。這樣也
就脫殼成功了。
baoleigz(暴雷)