吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 11879|回复: 57
收起左侧

[Windows] 脱壳练习九之CRYPToCRACk's PE Protector

 关闭 [复制链接]
小生我怕怕 发表于 2008-10-9 00:29
00468000 >5Bpop ebx//OD载入0046800181E3 00FFFFFF and ebx,FFFFFF00 //打开内存镜像ait+m0046800766:813B 4D5Acmp word ptr ds:[ebx],5A4D0046800C75 33 jnz short UnPackMe.004680410046800E8BF3mov esi,ebx004680100373 3C add esi,dword ptr ds:[ebx+3C]━━━━━━━━━━━━━━━━━━━━━━━━━━内存映射,项目 24 //在此下f2访问中断 地址=00460000//接着shift+f9运行 大小=00008000 (32768.) 物主=UnPackMe 00400000 区段=.rsrc 包含=resources 类型=Imag 01001002 访问=R 初始访问=RWE━━━━━━━━━━━━━━━━━━━━━━━━━━7C9322DD66:8B50 0Cmov dx,word ptr ds:[eax+C] //程序停在这里7C9322E166:8955 B4mov word ptr ss:[ebp-4C],dx//在次ait+m打开内存镜像7C9322E58D70 10 lea esi,dword ptr ds:[eax+10]7C9322E88975 94 mov dword ptr ss:[ebp-6C],esi7C9322EB8B55 0C mov edx,dword ptr ss:[ebp+C]━━━━━━━━━━━━━━━━━━━━━━━━━━内存映射,项目 22//在此下f2访问中断 地址=00401000//接着shift+f9运行 大小=00051000 (331776.)  物主=UnPackMe 00400000 区段=CODE 包含=code 类型=Imag 01001002 访问=R 初始访问=RWE━━━━━━━━━━━━━━━━━━━━━━━━━━0045159C55push ebp//程序停于我们的OEP此处0045159D8BECmov ebp,esp //现在我们来打开我们的importRCE看看指针0045159F83C4 F0 add esp,-10 //会发现我们的IAT指针没有一个有效004515A2B8 BC134500 mov eax,UnPackMe.004513BC004515A7E8 8846FBFF call UnPackMe.00405C34004515ACA1 E02F4500 mov eax,dword ptr ds:[452FE0]004515B18B00mov eax,dword ptr ds:[eax]━━━━━━━━━━━━━━━━━━━━━━━━━━这里我们可以选择打开原加壳程序选择等级3修复即可寻找回所有的指针,也可以修复到程序运行但是这里我们来讲解下如何去处理这个程序的magic jump,下面我们来寻找一下我们的magic jumpctrl+f2从新加载一下程序,下面大家跟着分析走吧━━━━━━━━━━━━━━━━━━━━━━━━━━00468000 >5Bpop ebx //在一次OD载入程序停在这里0046800181E3 00FFFFFF and ebx,FFFFFF00//ait+m打开内存镜像0046800766:813B 4D5Acmp word ptr ds:[ebx],5A4D0046800C75 33 jnz short UnPackMe.004680410046800E8BF3mov esi,ebx004680100373 3C add esi,dword ptr ds:[ebx+3C]━━━━━━━━━━━━━━━━━━━━━━━━━━内存映射,项目 23 //在此设置f2访问中断 地址=0045A000//接着shift+f9运行程序 大小=00006000 (24576.) 物主=UnPackMe 00400000 区段=.reloc 类型=Imag 01001002 访问=R 初始访问=RWE━━━━━━━━━━━━━━━━━━━━━━━━━━00468232300431xor byte ptr ds:[ecx+esi],al//程序停于此处00468235C1CA 08 ror edx,8 //开始f8单步走0046823881EA 3B1FE120 sub edx,20E11F3B0046823EF7D0not eax0046824003C2add eax,edx0046824203D0add edx,eax00468244^ EB E9 jmp short UnPackMe.0046822F//这个jmp向上跳00468246C3retn //我们在此f4运行到所选0046824761popad0046824883C7 28 add edi,28━━━━━━━━━━━━━━━━━━━━━━━━━━0046824C^\75 97 jnz short UnPackMe.004681E5 //这个JNZ向上我们继续打断他0046824E8BBE C0000000 mov edi,dword ptr ds:[esi+C0] //在此F4运行到所选0046825485FFtest edi,edi0046825674 13 je short UnPackMe.0046826B004682588BC3mov eax,ebx0046825A03C7add eax,edi0046825C8378 08 00cmp dword ptr ds:[eax+8],00046826074 09 je short UnPackMe.0046826B004682628B40 08 mov eax,dword ptr ds:[eax+8]00468265C700 00000000 mov dword ptr ds:[eax],00046826BE8 01000000 call UnPackMe.00468271//这个是远CALL我们F7跟进00468270E8 81042414 call 146A86F6━━━━━━━━━━━━━━━━━━━━━━━━━━00468271810424 14010000 add dword ptr ss:[esp],114 //来到这里,我们继续F8单步跟00468278BE 00504500 mov esi,UnPackMe.004550000046827D53push ebx0046827E56push esi━━━━━━━━━━━━━━━━━━━━━━━━━━004682BEA9 00000080 test eax,80000000004682C375 61 jnz short UnPackMe.00468326004682C5E8 01000000 call UnPackMe.004682CB //此为远CALL,我们F7跟进004682CAB5 81 mov ch,81004682CC04 24 add al,24━━━━━━━━━━━━━━━━━━━━━━━━━━004682CB810424 3C000000 add dword ptr ss:[esp],3C//程序来到这里004682D28D7C03 02 lea edi,dword ptr ds:[ebx+eax+2] //单步F8继续跟004682D6B8 F81EBA69 mov eax,69BA1EF8004682DBBA E1FDE27C mov edx,7CE2FDE1004682E02BC9sub ecx,ecx━━━━━━━━━━━━━━━━━━━━━━━━━━004682F803D0add edx,eax004682FA41inc ecx004682FB^ EB E5 jmp short UnPackMe.004682E2 //这个JMP向上我们在下一句打断004682FDC3retn//在此F4运行到所选004682FE83C4 0C add esp,0C00468301- E9 9692FEFF jmp UnPackMe.0045159C0046830657push edi━━━━━━━━━━━━━━━━━━━━━━━━━━0046830657push edi //单步一下到这里00468307FF3424push dword ptr ss:[esp]//继续开始F8单步跟0046830A55push ebp //此时开始注意寄存器窗口的指针0046830BFF5424 20 call dword ptr ss:[esp+20]━━━━━━━━━━━━━━━━━━━━━━━━━━EAX AB6A284DECX 00000015EDX 869387B1EBX 00400000 ASCII "MZP"ESP 0012FFA8EBP 7C800000 kernel32.7C800000ESI 00455000 UnPackMe.00455000EDI 00455738 ASCII "DeleteCriticalSection"EIP 00468306 UnPackMe.00468306 //此时我们寄存器里的指针都是完整的━━━━━━━━━━━━━━━━━━━━━━━━━━EAX 7C93135A ntdll.RtlDeleteCriticalSection//大家注意寄存器指针的变化ECX 00000000EDX 7C99B178 ntdll.7C99B178EBX 00400000 ASCII "MZP"ESP 0012FFA4 ASCII "8WE"EBP 7C800000 kernel32.7C800000ESI 00455000 UnPackMe.00455000EDI 00455738 ASCII "DeleteCriticalSection"EIP 00468318 UnPackMe.00468318━━━━━━━━━━━━━━━━━━━━━━━━━━0046831F^\EB F3 jmp short UnPackMe.00468314 //此JMP向上,我们在下一句打断0046832183C4 04 add esp,4 //F4运行到此00468324EB 0B jmp short UnPackMe.00468331004683262D 00000080 sub eax,80000000━━━━━━━━━━━━━━━━━━━━━━━━━━EAX 7C93135A ntdll.RtlDeleteCriticalSection //正确指针所在ECX 00000000EDX 0045512C UnPackMe.0045512CEBX 00400000 ASCII "MZP"ESP 0012FFB4EBP 7C800000 kernel32.7C800000ESI 00455000 UnPackMe.00455000EDI 00468384 UnPackMe.00468384EIP 00468338 UnPackMe.00468338━━━━━━━━━━━━━━━━━━━━━━━━━━00468338893C8Amov dword ptr ds:[edx+ecx*4],edi//大家注意这里此时我们的指针是在EAX0046833B807F 05 55cmp byte ptr ds:[edi+5],55//这里开始给 EDI 赋值0046833F73 0C jnb short UnPackMe.0046834D //赋值成功则跳转实现004683412B47 01 sub eax,dword ptr ds:[edi+1]00468344C747 05 8104240>mov dword ptr ds:[edi+5],2404810046834BEB 1E jmp short UnPackMe.0046836B0046834D807F 05 AAcmp byte ptr ds:[edi+5],0AA//此处也同样在给EDI赋值0046835173 0E jnb short UnPackMe.00468361//赋值成功则跳转不实现,即开始加密00468353F7D8neg eax//这里即加密语句,把加密指针补回给EAX004683550347 01 add eax,dword ptr ds:[edi+1] //即把积存器里EAX指针加密00468358C747 05 812C240>mov dword ptr ds:[edi+5],242C81//到下面的就开始没有指针啦━━━━━━━━━━━━━━━━━━━━━━━━━━EAX EEFDD4BF //此时EAX是被加密了的ECX 00000000EDX 0045512C UnPackMe.0045512CEBX 00400000 ASCII "MZP"ESP 0012FFB4EBP 7C800000 kernel32.7C800000ESI 00455000 UnPackMe.00455000EDI 00468384 UnPackMe.00468384EIP 0046835F UnPackMe.0046835F━━━━━━━━━━━━━━━━━━━━━━━━━━那么我们就因上面的判断即可得出结论,这里应该是给EAX赋值而不是给EDI00468338893C8Amov dword ptr ds:[edx+ecx*4],edi//即把此处的mov dword ptr ds:[edx+ecx*4],edi后面的EDI改为EAX0046833B807F 05 55cmp byte ptr ds:[edi+5],55//修改后,我们在次打开内存镜象ait+m0046833F73 0C jnb short UnPackMe.0046834D004683412B47 01 sub eax,dword ptr ds:[edi+1]00468344C747 05 8104240>mov dword ptr ds:[edi+5],2404810046834BEB 1E jmp short UnPackMe.0046836B━━━━━━━━━━━━━━━━━━━━━━━━━━内存映射,项目 24//在此f2设置访问中断 地址=00460000 //shift+f9运行 大小=00008000 (32768.) 物主=UnPackMe 00400000 区段=.rsrc 包含=resources 类型=Imag 01001002 访问=R 初始访问=RWE━━━━━━━━━━━━━━━━━━━━━━━━━━7C9322DD66:8B50 0Cmov dx,word ptr ds:[eax+C] //程序停在此处7C9322E166:8955 B4mov word ptr ss:[ebp-4C],dx//在此ait+m打开内存镜像7C9322E58D70 10 lea esi,dword ptr ds:[eax+10]7C9322E88975 94 mov dword ptr ss:[ebp-6C],esi━━━━━━━━━━━━━━━━━━━━━━━━━━内存映射,项目 18 //在此f2设置访问中断 地址=00401000//shift+f9运行程序 大小=00051000 (331776.) 物主=UnPackMe 00400000 区段=CODE 包含=code 类型=Imag 01001002 访问=R 初始访问=RWE━━━━━━━━━━━━━━━━━━━━━━━━━━0045159C55push ebp//这里就是我们的OEP,直接运行OD插件把程序DUMP0045159D8BECmov ebp,esp //此时会发现程序是可以运行的0045159F83C4 F0 add esp,-10 //在运行我们的importRCE看下我们的指针004515A2B8 BC134500 mov eax,UnPackMe.004513BC //发现有一个无效,剪掉即可,但是我们的程序现在是不用importRCE修复的004515A7E8 8846FBFF call UnPackMe.00405C34//到此脱壳结束004515ACA1 E02F4500 mov eax,dword ptr ds:[452FE0]004515B18B00mov eax,dword ptr ds:[eax]004515B3E8 F8E5FFFF call UnPackMe.0044FBB0004515B8A1 E02F4500 mov eax,dword ptr ds:[452FE0]━━━━━━━━━━━━━━━━━━━━━━━━━━为了方便二进制复制下程序的magic jump如下特征码5A 59 5B 8B 7C 24 04 89 3C 8A简化脱壳流程,即ctrl+b搜索5A 59 5B 8B 7C 24 04 89 3C 8A接着打开内存在rsrc段下段,shift+f9运行,程序停下后在次打开内存进行在code段下段shift+f9运行,即可用OD插件脱壳
http://www.rayfile.com/files/b9c ... -ad05-0014221b798a/

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

fenty7895 发表于 2008-10-9 00:55
很详细的脱文.学习了.
还有隐藏的内容?
tianzhihuan 发表于 2008-10-9 01:11
qq513701092 发表于 2008-10-9 11:00
unpack 发表于 2008-10-9 12:40
o(∩_∩)o...什么动画 挖了看看
zeger 发表于 2008-10-9 13:05
庞大,学习!!!
凑够文字。。。
夜冷风 发表于 2008-10-9 13:12
学习下!! [s:39][s:39][s:39][s:39]
小糊涂虫 发表于 2008-10-9 13:28
学习来了..............
ndrcz 发表于 2008-10-9 13:37
谢谢分享很详细的脱文
傻人有傻福 发表于 2008-10-9 13:38
看看动画了 [s:39][s:39]
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-28 03:57

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表