一个程序,用peid和fi查都是UPX加壳,OD载入提示压缩:
00778A10 > 60 pushad ; 比较象 UPX的壳入口
00778A11 BE 00106C00 mov esi, 006C1000
00778A16 8DBE 0000D4FF lea edi, dword ptr [esi+FFD40000]
00778A1C 57 push edi
00778A1D 83CD FF or ebp, FFFFFFFF
00778A20 EB 10 jmp short 00778A32
00778A22 90 nop
00778A23 90 nop
00778A24 90 nop
00778A25 90 nop
00778A26 90 nop
00778A27 90 nop
00778A28 8A06 mov al, byte ptr [esi]
......................................................
00778B6A 09C0 or eax, eax ; ntdll.RtlGetLastWin32Error
00778B6C 74 07 je short 00778B75
00778B6E 8903 mov dword ptr [ebx], eax
00778B70 83C3 04 add ebx, 4
00778B73 ^ EB D8 jmp short 00778B4D
00778B75 FF96 F0DE3700 call dword ptr [esi+37DEF0]
00778B7B 61 popad ; 与之对应的popad
00778B7C - E9 9C56E7FF jmp 005EE21D ; 大跳转,应该是OEP了吧
00778B81 0000 add byte ptr [eax], al
00778B83 0000 add byte ptr [eax], al
00778B85 0000 add byte ptr [eax], al
..........................................
005EE21D 6A 74 push 74 ; 跳到此处,OEP
005EE21F 68 38BC6200 push 0062BC38
005EE224 E8 43090000 call 005EEB6C
005EE229 33DB xor ebx, ebx
005EE22B 895D E0 mov dword ptr [ebp-20], ebx
005EE22E 53 push ebx
005EE22F 8B3D 1C226000 mov edi, dword ptr [60221C] ; kernel32.GetModuleHandleA
005EE235 FFD7 call edi
005EE237 66:8138 4D5A cmp word ptr [eax], 5A4D
005EE23C 75 1F jnz short 005EE25D
005EE23E 8B48 3C mov ecx, dword ptr [eax+3C]
005EE241 03C8 add ecx, eax
看到了OEP,于是我用Lordpe完全脱壳,用ImportREC修复,获取的ITA都是完好的,修复。仍然不能运行,出现错误报告。
如果我用OD自带的Dump插件,选择修复输入表,则程序运行后看不到界面,进程中也没有,感觉是运行后就退出了。
请大家帮忙分析一下,运行就出错,是不是程序制造者手动偷代码导致的?
运行无反应,是不是程序自校验,发现自己被脱壳所以退出的?
我是新手,希望有时间的大侠们帮忙分析一下。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)