来源:安全中国
ACProtect 1.21专业版主程序的脱壳
操作系统:WIN2K
工具:OLLYDBG1.1,ImportREC,LordPE
下载地址: http://www.ultraprotect.com/acpr_pro.exe
目标程序:ACProtect 1.21专业版主程序。
脱壳过程:
1.寻找Stolen code的变形及其伪OEP。
用OLLYDBG1.1加载后,停留在程序的入口:
006D4000 pushad
006D4001 dec ecx
006D4002 sbb esi,B59B7C21
006D4008 clc
006D4009 mov ecx,ebx
006D400B dec ecx
用IsDebug 1.4插件去掉Ollydbg的调试器标志。忽略除了“int3异常”之外的所有其他异常选项。
查看堆栈esp=12ffc4,根据此值来设置硬件访问断点:去转存窗口,Ctrl+G:0012FFC0(入口esp-4),在0012FFC0处的4个字节上,下硬件访问->DWord 断点。
F9开始运行,断下后再取消该硬件断点。
006E56FF popad
006E5700 mov dword ptr ds:[6D4E73],ebx
006E5706 push dword ptr ds:[6D4E73]
006E570C push eax
006E570D mov eax,ACProtec.006D4ECF
006E5712 mov ebx,eax
006E5714 pop eax ; KERNEL32.77E887E7
006E5715 mov dword ptr ds:[ebx],ecx
006E5717 pop ebx ; KERNEL32.77E887E7
006E5718 push dword ptr ds:[6D4ECF]
006E571E mov dword ptr ss:[esp],esi
006E5721 mov dword ptr ss:[esp],ebx
006E5724 mov dword ptr ss:[esp],eax
006E5727 push edx
006E5728 pop dword ptr ds:[6D4ECB] ; KERNEL32.77E887E7
006E572E push dword ptr ds:[6D4ECB]
006E5734 mov dword ptr ss:[esp],ecx
006E5737 mov dword ptr ss:[esp],ACProtec.006D4F0F
006E573E pop dword ptr ds:[6D4EEF] ; KERNEL32.77E887E7
006E5744 mov dword ptr ds:[6D4E9F],ebx
006E574A push dword ptr ds:[6D4E9F]
006E5750 pushad
006E5751 call ACProtec.006E1460
006E5756 call ACProtec.006E575B
006E575B pop ebx ; KERNEL32.77E887E7
006E575C sub ebx,dword ptr ss:[ebp+4023EC]
006E5762 sub ebx,1175B
006E5768 mov dword ptr ss:[ebp+40D2AA],ebx
006E576E popad
006E576F mov dword ptr ss:[esp],edi ; ACProtec.005D16A8
006E5772 mov dword ptr ds:[6D4E9B],ACProtec.006D4EEF
006E577C push dword ptr ds:[6D4E9B]
006E5782 pop dword ptr ds:[6D4E97] ; KERNEL32.77E887E7
006E5788 mov edi,dword ptr ds:[6D4E97]
006E578E mov eax,dword ptr ds:[edi]
006E5790 mov edi,dword ptr ss:[esp] ; KERNEL32.77E887E7
006E5793 pop dword ptr ds:[6D4EC7] ; KERNEL32.77E887E7
006E5799 mov dword ptr ds:[eax],ebp //stolen code第1行,push ebp的变形
006E579B mov eax,dword ptr ss:[esp] ; KERNEL32.77E887E7
006E579E pop dword ptr ds:[6D4EFB] ; KERNEL32.77E887E7
006E57A4 push dword ptr ds:[6D4F0F]
006E57AA mov dword ptr ds:[6D4F0B],esp
006E57B0 push dword ptr ds:[6D4F0B]
006E57B6 pop dword ptr ds:[6D4EF7] ; KERNEL32.77E887E7
006E57BC push eax
006E57BD nop
006E57BE nop
006E57BF pushad
006E57C0 call ACProtec.006E1460
006E57C5 call ACProtec.006E11FE
006E57CA mov dword ptr ss:[ebp+40E205],eax
006E57D0 popad
006E57D1 mov dword ptr ss:[esp],edx
006E57D4 mov dword ptr ds:[6D4E93],ACProtec.006D4EDB
006E57DE mov edx,dword ptr ds:[6D4E93]
006E57E4 mov dword ptr ds:[edx],ecx
006E57E6 mov edx,dword ptr ss:[esp] ; KERNEL32.77E887E7
006E57E9 pop dword ptr ds:[6D4E8F] ; KERNEL32.77E887E7
006E57EF push dword ptr ds:[6D4EDB]
006E57F5 push ACProtec.006D4EF7
006E57FA pop dword ptr ds:[6D4EC3] ; KERNEL32.77E887E7
006E5800 push dword ptr ds:[6D4EC3]
006E5806 pop dword ptr ds:[6D4EBF] ; KERNEL32.77E887E7
006E580C push dword ptr ds:[6D4EBF]
006E5812 pop ecx ; KERNEL32.77E887E7
006E5813 mov ebp,dword ptr ds:[ecx] //stolen code第2行,mov ebp,esp的变形
006E5815 mov ecx,dword ptr ss:[esp] ; KERNEL32.77E887E7
006E5818 pop dword ptr ds:[6D4ED7] ; KERNEL32.77E887E7
006E581E push edx
006E581F nop
006E5820 nop
006E5821 pushad
006E5822 call ACProtec.006E1460
006E5827 mov byte ptr ss:[ebp+40D1D0],0
006E582E popad
006E582F mov edx,ACProtec.006D4EBB
006E5834 mov dword ptr ds:[edx],ebx
006E5836 pop edx ; KERNEL32.77E887E7
006E5837 push dword ptr ds:[6D4EBB]
006E583D pop dword ptr ds:[6D4EEB] ; KERNEL32.77E887E7
006E5843 push dword ptr ds:[6D4EEB]
006E5849 mov dword ptr ss:[esp],eax
006E584C mov dword ptr ss:[esp],esi //stolen code第3行,push esi的变形
