关于滴水的VT调试器

关于滴水的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功能直接就没有意义了。
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果您希望在Unity中实现水龙头滴水的效果,可以考虑使用粒子系统来模拟水滴的效果,具体做法如下: 1. 创建一个空的游戏对象,并将其命名为“水滴”。 2. 在“水滴”游戏对象中创建一个粒子系统组件。 3. 在粒子系统组件中设置粒子的形状为球体,并将半径设置为0。这将使粒子只在一个点上产生。 4. 将粒子系统的发射速率设置为一个较小的值,例如0.1。 5. 将粒子系统的发射角度设置为0,这将使粒子只朝向正上方发射。 6. 将粒子系统的粒子生命周期设置为一个较短的时间,例如0.5秒。 7. 将粒子系统的粒子大小设置为一个较小的值,例如0.05。 8. 将粒子系统的颜色设置为蓝色,以模拟水滴的颜色。 9. 在“水滴”游戏对象中创建一个Animator组件,并创建一个动画剪辑,将粒子系统的发射速率从0逐渐增加到1,然后再逐渐减少到0。在动画剪辑中设置合适的时间曲线,以实现平滑的过渡效果。 10. 将Animator组件的“Apply Root Motion”属性设置为false,以确保动画不会移动“水滴”游戏对象。 11. 在水龙头的位置上创建一个空的游戏对象,并将其命名为“水龙头”。 12. 将“水滴”游戏对象作为“水龙头”的子对象,并将其位置放在水龙头的出水口处。 13. 在“水龙头”游戏对象上创建一个脚本,并在脚本中控制动画的播放,以实现水龙头滴水的效果。 以上是一种实现水龙头滴水效果的方法,您可以根据实际需求进行调整和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值