大家好,我是吾爱破解论坛的风吹屁屁凉同学,相信一些老朋友还记得我,去年吾爱视频大赛上我也有参加比赛,而且还得了个奖章
吾爱破解论坛———第二届动画教程大赛 (参赛时间:2010年6月1日-2010年7月15日)
http://www.52pojie.cn/thread-47949-1-1.html
奖品丰厚啊,经不住诱惑,我又来参加了,今天要做的这个教程是一个关于TMD/WL脱壳的.
本板块CM等附件,下载不扣CB,不要钱就可以下载,大家可以来这里下演示程序,我已经发布了
Themida / Winlicense v1.8x - v2.x UnPackMe
http://www.52pojie.cn/thread-50439-1-1.html
此教程演示说明:
Delphi写的程序,加壳只有使用了一个加密选项,就是VM了入口代码,常规的方法是脱壳修复OEP代码才可以运行,特别是Delphi的程序,入口十几行代码,补代码会补死人的,做这个的目的是为了演示另一种未公开的不用修复OEP就可以直接脱壳的方法,做下这个脱壳教程参加动画大赛,听说有奖品拿,哈哈!
很多大牛都跟帖了,有我偶像Hmily还有小生我怕怕同学还有猥琐的ximo妞,强大的当红小生版主已经脱壳了,他使用的方法就是修复OEP原始代码,我记得好像有十来行,太有毅力了,我这个教程的重点就是,不用修复OEP的代码,直接dump修复iat就可以运行,和脱常规压缩壳差不多,不用考虑OEP代码被偷,好了,废话结束,开始正式进入教程
首先,要想调试TMD的程序,你就要能过它的反调试.吾爱上有很多大牛已经给出现成的东西,比如:
如果你的OD被Anti了 By Nooby
http://www.52pojie.cn/thread-31095-1-1.html
吾爱破解专用版ollydbg[2010.5.4更新] by 小生我怕怕
http://www.52pojie.cn/thread-14986-1-1.html
StrongOD.v0.3.4.By.海风月影[CUG][2010.06.13]
http://www.52pojie.cn/thread-37759-1-1.html
这些是调试的前提,这么多大牛给出的好东西,目前可以调试所有的加密壳,包括VMP啊TMD啊ZP啊这些,肯定是没有问题的,先载入OD吧
可以看到,我是加的WL2.1.0.1的最新版,老版本的区段是这样的:
//1
.rsrc //2
.idata //3
.Themida //4
新版是OD里面那种了,其实,他只是在入口前面加了点垃圾而已,这里
005B5000就是.Themida //4
我们可以单步走一下就知道了,这个教程我会做的很慢很详细,很多大牛会觉得太简单可以拉着看,我尽量不用快捷键,使用鼠标点击给大家看.
005B5000 B8 00000000 mov eax,0 ; 这里明显可以看出来是TMD的入口了吧,代码都还原了,前面写错了,没什么太大关系,继续走.
由于我演示的是另外的一种脱壳方法,所以你看教程之前应该有补OEP的脱壳经验才好.
TMD/WL入口点查找方法
1. .text段下内存写入断点,shift+F9,取消内存断点.
2. bp GetProcessHeap+C,F9,取消断点.
3. .text段下F2断点,F9到oep或者oep的第一个call里面的位置.
这里补充下,去OEP的思路,壳先填充数据,然后填充IAT,然后开始模拟OEP代码,这样下去的.
这是我自己总结的经验,我们先到OEP去看看,这里大家熟悉吧,Delphi 第一个call里面的内容,我不说这么来的了,这个以前很多教程说过,可以搜索下,吾爱有很多.我们看下IAT的情况,IAT被变形了,为了节省时间可以直接用UIF修复IAT。我们现在先修复下IAT,然后Dump一份修复IAT保存下来,IAT修复好了,我们来Dump,入口点我们先修复成这个第一个call的地方.好,dump修复完了,下面就开始关键了,我们继续F8走
005A097E 68 0B4A5D0A push 0A5D4A0B ; 2.key
005A0983 ^ E9 AD3EF7FF jmp Themida_.00514835 ; jmp Vm_Start
005A0988 68 694A5D0A push 0A5D4A69 ; 3.key
005A098D ^ E9 A33EF7FF jmp Themida_.00514835 ; jmp Vm_Start
005A0992 68 084B5D0A push 0A5D4B08 ; 4.key
005A0997 ^ E9 993EF7FF jmp Themida_.00514835 ; jmp Vm_Start
005A099C 68 664B5D0A push 0A5D4B66 ; 5.key
005A09A1 ^ E9 8F3EF7FF jmp Themida_.00514835 ; jmp Vm_Start
005A09A6 68 A84B5D0A push 0A5D4BA8 ; 6.key
005A09AB ^ E9 853EF7FF jmp Themida_.00514835 ; jmp Vm_Start
不知道你们有这样注意过,TMD/WL/CV的VM入口就是上面这个样子的,Vm_Start和Vm_Retn包括Vm_Oep都在.idata下面这个区段里。
push key
Jmp Vm_Start 进入虚拟机
00514835 9C pushfd ; Vm_Start 虚拟机入口
00519518 311C24 xor dword ptr ss:[esp],ebx
0051951B 331C24 xor ebx,dword ptr ss:[esp]
0051951E 8B2424 mov esp,dword ptr ss:[esp]
00519521 61 popad
00519522 9D popfd
00519523 C3 retn ;Vm_Retn 虚拟机出口
我们继续走,看会怎么样,这个过程类似找丢失的OEP值,其实不用找,我这只是演示为什么,方便大家理解,由于IAT修复后会导致出错,直接重来下,前面的我直接过了,硬件断点过来
0044DA04 53 push ebx ; 第二个call里面的值
刚有没有注意到,常规的方法是在.text段上下F2断点找代码入口,其实虚拟机的出口就是跳向原始的call里面的值了,也就是从虚拟机出来就进入原始没有加密的代码里.我们只要在出口下好断点就能看到返回地址了,我们看看原始的入口点代码.代码我贴出来:
1.004D7210 > $ 55 push ebp
004D7211 . 8BEC mov ebp,esp
004D7213 . 83C4 F0 add esp,-10
004D7216 . B8 886F4D00 mov eax,UnPackMe.004D6F88
004D721B . E8 18F1F2FF call UnPackMe.00406338
2.004D7220 . A1 B09F4D00 mov eax,dword ptr ds:[4D9FB0]
004D7225 . 8B00 mov eax,dword ptr ds:[eax]
004D7227 . E8 D867F7FF call UnPackMe.0044DA04
3.004D722C . 8B0D A0A04D00 mov ecx,dword ptr ds:[4DA0A0]
004D7232 . A1 B09F4D00 mov eax,dword ptr ds:[4D9FB0]
004D7237 . 8B00 mov eax,dword ptr ds:[eax]
004D7239 . 8B15 B06C4D00 mov edx,dword ptr ds:[4D6CB0]
004D723F . E8 D867F7FF call UnPackMe.0044DA1C
4.004D7244 . A1 B09F4D00 mov eax,dword ptr ds:[4D9FB0]
004D7249 . 8B00 mov eax,dword ptr ds:[eax]
004D724B . E8 4C68F7FF call UnPackMe.0044DA9C
5.004D7250 . E8 27CFF2FF call UnPackMe.0040417C //这里是Delphi的ExitProcess
6.004D7255 . 8D40 00 lea eax,dword ptr ds:[eax]
2.005A097E 68 0B4A5D0A push 0A5D4A0B ; 2.key
005A0983 ^ E9 AD3EF7FF jmp Themida_.00514835 ; jmp Vm_Start
3.005A0988 68 694A5D0A push 0A5D4A69 ; 3.key
005A098D ^ E9 A33EF7FF jmp Themida_.00514835 ; jmp Vm_Start
4.005A0992 68 084B5D0A push 0A5D4B08 ; 4.key
005A0997 ^ E9 993EF7FF jmp Themida_.00514835 ; jmp Vm_Start
5.005A099C 68 664B5D0A push 0A5D4B66 ; 5.key
005A09A1 ^ E9 8F3EF7FF jmp Themida_.00514835 ; jmp Vm_Start
6.005A09A6 68 A84B5D0A push 0A5D4BA8 ; 6.key
005A09AB ^ E9 853EF7FF jmp Themida_.00514835 ; jmp Vm_Start
这是加壳后VM入口的地方,你发现上面规律没?他VM就是模拟了上面对应的部分,我再贴出来对应的是上面:
1.004D7210 > $ 55 push ebp
004D7211 . 8BEC mov ebp,esp
004D7213 . 83C4 F0 add esp,-10
004D7216 . B8 886F4D00 mov eax,UnPackMe.004D6F88
004D721B . E8 18F1F2FF call UnPackMe.00406338
=
1.push xxxxxxxx //这里就是我们所要找的1.key值,这里就是Vm_Oep
jmp Vm_start
2.004D7220 . A1 B09F4D00 mov eax,dword ptr ds:[4D9FB0]
004D7225 . 8B00 mov eax,dword ptr ds:[eax]
004D7227 . E8 D867F7FF call UnPackMe.0044DA04
=
2.005A097E 68 0B4A5D0A push 0A5D4A0B ; 2.key
005A0983 ^ E9 AD3EF7FF jmp Themida_.00514835 ; jmp Vm_Start
3.004D722C . 8B0D A0A04D00 mov ecx,dword ptr ds:[4DA0A0]
004D7232 . A1 B09F4D00 mov eax,dword ptr ds:[4D9FB0]
004D7237 . 8B00 mov eax,dword ptr ds:[eax]
004D7239 . 8B15 B06C4D00 mov edx,dword ptr ds:[4D6CB0]
004D723F . E8 D867F7FF call UnPackMe.0044DA1C
=
3.005A0988 68 694A5D0A push 0A5D4A69 ; 3.key
005A098D ^ E9 A33EF7FF jmp Themida_.00514835 ; jmp Vm_Start
4.004D7244 . A1 B09F4D00 mov eax,dword ptr ds:[4D9FB0]
004D7249 . 8B00 mov eax,dword ptr ds:[eax]
004D724B . E8 4C68F7FF call UnPackMe.0044DA9C
=
4.005A0992 68 084B5D0A push 0A5D4B08 ; 4.key

a572560159
- 粉丝: 6
最新资源
- 汇编与接口第章AD与DA转换器北京交通大学.ppt
- Project-项目管理软件使用.ppt
- 电器与PLC控制技术.ppt
- 信息系统安全集成第二章.ppt
- 电子商务项目运作与管理第2章.ppt
- 北大心理学系心理物理学方法与Matlab实现.ppt
- Matlab求解有约束规划函数.ppt
- 地面气象测报业务软件-参数设置.ppt
- 园林企业信息化管理方案.ppt
- ASPNET4.5动态网站开发实用教程电子教案杨春元第一章.ppt
- 嵌入式系统基础-第章ARM程序设计.ppt
- 电子商务概论--长荣大学资讯管理学系.ppt
- 第9周小课用Matlab实现信号波形.ppt
- 第一章嵌入式系统概述.ppt
- 变电站综合自动化系统设计.ppt
- 软件测试培训三测试用例.ppt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



评论0