关于滴水的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功能直接就没有意义了。

关于滴水的VT调试器相关推荐

  1. [虚拟机保护] [原创]关于滴水的VT调试器

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

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

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

  3. 处理veh调试器检测_越狱检测抖音逻辑???

    对于应用安全甲方一般会在这三个方面做防御.按逻辑分类的话应该应该分为这几类, 但如果从实现原理的话, 应该分为两类, 用API实现的 和 不用API实现的(这说的不用 API 实现, 不是指换成 in ...

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

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

  5. zend stuido 12.5的插件安装和xdebug调试器的配置和和配置注意

    参考: zend stuido 12.5的插件安装 zend 12.5 安装插件是按类别进行分类了的, 而且是在欢迎 界面就可以直接安装, 安装后,要重启zend才能生效 版式设计的一个基本点就是: ...

  6. Eclipse 调试器(引用IT168)

    Eclipse 调试器:零距离接触实战技巧 2011年11月25日01:29IT168 字号:T|T 调试的方法虽然千千万万,但归根结底,就是找到引发错误的代码.Eclipse调试器的目标是让程序员能 ...

  7. Flash Builder 找不到所需的Adobe Flash Player调试器版本的解决办法

    Flash Builder在Debug时出现的问题:Flash Builder 找不到所需的Adobe Flash Player调试器版本 解决方法: 1. 进入Flash Builder的安装目录 ...

  8. 跨平台PHP调试器设计及使用方法——拾遗

    之前七篇博文讲解了跨平台PHP调试器从立项到实现的整个过程,并讲解了其使用方法.但是它们并不能全部涵盖所有重要内容,所以新开一片博文,用来讲述其中一些杂项.(转载请指明出于breaksoftware的 ...

  9. 跨平台PHP调试器设计及使用方法——使用

    经过之前六篇博文的分析和介绍,大家应该对这套调试器有个初步的认识.本文我将讲解它的使用方法.(转载请指明出于breaksoftware的csdn博客) 上图是该软件界面的布局,我们之后的讲解也将围绕着 ...

最新文章

  1. 如何通俗地理解 Gradle?
  2. 【AI初识境】深度学习模型评估,从图像分类到生成模型
  3. JLOI2015 解题报告
  4. javascript下的arguments,caller,callee,call,apply示例及理解
  5. java让两个线程交替_java两个线程实现: 两个线程交替打印字母和数
  6. js函数内部定义函数的理解
  7. jvisualvm监控远程服务器,Jvisualvm监控远程tomcat
  8. 微信小程序websocket实现即时聊天功能
  9. 网页测试网速软件,网页测网速在线测试(speedtest软件测速原理)
  10. php在线翻译,PHP 在线翻译函数代码
  11. Python数据分析 笔记4(matplotlib库)
  12. 一战托福5个月112分 经验分享 + 备考资料大放送
  13. C++中exchange()函数的使用方法(例题)
  14. Rstudio图片保存方式
  15. CF1132D Stressful Training
  16. img 格式相互转换 url, base64,blob, file
  17. ArcGisJS实现地图常用工具条、距离测量和面积测量(非官方实例)
  18. 删除电脑被占用的串口
  19. ARC 101 E - Ribbons on Tree
  20. 外媒聚焦:孙宇晨任格林纳达驻WTO大使,为WTO注入数字经济动力

热门文章

  1. React Native填坑之旅 -- 回归小插曲
  2. [Python3网络爬虫开发实战] 7-动态渲染页面爬取-4-使用Selenium爬取淘宝商品
  3. vsftpd类似wu-ftpd分类(Class)的配置-给不同网段的人以不同的上传权限-对虚拟用户进行访问IP限制...
  4. Filter的生命周期
  5. Biztalk 在流程中定义将消息保存为文件的文件名
  6. [LeetCode] Maximum Subarray
  7. 心目中的编程高手zz, 有点academic风格的说^_^
  8. 微软聘请游说公司为收购雅虎作势
  9. 死磕 java集合之TreeMap源码分析(一)——红黑树全解析
  10. 【重学Vue】数据响应原理真的是双向绑定吗?