目录 Table of Contents
版本的判断:
PEiD 查壳 : ASProtect 1.23 RC4 - 1.3.08.24 -> Alexey Solodovnikov
发现这期间有 4 个版本, 判断方法如下
判断版本:
ASProtect 1.23 RC4 按 shift+f9 键 26 次后来到典型异常,在最近处的 retn 处设断,跳过异常,f8 单步跟就会来到 foep。
ASProtect 1.31 04.27 按 shift+f9 键 36 次后来到典型异常,在最近处的 retn 处设断,跳过异常,f8 单步跟就会来到 foep。
ASProtect 1.31 05.18 按 shift+f9 键 40 次后来到典型异常,在最近处的 retn 处设断,跳过异常,f8 单步跟就会来到 foep。
ASProtect 1.31 06.14 按 shift+f9 键 38 次后来到典型异常,在最近处的 retn 处设断,跳过异常,f8 单步跟就会来到 foep。
我们也可以用 PEiD 的 VerA 插件查看, 显示是上面第一个版本

1、忽略除内存访问的所有异常,隐藏一下 OD,SHIFT+F9 26 次后来到最后一次异常
就是只取消 非法访问内存
的勾勾
26 次之后来到最后一次异常
00C739EC 3100 xor dword ptr ds:[eax],eax //断在这
00C739EE 64:8F05 00000000 pop dword ptr fs:[0]
00C739F5 58 pop eax
00C739F6 833D B07EC700 00 cmp dword ptr ds:[C77EB0],0
00C739FD 74 14 je short 00C73A13
00C739FF 6A 0C push 0C
00C73A01 B9 B07EC700 mov ecx,0C77EB0
00C73A06 8D45 F8 lea eax,dword ptr ss:[ebp-8]
00C73A09 BA 04000000 mov edx,4
00C73A0E E8 2DD1FFFF call 00C70B40
00C73A13 FF75 FC push dword ptr ss:[ebp-4]
00C73A16 FF75 F8 push dword ptr ss:[ebp-8]
00C73A19 8B45 F4 mov eax,dword ptr ss:[ebp-C]
00C73A1C 8338 00 cmp dword ptr ds:[eax],0
00C73A1F 74 02 je short 00C73A23
00C73A21 FF30 push dword ptr ds:[eax]
00C73A23 FF75 F0 push dword ptr ss:[ebp-10]
00C73A26 FF75 EC push dword ptr ss:[ebp-14]
00C73A29 C3 retn
2、在 retn
处下断,SHIFT+F9,取消断点
现在打开内存窗口, 直接在 00401000 处下断就可以来到假的 OEP
3、在堆栈窗口找显示程序名的下面 2 行,下 HR 12FFA4
就是图片中黄色部分, 下硬件断点, 运行

4、一直 F8,到这里
我这里和视频中有些区别, 见图

00C85C47 BD 4D5CC800 mov ebp,0C85C4D
00C85C4C FF55 03 call dword ptr ss:[ebp+3] //到这F7跟
00C85C4F E8 595CC800 call 0190B8AD
00C85C54 9A E969F29A 5DF3 call far F35D:9AF269E9
00C85C5B EB 02 jmp short 00C85C5F
00C85C5D CD20 1BE9EB02 vxdjump 2EBE91B
00C85C63 CD20 33E8EB02 vxdjump 2EBE833
00C85C69 CD20 EB010F8D vxdcall 8D0F01EB
00C85C6F 6C ins byte ptr es:[edi],dx
00C85C70 75 37 jnz short 00C85CA9
00C85C72 5D pop ebp
00C85C73 EB 01 jmp short 00C85C76
00C85C75 C7 ??? ; 未知命令
5、一直F7跟,找抽取代码
注意一下, ACProtect 壳我们一般见 call
就进, 不然程序一不小心就跑飞了

