关于滴水的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

[虚拟机保护] [原创]关于滴水的VT调试器相关推荐

  1. 关于滴水的VT调试器

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

  2. vb计算机怎么制作,教你如何制作VB的PCode调试器 -电脑资料

    P-Code简介 术语P-Code既不是一个新名词也不是Microsoft的发明,P-Code只是简单地被解释执行的伪指令, MSVBVM50.DLL MSVBVM60.DLL 文件名称清晰的表明是M ...

  3. eac 反调试_自己动手制作一个过保护调试器

    一.起因 本人是新手第一次接触驱动开发的小白,事情是这样的,一个星期前突发奇想想做一个调试器保护程序用于调试游戏,既然要调试驱动保护的程序,自然也要深入驱动底层.做调试器必须要hook api去隐藏调 ...

  4. 开源项目-基于Intel VT技术的Linux内核调试器

    本开源项目将硬件虚拟化技术应用在内核调试器上,使内核调试器成为VMM,将操作系统置于虚拟机中运行,即操作系统成为GuestOS,以这样的一种形式进行调试,最主要的好处就是调试器对操作系统完全透明.如下 ...

  5. eac 反调试_一种可能被用于EAC保护的检测调试器方案

    测试环境: Windows7 x64 虚拟机 win10 1809 x64 虚拟机 0x0 起因 小伙伴 @DBDig 最近也在玩APEX这个游戏,因为这个游戏有EAC保护所以有反调试,遂准备安排它. ...

  6. 【分享】VMProtect使用技巧汇集__最好的虚拟机保护软件之一

    2019独角兽企业重金招聘Python工程师标准>>> VMProtect是目前最强大的虚拟机保护软件之一,适合Visual Basic(native),Visual C,Delph ...

  7. VMProtect使用技巧汇集__最好的虚拟机保护软件之一

    VMProtect   官方站点: http://www.vmprotect.ru 作 者:PolyTech (俄国)   VMProtect是目前最强大的虚拟机保护软件之一,适合Visual Bas ...

  8. 第零课、开启ce自身保护、设置od,让调试不非法

    第零课.开启ce自身保护.设置od,让调试不非法<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:of ...

  9. 日均保护原创超6万篇,腾讯“至信链”助企鹅号作者一键维权

    区块链技术正在内容原创保护领域发挥关键作用.据腾讯内容开放平台最新发布的企鹅号版权保护年度报告显示,基于腾讯云区块链技术的"至信链"在过去一年有效保护原创作品超过1000万篇,由& ...

最新文章

  1. 进程通信之二 管道技术第二篇 匿名管道
  2. 【译】Android中的安全数据— Android中的加密(第1部分)
  3. 记一次继承了AbstractAuthenticationProcessingFilter 的过滤器被执行了两次问题
  4. 面试官:. NET5源码里用到了哪些设计模式?懵!
  5. python是用来初始化_python的初始化运行了哪些?
  6. git rebase 工作流
  7. Spring Boot开发八字箴言(以我过去这段时间的经验总结得到)
  8. 书单丨把握Java技术发展的新趋势!
  9. 20140608 科技脉搏 -下半身需求是人类共同需求,有多少人就有多大市场
  10. 手机短信注册页面h5css3+html5模板
  11. Windows-QT安装后,又要安装mingw32/64怎么办?
  12. uniapp点击复制文本
  13. 项目启动正常,访问出现404
  14. ir2110驱动占空比不能太高
  15. 哈工大遗传学B期末复习
  16. 【Windows11+Ubuntu20.04】双系统安装及美化、优化记录
  17. 【软件测试必备技能】Linux
  18. concurrent.futures模块使用
  19. netstat 的各个 state 什么意思
  20. 库房计算机管理,库房管理

热门文章

  1. 回顾2020,喜悲交叉
  2. [风控] 评分卡分箱WOE,IV出现正无穷、负无穷解决方法
  3. 博客介绍——warrent(博文末尾有彩蛋)
  4. GEE:两种遥感影像的中值合成方法
  5. Sqlserver CPU使用率超高占到100% 使用跟踪查看问题sql语句
  6. 介绍一款Excel数据收集软件,简单好用
  7. CUDA安装问题解决
  8. 思科系统公司(Cisco Systems, Inc.)
  9. scrapy分布式碰到的一些问题和解决方案
  10. 再论互联网公司盖楼那些事-西毒微软