慢慢分析一下,就是汇编,只不过这个程序有点怪,找不到这个函数GetModuleHandleA
,无从修复成像以上形式。
昨天看了看WinUpack 3.9 statick unpacker v0.2.exe这个程序的入口,他是汇编写得,说到底OEP中语句作用是一样的,比较如下:
00400640 > 33DB xor ebx, ebx
00400642 53 push ebx
00400643 |. E8 EC110000 call <jmp.&kernel32.GetModuleHandleA> ; \GetModuleHandleA
00400648 |. A3 80184000 mov dword ptr [401880], eax
0040064D 53 push ebx
0040064E 68 68114000 push 00401168
00400653 |. 53 push ebx ; |hOwner
00400654 |. 68 38024000 push 00400238 ; |pTemplate = "DIALOG"
00400659 |. FF35 80184000 push dword ptr [401880] ; |hInst = NULL
0040065F |. E8 40110000 call <jmp.&user32.DialogBoxParamA> ; \DialogBoxParamA
00400664 |. 50 push eax ; /ExitCode
00400665 \. E8 C4110000 call <jmp.&kernel32.ExitProcess> ; \ExitProcess
上面这段入口代码,peid是无法识别的,我们将以上这段改成下面这段,peid便可识别为汇编语言,记得修改OEP值:
0040063F >/$ 6A 00 push 0 ; /pModule = NULL
00400641 |. E8 EE110000 call <jmp.&kernel32.GetModuleHandleA> ; \GetModuleHandleA
00400646 |. A3 80184000 mov dword ptr [401880], eax
0040064B |. 6A 00 push 0 ; /lParam = NULL
0040064D |. 68 68114000 push 00401168 ; |DlgProc = 999.00401168
00400652 |. 6A 00 push 0 ; |hOwner = NULL
00400654 |. 68 38024000 push 00400238 ; |pTemplate = "DIALOG"
00400659 |. FF35 80184000 push dword ptr [401880] ; |hInst = NULL
0040065F |. E8 40110000 call <jmp.&user32.DialogBoxParamA> ; \DialogBoxParamA
00400664 |. 50 push eax ; /ExitCode
00400665 \. E8 C4110000 call <jmp.&kernel32.ExitProcess> ; \ExitProcess
那么我们直接给peid添加签名就可以了,因为这个变形入口是编译器直接编译出来的,而非认为变形,所以我们增加以下签名到peid签名库:
[MASM / TASM -> * Sign By CxLrb]
signature = 33 DB 53 E8 ?? ?? 00 00 A3 ?? ?? 40 00 53 68 ?? ?? 40 00 53 68 ?? ?? 40 00 FF 35 ?? ?? 40 00 E8 ?? ?? 00 00 50 E8 ?? ?? 00 00
ep_only = true
再用peid扫描看看。