首页
社区
课程
招聘
[原创]TMD/WL 代码修复讲解
发表于: 2010-9-30 22:36 20891

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

2010-9-30 22:36
20891

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


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

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

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