首页
社区
课程
招聘
[原创]一种基于虚拟机分支判断的加密狗破解方法
发表于: 2012-12-24 23:21 18497

[原创]一种基于虚拟机分支判断的加密狗破解方法

2012-12-24 23:21
18497

今天一朋友的公司拿到和他们同类产品的软件,想参考分析该软件,但该软件有加密狗保护,无狗无法运行,因此叫我分析一下该软件,看是否可以无狗情况下也能运行。折腾了大半天,发现该软件有反调试、虚拟机等保护手段,通过模拟构造狗的数据难以成功,后来想出这种基于虚拟机分支判断的方法,破解成功。这种方法不需要加密狗,也不需要关心数据的加解密算法,也不需要分析虚拟机的handler。
技术思路是,根据记录虚拟机的执行流程,观察虚拟指令的跳转过程。通过观察错误条件下的虚拟指令执行流程,分析跳转处的2个分支功能,并且通过修正虚拟机数据,让其执行正确的分支。通过反复记录与修正,最终找到正确的路径。

现在简单描述一下这种方法,和大家讨论。

1.        初步分析与判断
直接运行该软件,出现提示:

找到打开狗的驱动和读取狗数据的位置比较简单,在此并不重要,在进行一系列的狗数据的加解密计算后,程序会返回到这里:

多次运行验证可以看出,函数00C06D20即是判断有无加密狗并验证数据合法性的函数,并且可以确认,假如有合法的加密狗,该函数应该返回0,但是如果直接将返回值修改为0的话,程序仍然会出现提示,这表示接下去的程序执行会使用到该函数的数据计算结果。

2.        虚拟机结构的基本分析
接下去的程序执行很明显又进入虚拟机循环执行。
虚拟机看上去是标准的循环执行结构,如图:

在此可以看出虚拟机的结构:00BD974C地址保存虚拟机指令IP地址,并且是指令长度固定的虚拟机,即每条指令长度是8字节。

3.        关键问题
由于虚拟机指令长度固定,因此根据记录虚拟机的执行流程,很容易观察到虚拟指令的跳转过程。通过观察无狗条件下的虚拟指令执行流程,能够分析出跳转处的2个分支功能,并且通过修正虚拟机数据,让其执行正确的分支。通过反复记录与修正,最终找到正确的路径。
首先,将00C06D20的返回值修改为0后进行一次虚拟指令的运行记录,如图:

指令记录的结果如下:

可以看出,在虚拟机指令IP==00BD9D58时进行了分支跳转,软件出现了提示,因此可以判断,00BD9D58是一条判断指令,合法的执行应该是继续执行00BD9D60。通过设置条件断点观察,也确实可以证明这一点:

即判断[[00BD9748]]是否为0,如果不为0就进行虚拟指令跳转。
可以用Mdebug脚本来完成这些自动化的执行和修正:
bp 00BE6C87, "ecx==00BD9D58"
g
bc*
[[00BD9748]] = 0

修正以后,继续重复上述步骤,寻找下一个分支判断点,直到软件最终正确运行。(用脚本功能可以很方便地将被调试程序停止在当前操作点)
脚本最后如下:
bc*
g 00BFDE17
eax=0

bp 00BE6C87, "ecx==00BD9D58"
g
bc*
[[00BD9748]] = 0

bp 00BE6C87, "ecx==00BD9E88"
g
bc*
[[00BD9748]] = 0

bp 00BE6C87, "ecx==00BD8360"
g
bc*
[[00BD9748]] = 0

bp 00BE6C87, "ecx==00BD8390"
g
bc*
[[00BD9748]] = 0

bp 00BE6C87, "ecx==00BD9988"
g
bc*
[[00BD9748]] = 0

bp 00BE6C87, "ecx==00BD9a88"
g
bc*
[[00BD9748]] = 0

bp 00BE6C87, "ecx==00BD9AB0"
g
bc*
[[00BD9748]] = 0

最后附上软件运行界面:


4.        总结
这种方法只是对于虚拟机或加密狗的分析的其中一种思路,不一定在所有情况下都适用。对于可变指令长度或更复杂的虚拟机,要配合虚拟机指令的反编译器,结合控制流图和调用流图的分析才能达到结果。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 6
支持
分享
最新回复 (43)
雪    币: 50161
活跃值: (20625)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
accessd平安夜快乐!不出去转转?
2012-12-24 23:42
0
雪    币: 1115
活跃值: (122)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
3
今年教会没有活动,太冷了,只好在家一边听《平安夜》一边乱写点东西
2012-12-24 23:50
0
雪    币: 1149
活跃值: (908)
能力值: ( LV13,RANK:260 )
在线值:
发帖
回帖
粉丝
4
顶..................................................
2012-12-25 00:07
0
雪    币: 1919
活跃值: (901)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
5
学习了再睡
2012-12-25 00:10
0
雪    币: 2700
活跃值: (63)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
顶个 强悍
2012-12-25 00:23
0
雪    币: 190
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
狗狗的没有玩过,路过膜拜大牛啊
2012-12-25 08:36
0
雪    币: 87
活跃值: (205)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
好,支持一下。。
2012-12-25 09:24
0
雪    币: 110
活跃值: (26)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
什么软件?求同功能软件名
2012-12-25 09:37
0
雪    币: 149
活跃值: (191)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
10
学习。。支持一下。
2012-12-25 09:44
0
雪    币: 1015
活跃值: (235)
能力值: ( LV12,RANK:440 )
在线值:
发帖
回帖
粉丝
11
先顶一个,学习学习!
ps:楼主是基督教徒?
2012-12-25 10:02
0
雪    币: 147
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
好帖子。 必须顶。 学习了。!
2012-12-25 10:53
0
雪    币: 1115
活跃值: (122)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
13
不是,只是偶尔受邀参加活动
2012-12-25 11:44
0
雪    币: 27
活跃值: (127)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
14
虚拟机、加密狗
2012-12-25 16:49
0
雪    币: 107
活跃值: (419)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
楼主爆了思路,又有多少外挂要被破解了...嘿嘿..作者们恨你
2012-12-25 17:29
0
雪    币: 1689
活跃值: (379)
能力值: ( LV15,RANK:440 )
在线值:
发帖
回帖
粉丝
16
狗和主程序的交互太简单了。
2012-12-25 18:35
0
雪    币: 192
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
17
山寨虚拟机远不如直接VMP
2012-12-25 20:21
0
雪    币: 1994
活跃值: (1531)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
18
思路不错 的
2012-12-26 08:46
0
雪    币: 327
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
额额   有点看不懂呢  晕晕的
2012-12-26 09:55
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
好贴!顶一下!
2012-12-26 11:38
0
雪    币: 564
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
Wow~ 加密狗、虚拟机、
2012-12-26 12:15
0
雪    币: 319
活跃值: (2459)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
22
狗和PC程序没有数据交换吗?如果有数据交换,这样破解可能会有问题吧?
2012-12-26 14:18
0
雪    币: 413
活跃值: (752)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
23
LZ搞的壳可不是什么山寨壳,而是北京彩虹的圣天狗的狗壳,强度是非常不错的.

分支程序多而乱,佩服LZ的耐心.高.
2012-12-26 16:25
0
雪    币: 217
活跃值: (68)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
24
虚拟机的爆破是这个思路 ~~~
2012-12-26 16:50
0
雪    币: 0
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
强大-------
2012-12-26 17:02
0
游客
登录 | 注册 方可回帖
返回
//