xx通用人事工资管理系统豪华版
PEID:ASPack 2.x (without poly) -> Alexey Solodovnikov
1.OEP+DUMP
OD载入:双击跟随KiUserExceptionDispatcher,下断call ecx:
77FBB270 FFD1 call ecx
第一层壳:
00432BA2 S> 60 pushad ; 入口点
00432BA3 E8 00000000 call SXRSGZHH.00432BA8 ; hr esp ,F9
00432BA8 5D pop ebp
00432BA9 81ED 06104000 sub ebp,SXRSGZHH.00401006
发生异常,断在call ecx:
77FBB270 FFD1 call ecx ; SXRSGZHH.00432BF8
堆栈:
0012FBF4 0012FCB0
0012FBF8 0012FF9C
0012FBFC 0012FCD0
DD 0012FCD0+B8:0012FD88 00432BC4 SXRSGZHH.00432BC4
来到00432BC4,下一行下断,F9:
00432BC4 CC int3
00432BC5 90 nop ; 断在此,取消该处断点后单步往下
...
00432BEA 58 pop eax
00432BEB 894424 1C mov dword ptr ss:[esp+1C],eax
00432BEF 61 popad
00432BF0 ^ FFE0 jmp eax ; SXRSGZHH.0042F001
来到第二个壳?:
0042F001 60 pushad
0042F002 E8 03000000 call SXRSGZHH.0042F00A ; hr esp,F9
0042F007 - E9 EB045D45 jmp 459FF4F7
0042F00C 55 push ebp
0042F00D C3 retn
...
0042F3AF 61 popad
0042F3B0 /75 08 jnz short SXRSGZHH.0042F3BA ; 断在此
0042F3B2 |B8 01000000 mov eax,1
0042F3B7 |C2 0C00 retn 0C
0042F3BA \68 430F4200 push SXRSGZHH.00420F43
0042F3BF C3 retn
返回到第3个壳?:
00420F43 60 pushad
00420F44 E8 00000000 call SXRSGZHH.00420F49 ; hr esp,F9
00420F49 5D pop ebp
00420F4A 81ED 06104000 sub ebp,SXRSGZHH.00401006
00420F50 8D85 56104000 lea eax,dword ptr ss:[ebp+401056]
00420F56 50 push eax
发生异常,又断在:call ecx,堆栈:
0012FBF4 0012FCB0
0012FBF8 0012FF9C
0012FBFC 0012FCD0
dd 0012FCD0+B8:0012FD88 00420F65 SXRSGZHH.00420F65
来到00420F65处,往下一行下断:
00420F65 CC int3
00420F66 90 nop ; 断在此
单步往下不久:
00420F8C 894424 1C mov dword ptr ss:[esp+1C],eax
00420F90 61 popad
00420F91 ^ FFE0 jmp eax ; SXRSGZHH.0041FBD8
...
0041FBD8 55 push ebp ; dump
0041FBD9 8BEC mov ebp,esp
2.修复IAT:
另开OD,载入dump.exe,来到第一个call:
004065CC E8 2BFFFFFF call SXRSGZHH.004064FC ; jmp to kernel32.GetModuleHandleA
跟进:
004064FC - FF25 C8514200 jmp dword ptr ds:[4251C8] ; kernel32.GetModuleHandleA
00406502 8BC0 mov eax,eax
找到其中的一个函数,好,dd 004251C8,然后上下翻翻看到:
004250D8 00000000
004250DC 77F8F0B2 ntdll.RtlDeleteCriticalSection
004250E0 77F87FC0 ntdll.RtlLeaveCriticalSection
...
00425340 779BB7A0 oleaut32.VariantClear
00425344 779BB790 oleaut32.VariantInit
00425348 00000000
0042534C 6E72656B
上ImportREC_fix.exe,选择未脱壳程序(已经到OEP处):
OEP:0001FBD8
RVA:000250D8
SIZE:270(0042534C-004250D8)
Get Imports,无无效函数,修复。
PEID:Borland Delphi 6.0 - 7.0
运行,错误,提示:不是Visual FoxPro文件
3.脱壳总结:
有3层,第一层有个异常,可以在KiUserExceptionDispatcher的call ecx处下断(参考加密与解密第二版的反跟踪技术篇),断下后查看堆栈,然后DD CONTEXT.EIP的值,下一行设断,F9再运行断下,单步往下不一会就到出口,第二层壳可以在pushad处下hr esp,F9运行断下后就到出口,然后来到第3层壳,跟第一层壳几乎一样操作就到了OEP,此时可dump,然后修复IAT。
壳是脱了,可是不能运行提示非Visual FoxPro文件,这个问题看到本论坛的讨论,没能有结果。请达者指教,谢谢了。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!