最近遇到一个Armadillo 3.78的壳,本人菜鸟,按照大大们的教程进行脱壳操作,总是找不对地方,在这里提出还请各位大大们帮忙~
具体方法如下:
1、OD载入,因为是双进程保护,所以用脚本先分离父子进程,脚本在论坛里面就有;
2、2避开IAT加密
下断点 HE GetModuleHandleA
按F9运行中断后,看堆栈:
0012CC68 762EF4A7 /CALL 到 GetModuleHandleA 来自 ole32.762EF4A1
0012CC6C 762EF528 \pModule = "rpcrt4.dll"
0012CC70 762EFE05 返回到 ole32.762EFE05 来自 ole32.762EF49C
0012CC68 672AF49D /CALL 到 GetModuleHandleA 来自 safemon.672AF497
0012CC6C 672CE394 \pModule = "KERNEL32"
0012D2D8 6723D87C /CALL 到 GetModuleHandleA 来自 safemon.6723D876
0012D2DC 672D0158 \pModule = "kernel32.dll"
0012D6E4 004F4BA3 /CALL 到 GetModuleHandleA 来自 AutoCCMa.004F4B9D
0012D6E8 00000000 \pModule = NULL
00127B38 00781B31 /CALL 到 GetModuleHandleA 来自 00781B2B
00127B3C 00796364 \pModule = "kernel32.dll"
00127B40 00797588 ASCII "VirtualAlloc"
00127B38 00781B4E /CALL 到 GetModuleHandleA 来自 00781B48
00127B3C 00796364 \pModule = "kernel32.dll"
00127B40 0079757C ASCII "VirtualFree"
00106F24 0078C9DA /CALL 到 GetModuleHandleA 来自 0078C9D4
00106F28 00000000 \pModule = NULL
00106F58 0078C640 /CALL 到 GetModuleHandleA 来自 0078C63E
00106F5C 00000000 \pModule = NULL
多次运行注册窗口开始启动,并提示EIP错误,在此情况下Shift+F9继续运行,堆栈出现以下提示
001278A8 014B9CD7 /CALL 到 GetModuleHandleA 来自 014B9CD1
001278AC 001279EC \pModule = "kernel32.dll" ; 在这里清除硬件断点后Alt+F9返回程序
Alt+F9返回到这里来了
014B9CD7 8B0D 74B74E01 MOV ECX,DWORD PTR DS:[14EB774] ; 返回到这里
014B9CDD 89040E MOV DWORD PTR DS:[ESI+ECX],EAX ; kernel32.75E20000
014B9CE0 A1 74B74E01 MOV EAX,DWORD PTR DS:[14EB774]
014B9CE5 391C06 CMP DWORD PTR DS:[ESI+EAX],EBX
014B9CE8 75 16 JNZ SHORT 014B9D00
014B9CEA 8D85 B4FEFFFF LEA EAX,DWORD PTR SS:[EBP-14C]
014B9CF0 50 PUSH EAX ; kernel32.75E20000
014B9CF1 FF15 DC004E01 CALL DWORD PTR DS:[14E00DC] ; kernel32.LoadLibraryA
014B9CF7 8B0D 74B74E01 MOV ECX,DWORD PTR DS:[14EB774]
014B9CFD 89040E MOV DWORD PTR DS:[ESI+ECX],EAX ; kernel32.75E20000
014B9D00 A1 74B74E01 MOV EAX,DWORD PTR DS:[14EB774]
014B9D05 391C06 CMP DWORD PTR DS:[ESI+EAX],EBX
014B9D08 0F84 3B010000 JE 014B9E49 ; 改成为 JMP 00C05E47 修改这是为了避开IAT加密
014B9D0E 33C9 XOR ECX,ECX ; ntdll.77606500
014B9D10 8B07 MOV EAX,DWORD PTR DS:[EDI]
014B9D12 3918 CMP DWORD PTR DS:[EAX],EBX
014B9D14 74 06 JE SHORT 014B9D1C
014B9D16 41 INC ECX ; ntdll.77606500
014B9D17 83C0 0C ADD EAX,0C
014B9D1A ^ EB F6 JMP SHORT 014B9D12
014B9D1C 8BD9 MOV EBX,ECX ; ntdll.77606500
014B9D1E C1E3 02 SHL EBX,2
014B9D21 53 PUSH EBX
014B9D22 E8 A9530200 CALL 014DF0D0 ; JMP 到 msvcrt.??2@YAPAXI@Z
3 寻找入口点
继续下断点 bp GetCurrentThreadId
按F9运行中断后,看堆栈:
0012754C 72941E46 /CALL 到 GetCurrentThreadId 来自 72941E40
0012752C 7294352D /CALL 到 GetCurrentThreadId 来自 72943527
00127B40 00000000
到了这里以后就进行不下去了找不到大大们说的返回的程序的地方,F9运行始终没有 /CALL
按照教程来走找不到北了
新人比较菜,还请各位大大们指教~
脱壳程序放到附件中了,有大大能指点帮我脱壳么?
更新文件
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)