PEID扫描:
Armadillo 1.xx - 2.xx -> Silicon Realms Toolworks [Overlay]
这是个猛壳,当然得用修改版的OD了。
FlyOD载入来到:
005137C3 > 55 push ebp
005137C4 8BEC mov ebp,esp
005137C6 6A FF push -1
005137C8 68 20DB5300 push Regmedic.0053DB20
005137CD 68 00355100 push Regmedic.00513500
看堆栈:
0012FFC4 7C816D4F 返回到 kernel32.7C816D4F
0012FFC8 7C930738 ntdll.7C930738
先修改OD的异常设置,这个壳,有很多异常。
我就勾选所有的异常。
开始下断,在命令行输入:
BP LoadLibraryA
回车。
/////////////////////////////////////////
如果不忽略异常,当出现异常时,
shift+F7/F8/F9键跳过异常以继续执行程序
你按41次shift+F9
程序就运行。好累!
/////////////////////////////////////////
00127840 00C247EB /CALL 到 LoadLibraryA 来自 00C247E5
00127844 00127990 \FileName = "MSVBVM60.DLL"
这是个VB程序,到这里可以返回了。
先取消断点,然后Alt+F9返回到程序领空。
00C247EB 8B0D 7CF6C400 mov ecx,dword ptr ds:[C4F67C]
00C247F1 89040E mov dword ptr ds:[esi+ecx],eax
00C247F4 A1 7CF6C400 mov eax,dword ptr ds:[C4F67C]
00C247F9 391C06 cmp dword ptr ds:[esi+eax],ebx----先对他下硬件断点
00C247FC 0F84 2F010000 je 00C24931------------这里就是传说中的Magic JMp了。
00C24802 33C9 xor ecx,ecx
00C24804 8B07 mov eax,dword ptr ds:[edi]
00C24806 3918 cmp dword ptr ds:[eax],ebx
00C24808 74 06 je short 00C24810
00C2480A 41 inc ecx
00C2480B 83C0 0C add eax,0C
00C2480E ^ EB F6 jmp short 00C24806
00C24810 8BD9 mov ebx,ecx
00C24812 C1E3 02 shl ebx,2
然后返回去,再载入看看。现在不要修改Magic JMP
因为有了硬件断点,就直达我们刚才下的硬件断点了,现在先取消内存断点,修改Magic jMP,
ALT+M打开内存镜像,然后下内存断点,在401000处。
按F9运行, 直达OEP
004D08D0 55 push ebp-----OEP了。
004D08D1 8BEC mov ebp,esp
004D08D3 83C4 F0 add esp,-10
004D08D6 B8 C8054D00 mov eax,Regmedic.004D05C8
004D08DB E8 7868F3FF call Regmedic.00407158
因为是猛壳,一定要记住用LordPE来DUMP。
先Correct Imagesize
然后Dump Full
现在可以修复输入表了。
还是有些指针没有修复,Cut 它们。
然后Fix DUMP 。
时间有点长了。
运行一下。OK,脱壳成功。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)