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

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

2012-12-24 23:21
17639
今天一朋友的公司拿到和他们同类产品的软件,想参考分析该软件,但该软件有加密狗保护,无狗无法运行,因此叫我分析一下该软件,看是否可以无狗情况下也能运行。折腾了大半天,发现该软件有反调试、虚拟机等保护手段,通过模拟构造狗的数据难以成功,后来想出这种基于虚拟机分支判断的方法,破解成功。这种方法不需要加密狗,也不需要关心数据的加解密算法,也不需要分析虚拟机的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.        总结
这种方法只是对于虚拟机或加密狗的分析的其中一种思路,不一定在所有情况下都适用。对于可变指令长度或更复杂的虚拟机,要配合虚拟机指令的反编译器,结合控制流图和调用流图的分析才能达到结果。

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

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

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