首页
社区
课程
招聘
[原创]关于滴水的VT调试器
发表于: 2009-8-19 22:34 350490

[原创]关于滴水的VT调试器

2009-8-19 22:34
350490

关于滴水的VT调试器 by 海风月影

论坛上今天吵的比较火热,主要是关于滴水的VT调试器,很多人不了解这个东西,我对Intel的VT技术略有了解,所以我来简单的介绍一下。

第一,什么是VT技术

VT是Intel的硬件虚拟化技术,说到VT,就不得不提虚拟机(例如VMWare)。在硬件还没有支持VT前,系统级的虚拟机其实是很难做的,要考虑的东西非常多(主要是效率问题,因为用软件模拟东西资源开销比较大)。VT技术主要就是为了解决这个问题而诞生的,有了VT后,可以减少非常多的资源开销,让虚拟机的速度接近于真机速度。

OK,那么VT到底是个什么技术呢?
首先要说一下VMM(Virtual Machine Monitor),这个是虚拟机的监控器,监控着虚拟机的运行。比如虚拟机想执行一条指令:cpuid,这个时候被VMM捕捉到,然后VMM去模拟执行这条指令,然后返回给虚拟机,完成了一次vm exit。因为VMM需要执行ring0的指令,所以VMM需要运行在ring0下。
而VT使得CPU进入了一个全新的特殊模式(VMX模式),在这个模式下,CPU可以处于VMX root状态或者VMX non-root状态。处于VMX non-root操作状态下的CPU行为受到了某些方面的限制,关键的共享资源必须运行于VMX root操作状态的监控器的控制之下,并且,对于VMX non-root状态中的任何CPU特权都有效(只要处于VMX non-root状态,ring0 - ring3 都被监控)。因此,将VMM运行于VMX root操作状态,可以轻松监控管理客户操作系统(就是安装在虚拟机里面的操作系统)和客户应用程序(虚拟机里面操作系统里面安装的软件)。

大家可能被绕晕了,我举个例子简单解释一下上面最后一句话
比如:
一个虚拟机,里面装了winxp系统,系统里面有一个记事本程序
OK,winxp内核肯定要运行于ring0,而记事本肯定要运行于ring3,那么VMM怎么高效得管理这两个特权呢?
比如,POPFD这条指令,可以修改EFLAGS的IF位,即中断允许位,但是,在ring3下,是无法修改的。所以,VMM需要先判断客户机处于哪个特权级别(ring0?ring3?),如果ring0就可以修改,如果ring3就拒绝修改。这样的过程就有开销。而VMX non-root状态对任何CPU特权都支持,因此,VMM可以让客户机完全在真实CPU上执行这条指令,不需要考虑这条指令执行后结果会不会出现问题。

简单的说:VT是为了减少虚拟化技术带来的性能开销而开发的硬件虚拟化技术,尽量消除关键指令和关键共享资源(比如内存的访问)的影响。而全新的VMX模式,可以使CPU运行于一个受监控的VMX non-root状态。

具体的VT技术的实现非常复杂,这里就不说了

第二,VT技术和调试技术
首先简单介绍一下调试技术
SoftICE通过给软件代码写入CC(int 3指令),使软件触发BP异常,CPU会调用INT 3中断,而SoftICE hook了系统的INT 3中断,在第一时刻捕获到了BP异常,引发了中断。
单步的话也是改EFLAGS中的TF位,执行后,CPU会调用INT 1中断,而SoftICE hook了系统的INT 1中断,引发了中断。同理还有DRx的设置,引发硬件断点。

有这些中断,SoftICE在中断后可以捕捉当前CPU状态,显示内存内容,就可以进行调试了。

OD的调试就比SoftICE简单多了,OD使用windows的调试功能,最终还是要用到INT 1 / INT 3中断。

所以说,调试功能中,INT 1 / INT 3中断是很重要的。检查一下INT 1 / INT 3可以检测到SoftICE。直接hook掉,OD / SoftICE都用不了了。

然后是VT,上面已经说了VMX non-root模式在任何特权下都可以被VMM监控,其中包括了异常部分。
比如说,在VMX non-root模式,软件触发BP异常,(在VMCS设置了的情况下),CPU不会去执行INT 3中断,而是引发vm exit,即把控制权交给了VMM,VMM就可以像SoftICE一样处理异常,然后再返回到VMX non-root状态,CPU根据设置执行(如果没有设置,CPU会去执行INT 3中断)。同样INT 1也是这样。

这样的好处显而易见,在触发了BP异常后,CPU的第一时间控制权是在VMM手中,而不是INT 3中断上面。所以可以无视hook或者检测。由此,可以达到调试的目的。

第三,DT调试器的基本原理
DT调试器目前是双机的,Host用的是VSICE,Target是自己的驱动(即VMM),两者进行通信,达到调试的目的。

