首页
社区
课程
招聘
[原创]VMProtect代码还原技术
发表于: 2010-12-5 01:50 63424

[原创]VMProtect代码还原技术

2010-12-5 01:50
63424

最近逛看雪比较多,发现大家对VMProtect这个壳比较害怕,所以找了个最新的版本分析了一下,发现他有很多垃圾指令,并且还使用了虚拟机保护,而且每个被他加壳后的程序,虚拟机的代码好像还不一样。如果要做VMProtect的自动脱壳机,应该是要先去掉垃圾指令,再重组指令,再自动识别虚拟机指令的含义,最后重组虚拟机代码,还原出加壳前的EXE。
    看了一下VMProtect的垃圾花指令,其实是很有规律的,主要就是在某一条指令前加上多条无效指令,例如下面这条指令:
        mov eax, ebx
VMProtect可能会在这条指令前面加上这些无效指令:
       mov al, cl
       sete eax
因此,根据最后一条指令是很容易识别出前面的垃圾指令的。

折腾了一个下午,写了个花指令去除程序(离自动脱壳还很远,不过如果只是要调试的话应该很容易了)。
基本原理如下:

1.从指定位置或当前eip处开始读取BB块(如果遇到e8,e9跳转就相应的转到目标地址继续读取),生成指令描述表
2.第1次扫描指令描述表识别clc、stc、cmc无效指令
3.第2次扫描指令描述表识别test、cmp无效指令
4.第3次倒着扫描指令描述表,识别赋值、运算等无效指令
5.扫描push、pop指令

看一下运行效果:
取虚拟机指令的代码:

还原后的效果:


再找一个虚拟机指令处理代码:

还原后的效果:


[注意]APP应用上架合规检测服务,协助应用顺利上架!

上传的附件:
  • 1.jpg (112.90kb,3394次下载)
  • 2.jpg (92.22kb,3375次下载)
  • 3.jpg (119.53kb,3377次下载)
  • 4.jpg (75.54kb,3370次下载)
收藏
免费 8
支持
分享
最新回复 (86)
雪    币: 391
活跃值: (135)
能力值: ( LV2,RANK:140 )
在线值:
发帖
回帖
粉丝
2
在手机上看不清楚图,明天再看
2010-12-5 02:03
0
雪    币: 952
活跃值: (1986)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
强大...........55555但是 没下载
2010-12-5 02:32
0
雪    币: 33
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
好生强大的东西
2010-12-5 02:37
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
5
发图不发bin的啊~
2010-12-5 03:33
0
雪    币: 296
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
太给力了。。。
2010-12-5 05:17
0
雪    币: 284
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
写个全自动还原吧
2010-12-5 07:25
0
雪    币: 34
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
发图不发bin,菊花万人进~
2010-12-5 07:38
0
雪    币: 442
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
这。。。暂时还不懂,纯顶
2010-12-5 08:50
0
雪    币: 1333
活跃值: (4402)
能力值: ( LV5,RANK:69 )
在线值:
发帖
回帖
粉丝
10
顶,等还原机
2010-12-5 09:24
0
雪    币: 1432
活跃值: (3142)
能力值: ( LV9,RANK:156 )
在线值:
发帖
回帖
粉丝
11
期待vmp插件。
2010-12-5 09:40
0
雪    币: 249
活跃值: (196)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
神马,太给力了。
2010-12-5 09:50
0
雪    币: 303
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
很强大。。如果说一下 识别 思路 就更给力了。
2010-12-5 09:55
0
雪    币: 347
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
看不清图,马克下
2010-12-5 10:33
0
雪    币: 65
活跃值: (118)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
15
期待楼主的vmp插件~
2010-12-5 10:37
0
雪    币: 375
活跃值: (12)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
16
hoho,这个不错~膜拜一下~
2010-12-5 11:18
0
雪    币: 51
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
特征码提取器,我都是手工提的,难怪不准确
2010-12-5 12:23
0
雪    币: 468
活跃值: (1032)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
18
猛 支持开源
2010-12-5 12:29
0
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
19
这个是代码还原 ???

如果说去花我承认还不错,PATCH 应该把识别指令相连,而 NOP 和拼,那样才有价值
2010-12-5 13:17
0
雪    币: 611
活跃值: (37)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
等楼主的自动还原器。
2010-12-5 13:25
0
雪    币: 325
活跃值: (97)
能力值: ( LV13,RANK:530 )
在线值:
发帖
回帖
粉丝
21
key observations:

1.for each handler,

livein(eax(key1/opcode),ebx(key2),ebp(vmStack),edi(vmContext),esi(vmOpcode)
                               liveout(ebx(key2),ebp(vmStack),edi(vmContext),esi(vmOpcode))

2.all conditional jumps can be reduced, except for one, which is vmStack overflow check.

3.special handlers for decoding/decrypting/unpacking, for performance reasons.

4.not not and.

5.anything else?
2010-12-5 13:35
0
雪    币: 55
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
马克了先~各种学习..
2010-12-5 13:36
0
雪    币: 1115
活跃值: (122)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
23
这个是第一步,昨天晚上太晚了,没有接下去做了
2010-12-5 13:51
0
雪    币: 1115
活跃值: (122)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
24
这是什么?能不能详细些?
2010-12-5 13:54
0
雪    币: 212
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
25
强大,期待完善
2010-12-5 14:07
0
游客
登录 | 注册 方可回帖
返回
// // 统计代码