首页
论坛
课程
招聘
[原创]TMD/WL 代码修复讲解
2010-9-30 22:36 15239

[原创]TMD/WL 代码修复讲解

2010-9-30 22:36
15239
TMD/WL 的脱壳并不难,难的是 VM JMP(TMD的代码替代、偷取功能) 的修复,通常加壳者会在OEP或者关键位置偷取代码,以保证你即使脱掉了壳也无法让你正常运行,那么我今天要讲的就是如何修复。

修复是一件体力活儿,同时也是考验你对汇编、反汇编能力,在这里我们主要通过观察寄存器、堆栈的状态,其中堆栈就是为了保证CALL in/out的平衡,这样才能让程序走正确。而寄存器就是在VM中运行的每一步的状态,通过寄存器完全可以逆向成汇编语言。

这一节主要来讲讲如何简单的进行指令修复,讲之前我先讲下 CALL 指令,当运行到CALL会PUSH出下一条指令的内存地址,当运行到CALL的RETN指令时,会返回这个地址,然后POP掉,有些花指令就是用了这个原则,修改这个地址可以让EP返回指定地址。好,知道了以后我们进入
正题,如图1看到 当前EIP为 03508334(处于CODE段) 这是一个典型的 VM JMP,而指令下面的都是加密过的代码,直到返回,036643F7(处于VM段),具体可对照图2。当运行到这里时,我们第一步就是要在CODE段设置内存访问断点,执行 F9,当然F9之前可以记录下寄存器和堆栈的状态。

执行以后有2种状态第一种就是进入CODE段领空,处于一个VM所要保护的CALL的位置,直接进入说明CALL之前没有寄存器操作,而观察堆栈主要用于了解是否执行过 PUSH 指令,可以进行执行前后的对比观察,然后做记录。我这里由于是DLL的代码修复,所以要在DLL的代码段进行断点,EXE的修复在401000处,来到CALL以后可以删除断点直接返回(CTRL+F9),或者单步运行到返回,这时又进入VM段领空,如图3所示就是典型的VM代码保护的虚拟指令区,此时依然记录好寄存器和堆栈,在CODE段设置内存访问断点,执行 F9,你如果发现VM没有直接进入CODE领空,而是继续处于VM中,如图4,信息框中提示 DS:[03510280]=03519C50 (SystemMo.03519C50) 然后对照寄存器变化,就可以分析出此时的指令应该为 MOV EAX,DWORD PTR DS:[03510280],然后继续F9执行,依然在VM段信息提示 DS:[03519C50]=00000000 说明 VM执行 MOV EAX, DWORD PTR DS:[EAX]具体是不是EAX 你可以继续执行F9,直到进入CODE段,在此过程中严格记录下寄存器和堆栈变化,确保无误。这就是一个典型的VM JMP的指令修复,这里要着重注意堆栈情况。今天就讲到这了,下一节讲解一下段寄存器(DS SS 数据段和堆栈段寄存器)的操作与修复方法。

图1


图2


图3


图4

《0day安全 软件漏洞分析技术(第二版)》第三次再版印刷预售开始!

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (19)
雪    币: 1
活跃值: 活跃值 (72)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lookzo 活跃值 2010-9-30 22:41
2
0
占位膜拜,看不到图啊?
雪    币: 249
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
lofullen 活跃值 2010-9-30 22:47
3
0
上图了 有了吧
雪    币: 1891
活跃值: 活跃值 (14)
能力值: ( LV13,RANK:420 )
在线值:
发帖
回帖
粉丝
demoscene 活跃值 7 2010-9-30 22:58
4
0
DELPHI程序Themida脱壳之VM-OEP的代码还原
雪    币: 129
活跃值: 活跃值 (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
雪yaojun 活跃值 2010-9-30 23:00
5
0
难道只有苦力这条路可以走吗??
雪    币: 249
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
lofullen 活跃值 2010-9-30 23:01
6
0
OEP 的代码修复跟我所讲的原理类似,但是OEP的代码是知道了是什么语言写的之后有可以让你参照的汇编,依样画葫芦就行。而处于其他位置的代码修复就行不通了,得靠你自己对汇编的熟练程度
雪    币: 249
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
lofullen 活跃值 2010-9-30 23:03
7
0
吃得苦中苦,方得人上人的道理,不然你让TMD怎么生存,VM的优秀就在于不怕你技术好,就怕你吃苦耐劳!
雪    币: 347
活跃值: 活跃值 (11)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
xPLK 活跃值 3 2010-10-1 15:50
8
0
文章可以,头像不错。
雪    币: 321
活跃值: 活跃值 (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
nevsayno 活跃值 2010-10-2 10:00
9
0
正解!。。。。。。
雪    币: 346
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
YwdxY 活跃值 2010-10-2 10:26
10
0
留个脚印

学习 吃苦耐劳
雪    币: 249
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
lofullen 活跃值 2010-10-2 22:48
11
0
什么样的程度能评个精华啊?我想有个0的突破~~~
雪    币: 249
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
lofullen 活跃值 2010-10-2 22:49
12
0
好吧,只能把压箱底的东西拿出来晒晒了
雪    币: 230
活跃值: 活跃值 (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
winnip 活跃值 1 2010-10-3 09:06
13
0
怎么就这么点啊!正看得起劲
雪    币: 564
活跃值: 活跃值 (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lixupeng 活跃值 2010-10-3 11:21
14
0
TMD/WL没脚本?
雪    币: 241
活跃值: 活跃值 (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hmilywen 活跃值 2010-10-8 18:38
15
0
OEP其实不修一样跑的
http://www.52pojie.cn/thread-50936-1-1.html
雪    币: 356
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
stupidass 活跃值 2010-11-5 17:56
16
0
及其期待下一章!
雪    币: 105
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
knightsoft 活跃值 2010-12-23 01:54
17
0
这个文章里修复OEP代码的方法很好,我一般都用这种方法
雪    币: 205
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zxjzwy 活跃值 2010-12-23 09:40
18
0
别的加密壳也可以这样修补代码吗?
雪    币: 214
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lxsky 活跃值 2011-3-25 22:51
19
0
期待下一章~
雪    币: 425
活跃值: 活跃值 (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
CCMts 活跃值 2019-5-28 11:05
20
0
正在愁这部分的解决,感谢大大的分享
游客
登录 | 注册 方可回帖
返回