ARM單進程脫殼之FtpRush v1.0
【目 標】:FTPRush v1.0
【工 具】:Olydbg1.1(diy版)、LORDPE、ImportREC1.6F
【任 務】簡單的脫一下殼
【操作平臺】:Windows Xp sp1
【作 者】:loveboom[DFCG][FCG][US]
【簡要說明】:因爲程序和其它的ARM的加的程序有所不同,程序的部分代碼跑到殼內去了.。所以就寫一下。
【詳細過程】:
設置:
忽略全部異常,隱藏好你的OD,載入後到殼的入口處:
007E4DE0 >/$ 55 PUSH EBP ;標準的C的入口來的
007E4DE1 |. 8BEC MOV EBP,ESP
007E4DE3 |. 6A FF PUSH -1
在程序的EP處下斷HE GetModuleHandleA,然後運行,當然中途會中斷好幾次的,我們注意下堆棧,當出現這個樣子的時候就接近我們要找的東西了.
00127A48 01049B22 /CALL to GetModuleHandleA from 01049B1C
00127A4C 00127B84 /pModule = "MSVBVM60.DLL"
看到這樣子後,小心按幾次f9,現在到這裏:
00127A48 01049B22 /CALL to GetModuleHandleA from 01049B1C
00127A4C 00127B84 /pModule = "advapi32.dll"
再按一次F9:
看到這裏的時候,取消硬件斷點hd GetModuleHandleA,然後返回到程序代碼:
01065EC0 FF15 CCF00601 CALL DWORD PTR DS:[106F0CC] ; kernel32.GetModuleHandleA
01065EC6 3985 9CC4FFFF CMP DWORD PTR SS:[EBP-3B64],EAX ; 返回到這裏
01065ECC 75 0F JNZ SHORT 01065EDD
01065ECE C785 98C4FFFF 5>MOV DWORD PTR SS:[EBP-3B68],1073B58
01065ED8 E9 C4000000 JMP 01065FA1
01065EDD 83A5 74C2FFFF 0>AND DWORD PTR SS:[EBP-3D8C],0
01065EE4 C785 70C2FFFF 9>MOV DWORD PTR SS:[EBP-3D90],1074198
01065EEE EB 1C JMP SHORT 01065F0C
01065EF0 8B85 70C2FFFF MOV EAX,DWORD PTR SS:[EBP-3D90]
01065EF6 83C0 0C ADD EAX,0C
01065EF9 8985 70C2FFFF MOV DWORD PTR SS:[EBP-3D90],EAX
01065EFF 8B85 74C2FFFF MOV EAX,DWORD PTR SS:[EBP-3D8C]
01065F05 40 INC EAX
01065F06 8985 74C2FFFF MOV DWORD PTR SS:[EBP-3D8C],EAX
01065F0C 8B85 70C2FFFF MOV EAX,DWORD PTR SS:[EBP-3D90]
01065F12 8338 00 CMP DWORD PTR DS:[EAX],0 ; 直接按f4執行到這裏,然後把[eax],置0
01065F15 0F84 86000000 JE 01065FA1
具體可見下圖:
改好後就可以得到全部的IAT的。
修改完畢,在code段下f2斷點:
這樣子很快就到了程序的OEP處:
0076C0AC 55 PUSH EBP ; oep
0076C0AD 8BEC MOV EBP,ESP
0076C0AF 83C4 F0 ADD ESP,-10
0076C0B2 B8 A4B77600 MOV EAX,0076B7A4
這裏先別急着DUMP看看代碼先吧:
0040525A - E9 5FC73303 JMP 037419BE ; 看看吧,怎麼樣,代碼進殼裏去了
0040525F 0FC8 BSWAP EAX
00405261 76 00 JBE SHORT 00405263
00405263 0FC8 BSWAP EAX
00405265 C740 04 B851400>MOV DWORD PTR DS:[EAX+4],004051B8
0040526C 8968 08 MOV DWORD PTR DS:[EAX+8],EBP
0040526F A3 40467700 MOV DWORD PTR DS:[774640],EAX
00405274 C3 RETN
00405275 8D40 00 LEA EAX,DWORD PTR DS:[EAX]
00405278 31D2 XOR EDX,EDX
0040527A A1 40467700 MOV EAX,DWORD PTR DS:[774640]
0040527F 85C0 TEST EAX,EAX
00405281 74 1C JE SHORT 0040529F
00405283 64:8B0A MOV ECX,DWORD PTR FS:[EDX]
00405286 39C8 CMP EAX,ECX
00405288 75 08 JNZ SHORT 00405292
0040528A - E9 55C73303 JMP 037419E4 ; 這裏也是
0040528F C3 RETN
現在我們要動一下手術了,用lordpe全部他dump一下,然後在OD中打開內存頁面找到我們要DUMP的那個段雙擊後,保存數據到文件:
保存後,我們計算一下03740000-400000(imgbase)=03340000,好了記下先.
用lordpe載入我們剛纔保存下來的段。並改一下VA爲我們剛纔記下的那個值:
改好後,重建一下文件,重建選項爲:
重建文件完畢,FIXDUMP一下就行了,OK這次脫殼就這樣結束了.現在程序也顯示已經註冊了J.
Greetz:
Fly.Jingulong,yock,tDasm.David.ahao.UFO(brother).alan(sister).all of my friends and you!
By loveboom[DFCG][FCG]
Email:[email protected]