【破文标题】ASProtect 1.23 RC4 - 1.3.08.24 -> Alexey Solodovnikov 之脱壳
【破文作者】失落的剑
【作者邮箱】by110@qq.com
【破解工具】OD、Import REC、LordPE
【破解平台】WINXP
【软件名称】SoWorker_cn_hero
【软件大小】1.66MB
【原版下载】
ftp://219.239.138.183/SoWorker_cn_hero.exe
【保护方式】ASProtect 1.23 RC4 - 1.3.08.24 -> Alexey Solodovnikov
【软件简介】一个游戏外挂,多的不提了
【破解声明】感谢compiler大虾与birdcfly大虾的鼎力支持与帮助,特此写了以下文字教程,以供交流
——————————————————————————————————————————————
首先隐藏OD,这点就不用多说了,没有插件的自己去看雪主页下载去。
OD不忽略内存访问异常,其余全忽略,载入程序:
程序开始处:
00401000 > 68 01C06B00 push 006BC001
00401005 E8 01000000 call 0040100B
0040100A C3 retn
0040100B C3 retn
0040100C - 7F D6 jg short 00400FE4
0040100E 4B dec ebx
0040100F 6E outs dx, byte ptr es:[edi]
00401010 B0 E2 mov al, 0E2
00401012 A2 DF47AC06 mov byte ptr [6AC47DF], al
00401017 BA 6AE25969 mov edx, 6959E26A
0040101C 1069 EE adc byte ptr [ecx-12], ch
经过26次的SHIFT+F9到达此处(因为程序按27就运行了,小常识不必多说.)
00C839EC 3100 xor dword ptr [eax], eax
00C839EE 64:8F05 0000000>pop dword ptr fs:[0]
00C839F5 58 pop eax
00C839F6 833D B07EC800 0>cmp dword ptr [C87EB0], 0
00C839FD 74 14 je short 00C83A13
00C839FF 6A 0C push 0C
00C83A01 B9 B07EC800 mov ecx, 0C87EB0
00C83A06 8D45 F8 lea eax, dword ptr [ebp-8]
00C83A09 BA 04000000 mov edx, 4
00C83A0E E8 2DD1FFFF call 00C80B40
00C83A13 FF75 FC push dword ptr [ebp-4]
00C83A16 FF75 F8 push dword ptr [ebp-8]
00C83A19 8B45 F4 mov eax, dword ptr [ebp-C]
00C83A1C 8338 00 cmp dword ptr [eax], 0
00C83A1F 74 02 je short 00C83A23
00C83A21 FF30 push dword ptr [eax]
00C83A23 FF75 F0 push dword ptr [ebp-10]
00C83A26 FF75 EC push dword ptr [ebp-14]
00C83A29 C3 retn<------------------------------此处F2断点,继续SHIFT+F9
00C83A2A 5F pop edi
00C83A2B 5E pop esi
00C83A2C 5B pop ebx
看到堆栈区为:
0012FF5C 00C94B78
0012FF60 00400000 SoWorker.00400000
0012FF64 DFA61663
0012FF68 0012FFA4
下断点 hr 0012ff68
取消00C83A29 C3 retn处断点继续...
按F9---来到了这里
00C96642 /EB 44 jmp short 00C96688 此处按F8
00C96644 |EB 01 jmp short 00C96647
00C96646 |9A 51579CFC BF0>call far 00BF:FC9C5751
00C9664D |0000 add byte ptr [eax], al
00C9664F |00B9 00000000 add byte ptr [ecx], bh
00C96655 |F3:AA rep stos byte ptr es:[edi]
继续按F8 跟入
00C96688 03C3 add eax, ebx ; SoWorker.00400000
00C9668A BB CD000000 mov ebx, 0CD
00C9668F 0BDB or ebx, ebx
00C96691 75 07 jnz short 00C9669A
00C96693 894424 1C mov dword ptr [esp+1C], eax
00C96697 61 popad
00C96698 50 push eax
00C96699 C3 retn
00C9669A E8 00000000 call 00C9669F
00C9669F 5D pop ebp
00C966A0 81ED 4DE14B00 sub ebp, 4BE14D
00C966A6 8D85 F2E04B00 lea eax, dword ptr [ebp+4BE0F2]
00C966AC 8D8D 94E14B00 lea ecx, dword ptr [ebp+4BE194]
00C966B2 03CB add ecx, ebx
00C966B4 8941 01 mov dword ptr [ecx+1], eax
00C966B7 8D85 36E14B00 lea eax, dword ptr [ebp+4BE136]
00C966BD 8D8D FAE04B00 lea ecx, dword ptr [ebp+4BE0FA]
00C966C3 8901 mov dword ptr [ecx], eax
00C966C5 B8 5E140000 mov eax, 145E
00C966CA 8D8D FFE04B00 lea ecx, dword ptr [ebp+4BE0FF]
00C966D0 8901 mov dword ptr [ecx], eax
00C966D2 8D8D 94E14B00 lea ecx, dword ptr [ebp+4BE194]
00C966D8 8D85 94F34B00 lea eax, dword ptr [ebp+4BF394]
00C966DE 51 push ecx
00C966DF 50 push eax
00C966E0 E8 76FFFFFF call 00C9665B
00C966E5 61 popad
00C966E6 F2: prefix repne: <-------------------------这里不要按F8了,改按F7了跟入...
跟至
00C966EA /64:EB 02 jmp short 00C966EF
00C966ED |CD20 EB01E98D vxdcall 8DE901EB
00C966F3 64:24 D2 and al, 0D2
00C966F6 83C4 2A add esp, 2A
00C966F9 F3: prefix rep:
00C966FA EB 02 jmp short 00C966FE
00C966FC CD20 56EB02CD vxdjump CD02EB56
00C96702 208F 442400EB and byte ptr [edi+EB002444], cl
00C96708 01E8 add eax, ebp
00C9670A 3E:EB 01 jmp short 00C9670E
一直按F7直到.......↓
00C96774 55 push ebp
00C96775 8BEC mov ebp, esp
00C96777 6A FF push -1
00C96779 68 A06C5300 push 536CA0
00C9677E 68 00124F00 push 4F1200
00C96783 64:A1 00000000 mov eax, dword ptr fs:[0]
把以上六行代码复制二进制添加一个文档中
我的二进制代码为 55 8B EC 6A FF 68 A0 6C 53 00 68 00 12 4F 00 64 A1 00 00 00 00
继续F7跟至:
00C9678C 50 push eax
00C9678D 64:8925 0000000>mov dword ptr fs:[0], esp
00C96794 83EC 58 sub esp, 58
以上三行代码复制二进制继续添加文档中 我的是:50 64 89 25 00 00 00 00 83 EC 58
继续F7跟至:00C9679A 53 push ebx 并复制二进制代码添加文档 我的是53
继续F7 至: 00C9679E 56 push esi 并复制二进制代码添加文档 我的是56
继续F7 至:00C967A2 57 push edi ; ntdll.7C930738
00C967A3 8965 E8 mov dword ptr [ebp-18], esp
并复制二进制代码添加文档
OK,整理以上二进制代码得到
55 8B EC 6A FF 68 A0 6C 53 00 68 00 12 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 先把这些二进制代码复制上,下面有用^_^
OK,保存好以上二进制代码.继续F7至
00C96647 51 push ecx 此处按F8
00C96648 57 push edi
00C96649 9C pushfd
00C9664A FC cld
00C9664B BF 8866C900 mov edi, 0C96688
00C96650 B9 5E140000 mov ecx, 145E
00C96655 F3:AA rep stos byte ptr es:[edi]
00C96657 9D popfd
00C96658 5F pop edi
00C96659 59 pop ecx
F8至此处:
004EBE8F FF15 9C525200 call dword ptr [52529C] 跟到这里就不要跟了,,鼠标滑轮向上拉..
004EBE95 33D2 xor edx, edx ; ntdll.KiFastSystemCallRet
004EBE97 8AD4 mov dl, ah
004EBE99 8915 CC5B6700 mov dword ptr [675BCC], edx
004EBE9F 8BC8 mov ecx, eax
004EBEA1 81E1 FF000000 and ecx, 0FF
004EBEA7 890D C85B6700 mov dword ptr [675BC8], ecx
大家看到了吧,这就是真的程序入口
——————————————————————————————
004EBE64 C3 retn
004EBE65 33C0 xor eax, eax
004EBE67 ^ EB F8 jmp short 004EBE61
004EBE69 0000 add byte ptr [eax], al (真正的OEP)从这里
004EBE6B 0000 add byte ptr [eax], al
004EBE6D 0000 add byte ptr [eax], al
004EBE6F 0000 add byte ptr [eax], al
004EBE71 0000 add byte ptr [eax], al
004EBE73 0000 add byte ptr [eax], al
004EBE75 0000 add byte ptr [eax], al
004EBE77 0000 add byte ptr [eax], al
004EBE79 0000 add byte ptr [eax], al
004EBE7B 0000 add byte ptr [eax], al
004EBE7D 0000 add byte ptr [eax], al
004EBE7F 0000 add byte ptr [eax], al
004EBE81 0000 add byte ptr [eax], al
004EBE83 0000 add byte ptr [eax], al
004EBE85 0000 add byte ptr [eax], al
004EBE87 0000 add byte ptr [eax], al
004EBE89 0000 add byte ptr [eax], al
004EBE8B 0000 add byte ptr [eax], al
004EBE8D 0000 add byte ptr [eax], al 至这里 圈上然后点二进制粘贴(刚才不是叫你复制整理好的二进制代码了吗)
004EBE8F FF15 9C525200 call dword ptr [52529C]
004EBE95 33D2 xor edx, edx ; ntdll.KiFastSystemCallRet
004EBE97 8AD4 mov dl, ah
004EBE99 8915 CC5B6700 mov dword ptr [675BCC], edx
004EBE9F 8BC8 mov ecx, eax
看到了吧 看看我的粘贴好的代码:
004EBE64 C3 retn
004EBE65 33C0 xor eax, eax
004EBE67 ^ EB F8 jmp short 004EBE61
004EBE69 55 push ebp <------------左键单击此处,转换为新的EIP
004EBE6A 8BEC mov ebp, esp
004EBE6C 6A FF push -1
004EBE6E 68 A06C5300 push 00536CA0
004EBE73 68 00124F00 push 004F1200
004EBE78 64:A1 00000000 mov eax, dword ptr fs:[0]
004EBE7E 50 push eax
004EBE7F 64:8925 0000000>mov dword ptr fs:[0], esp
004EBE86 83EC 58 sub esp, 58
004EBE89 53 push ebx
004EBE8A 56 push esi
004EBE8B 57 push edi
004EBE8C 8965 E8 mov dword ptr [ebp-18], esp
004EBE8F FF15 9C525200 call dword ptr [52529C]
004EBE95 33D2 xor edx, edx ; ntdll.KiFastSystemCallRet
004EBE97 8AD4 mov dl, ah
004EBE99 8915 CC5B6700 mov dword ptr [675BCC], edx
004EBE9F 8BC8 mov ecx, eax
之后打开工具LoadPE选择外挂程序 选择纠正文件大小 之后点完全脱壳,保存默认文件名dumped就行了 显示脱壳成功,关闭LoadPE
在004EBE69 55 push ebp 处右键选择用olly pump脱壳调试进程
这步要求复制入口点地址后的修正为后的代码就可以了,我的是EBE69 ^-^
打开Import REC工具选择外挂程序 在(需要的IAT栏中)把OEP改为刚刚复制的EBE69代码,之后点自动查找IAT,获取输入表,点显示无效的
之后显示出一些有蓝色地址的代码 右键-->跟踪级别1(反汇编)
现在已经把大多数的地址修改好了,还有一个地址需要用插件修复,继续
单击显示无效的 右键-->插件跟踪-->选择ASProtect 1.22 OK
再点一下显示无效的,呵呵,是不是没有显示错误的地址啊 之后点修复转储文件把之前保存的dumped打开就可以了 OK脱壳完成
用PEID查一查,是不是显示VC++编写的啊.由于是本菜鸟第一次写教程,一定有不如意之处,多多担待..
以上的方法是birdcfly大虾教我的,也是我唯一会手动脱的壳,再一次感谢birdcfly大虾。同样感谢compiler大虾的帮助.
由于小弟才疏学浅,把壳脱了,脱壳后的外挂也没弄明白破解的方法,希望哪位好心的大大帮助我一下,把外挂破掉,小弟感激不尽。
小弟承诺,以后只要我会的,一定会毫无保留地写好教程供大家交流..
另外,小弟想找一位师傅,好好学本事,小弟的QQ是252048984
[课程]Android-CTF解题方法汇总!