(1)
00C84F0A 55 push ebp
00C84F0B 8BEC mov ebp,esp
00C84F0D 6A FF push -1
00C84F0F 68 78E35300 push 53E378
00C84F14 68 407B4F00 push 4F7B40
00C84F19 64:A1 00000000 mov eax,dword ptr fs:[0]
55 8B EC 6A FF 68 78 E3 53 00 68 40 7B 4F 00 64 A1 00 00 00 00

然后我们接着 F7
(2)
00C84F22 50 push eax
00C84F23 64:8925 00000000 mov dword ptr fs:[0],esp
00C84F2A 83EC 58 sub esp,58
50 64 89 25 00 00 00 00 83 EC 58

(3)
00C84F30 53 push ebx
53

(4)
00C84F34 56 push esi
56

(5)
00C84F38 57 push edi
00C84F39 8965 E8 mov dword ptr ss:[ebp-18],esp
57 89 65 E8

6、把代码汇总一下
55 8B EC 6A FF 68 78 E3 53 00 68 40 7B 4F 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 58 53 56 57 89 65 E8
7、继续F7,来到这,就F8
你必须按 F8, 因为 F7 没反应 233333
00C85B74 51 push ecx
00C85B75 57 push edi
00C85B76 9C pushfd
00C85B77 FC cld
00C85B78 BF B55BC800 mov edi,0C85BB5
00C85B7D B9 5E140000 mov ecx,145E
00C85B82 F3:AA rep stos byte ptr es:[edi]
00C85B84 9D popfd
00C85B85 5F pop edi
00C85B86 59 pop ecx
00C85B87 C3 retn
8、一直 F8 到这里,然后向上看
上面的空代码其实就是被抽取的代码
004F27CF FF15 9CC25200 call dword ptr ds:[52C29C]
004F27D5 33D2 xor edx,edx
004F27D7 8AD4 mov dl,ah
004F27D9 8915 34306900 mov dword ptr ds:[693034],edx
004F27DF 8BC8 mov ecx,eax
004F27E1 81E1 FF000000 and ecx,0FF
004F27E7 890D 30306900 mov dword ptr ds:[693030],ecx
004F27ED C1E1 08 shl ecx,8
004F27F0 03CA add ecx,edx
004F27F2 890D 2C306900 mov dword ptr ds:[69302C],ecx
004F27F8 C1E8 10 shr eax,10
004F27FB A3 28306900 mov dword ptr ds:[693028],eax
004F2800 6A 01 push 1
004F2802 E8 933B0000 call SoWorker.004F639A

9、
004F27A4 C3 retn
004F27A5 33C0 xor eax,eax
004F27A7 ^ EB F8 jmp short SoWorker.004F27A1
004F27A9 0000 add byte ptr ds:[eax],al //这里就是真正的OEP了
004F27AB 0000 add byte ptr ds:[eax],al
004F27AD 0000 add byte ptr ds:[eax],al
004F27AF 0000 add byte ptr ds:[eax],al
004F27B1 0000 add byte ptr ds:[eax],al
004F27B3 0000 add byte ptr ds:[eax],al
004F27B5 0000 add byte ptr ds:[eax],al
004F27B7 0000 add byte ptr ds:[eax],al
004F27B9 0000 add byte ptr ds:[eax],al
004F27BB 0000 add byte ptr ds:[eax],al
004F27BD 0000 add byte ptr ds:[eax],al
004F27BF 0000 add byte ptr ds:[eax],al
004F27C1 0000 add byte ptr ds:[eax],al
004F27C3 0000 add byte ptr ds:[eax],al
004F27C5 0000 add byte ptr ds:[eax],al
004F27C7 0000 add byte ptr ds:[eax],al
004F27C9 0000 add byte ptr ds:[eax],al
004F27CB 0000 add byte ptr ds:[eax],al
004F27CD 0000 add byte ptr ds:[eax],al
004F27CF FF15 9CC25200 call dword ptr ds:[52C29C]
004F27D5 33D2 xor edx,edx


10、补上代码,脱壳,修复
我 1.7 版本的 ImportREC 必死…… 就这样吧 orz