第四,关于ANTI DEBUG
前面对VMM部分说的还算清晰,因此,目前看来基于VT的调试器可以躲过市面上所有的anti,这点大家不用怀疑了,不用再去叫作者测试什么什么了,没有难度的。

=============================================================================================================================================
上面说的是一些基本的概念,下面说一下我对DT调试器的看法
=============================================================================================================================================

这里说的都是我的个人观点

首先,不可否认,这个东西很新颖,基于的调试原理点非常底层,反ANTI能力非常强大。
但VT技术用到调试器上并不是无敌的,毕竟,开了VMX的机器还是可以用比较猥琐的方法检测的,想灭掉所有猥琐检测方法是要下很大的功夫的,DT调试器 1.1版本我拖到IDA里面简单看了一下,是可以被anti的,1.3不知道有没有修复掉。这里我不公开anti方法,因为公开了,作者就可以修复,而且作者花了大工夫,是可以处理掉的。

但是,作者有些东西没有告诉大家,这里我说一下:
VT技术最早从2004年就公开了,这个技术一直到今天,一直还在研发。为了兼容性,Intel给VT技术加了一个版本号,大家可以参考Intel的手册,对于不同版本的CPU,支持VT的技术多少是不一样的。
我举个例子,VT里面可以监控下面这条指令(也就是说VMX non-root状态执行了这条指令,就会被VMM监控到)

SIDT (这条指令是读取IDT向量地址的,要隐藏IDT HOOK,监控这条指令是非常方便的吧 ^_^ )

但是,不是所有CPU都支持这条指令的监控,这个需要检查一下CPU是否支持这个功能,才能够使用。

这样看来,低版本的CPU即使开了VT,也不一定有一些强大功能,尤其是内存部分的监控功能,强大的内存监控部分需要的VT版本号比较高。

所以说,随着以后DT调试器功能越来越多,你也必须跟着升级CPU,否则,某些功能很可能无法使用。

然后,以个人观点说一下DT调试器的前景
1,会用双机调试的人很少,而且双机中需要有带VT的CPU也是比较少的,所以,双机调试没有单机调试来的普及。
2,买了一个DT调试器,用的却是VSICE的界面,心理爽不爽呢?
3,DT调试器的亮点是反ANTI。哪些东西的ANTI比较强大?ring3的程序,可以说ANTI基本上都被灭了,因此,当前情况下,网络游戏的保护系统就是ANTI最强的东西。所以,DT调试器直接对口的人群是涉及网游的人。

涉及网游的人有这几部分:
1,能对付网游保护系统的,这部分人对付网游保护系统的方法一般都是非公开的,因此,研究出方法可以用很长很长时间。反ANTI这个功能对这部分人来说没有什么太大诱惑
2,对付不了网游保护系统的,这部分人一般都是做外挂的(反外挂的人如果调试自己公司游戏对付不了,可以申请剥离保护系统版本去调试,如果是调试其他公司游戏,可以归到做外挂部分中),而成熟的做外挂的团队,对于各个保护系统都是非常熟悉的,所以这部分人肯定不是专业团队,是散户,散户的特点是技术还不够强大,资金比较少,那么DT这种双机调试器,即使买来了也不一定用得很好,所以就会出现观望,或者由于资金问题不买。

所以,DT调试器可能卖给上面第二部分的人或者第一部分人嫌麻烦了,直接买一套。

上面我说到了VT调试器的反ANTI能力很强大,但是不是无敌的,尤其和CPU型号关系非常大,所以,为了过ANTI买调试器的人会考虑到,做网游保护系统的人也可能研究这部分技术,想办法来anti,那
么自己买的东西未必能100%解决问题,这样就加大了观望态度。

最后,我自己YY一下,VT技术本身不是用来调试的,未来Intel公司有可能加入检测VMX模式的功能?这样VT调试器的反ANTI功能直接就没有意义了。

by 海风月影
2009.08.19


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

收藏
免费 9
支持
分享
最新回复 (295)
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
2
写了那么多东西,希望各位过客能完整看完

另外,上面的很多都是我自己的理解,也许不正确,大家不要笑话


这里不讨论那个300W的调试器,就事论事,我对那个完全不懂
2009-8-19 22:35
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
做板凳膜拜!!!!
2009-8-19 22:50
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
4
软件装完了直接搞个bios shellcode 占坑vm root,你VT慢慢调吧 哈哈
2009-8-19 22:55
0
雪    币: 1233
活跃值: (907)
能力值: ( LV12,RANK:750 )
在线值:
发帖
回帖
粉丝
5
呵呵,不知道300W的硬件调试器是怎么搞的
2009-8-19 23:07
0
雪    币: 546
活跃值: (1672)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
6
看玩了,对VT有了一定的认识,谢谢楼主。
2009-8-19 23:12
0
雪    币: 271
活跃值: (21)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
顶风月
了解学习一下!
2009-8-19 23:41
0
雪    币: 21
活跃值: (44)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
呵呵呵,海风分析的有道理啊。可供大家参考!普及一下VT的概念。
“SIDT (这条指令是读取IDT向量地址的,要隐藏IDT HOOK,监控这条指令是非常方便的吧 ^”这条是AMD一直支持,Intel不支持。当然AMD和Intel还有许多区别。过多的技术细节在这里就不说了。至于不同型号的CPU VT的功能不一样,也是对的。但是随着我们功能的增多,必须升级CPU是没有必要的了。还有对付VT的诸多方法也不必担心。要知道,我们是搞硬件调试器的,有足够的技术储备。VT调试的功能会根据需要逐步添加。至于市场方面的问题,现在说什么都是猜测,就让事实来证明吧。在这里谢谢海风对我们的关注,让大家都能深入的了解一下VT,毕竟技术在进步。。。。。。
2009-8-20 00:10
0
雪    币: 123
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
很长但是还是值得看完了.......顶海风大牛
2009-8-20 01:47
0
雪    币: 451
活跃值: (78)
能力值: ( LV12,RANK:470 )
在线值:
发帖
回帖
粉丝
10
在第一页来膜拜
2009-8-20 08:18
0
雪    币: 251
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
“Undetectable” rootkits
Popek and Goldberg properties for VMM are:
  Efficiency
  Resource control
  Equivalence
Equivalence “implies that any program executing on a virtual machine must behave in a manner identical to the way it would have behaved when running directly on the native hardware”
SVM/VT-x rootkits are only theoretically  ‘undetectable’  because the  equivalence principle is not fully respected in the hardware virtualization extensions
There are computer resources that hypervisor has not full control:
  TLB (partially)
  Branch prediction
  SMP processing
在有必要的情况下,别人肯定会加上对SVM/VT-x的检测
2009-8-20 08:52
0
雪    币: 1098
活跃值: (193)
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
12
看完了,对这东西也有了一定的认识,谢谢楼主。
只是不知道这东西要多少钱呢?
2009-8-20 09:17
0
雪    币: 63
活跃值: (17)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
13
学习+膜拜...
2009-8-20 09:43
0
雪    币: 13097
活跃值: (4097)
能力值: ( LV15,RANK:1673 )
在线值:
发帖
回帖
粉丝
14
学习了....
不过看了你的这文章...忽然想到是否可以写个基于VT 的 StrongOD?
要是有这么个东东...那..........
2009-8-20 12:14
0
雪    币: 1233
活跃值: (907)
能力值: ( LV12,RANK:750 )
在线值:
发帖
回帖
粉丝
15
楼上的头像喜羊羊
2009-8-20 12:28
0
雪    币: 1233
活跃值: (907)
能力值: ( LV12,RANK:750 )
在线值:
发帖
回帖
粉丝
16
楼上的头好像喜羊羊
2009-8-20 12:29
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
17
可以啊。。用VT接管掉int1 int3 ,自己实现windows的调试机制,然后把断点信息发给OD就可以了
2009-8-20 12:34
0
雪    币: 13097
活跃值: (4097)
能力值: ( LV15,RANK:1673 )
在线值:
发帖
回帖
粉丝
18
期待哦...
2009-8-20 12:36
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
19
要写了? 那就期待了
2009-8-20 12:37
0
雪    币: 647
活跃值: (564)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
20
支持vt的本本 都NND贵
2009-8-20 12:56
0
雪    币: 191
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
顶一下,vt不是每个CPU都支持的啊!
尤其是因特的U,多版本,我想VT技术还不是很广泛的实用啊
保持观望态度!!
2009-8-20 13:13
0
雪    币: 21
活跃值: (44)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
对啊,并不难,很容易的事啊!期待海风早点整出来,加油。。。。。。
2009-8-20 13:24
0
雪    币: 21
活跃值: (44)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
AMD3000+以上都支持VT,Intel的大部分都支持VT,期望大家早点换掉P44444444444
2009-8-20 13:26
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
24
intel core 2以上的CPU都支持VT,只是版本号不同而已
目前我所了解的PC机CPU中core i7的版本号最高,是0x0E,支持intel最近宣传的EPT特性,我的笔记本是T9550的CPU,版本号是0x0D,不支持EPT。

我接触的CPU比较少,只能说这么一点区别
2009-8-20 13:45
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
支持VT调试器,现在的游戏动不动就加驱动,搞的我莫名其妙就重启了,把他们统统干掉
2009-8-20 14:54
0
游客
登录 | 注册 方可回帖
返回
//