• 标 题:虚拟机与调试器的讨论
  • 时 间:2004年2月29日 10:10
  • 链 接:http://bbs.pediy.com

fatfatmouse:因为忙,很久没有在论坛出现了,大家好象都在为了对付一些新的壳、新的加密的阴招忙活,不过我感觉这样的见招拆招可以走的路越来越窄了,可以讨论的的范围也越来越集中在PE这个小范围内。加密与解密是一对矛盾,我感觉解密技术已经很久没有突破了(注意:是突破,不是发展)。有没有高人破过效率源系列呢?确实不好搞,因为它是自引导的系统,但谁又能排除会有越来越多的软件采用这种技术?

所以我觉得要提供全面的解决方案,还是要从虚拟机入手才是。虚拟机几乎可以说是万能的。怎么就没有高手想想办法像改QQ那个对VMware或Virtual PC加个外挂模块,让它变成一个万能的调试器呢?如果成功了,应该可以说是解密技术的又一次突破了。

swift:你的这个想法很不错,相信很多人和我一样,已经完整的实施过了。不过可以很明确的告诉你,VMWare和VPC都不适合作为用于调试目的的硬件模拟器,首先它们从自身的功能出发,为了换取运行效率,在最大程度上把目标机的代码片断截取到本地执行,而这种方式十分不利于“调试”,其次它们都是商业运作的软件,不可能公开源代码来供我们二次开发。

我曾在老论坛的虚拟机论坛上谈到了我对于虚拟机调试器的基本看法。从我尝试的结果来看,纯粹用软件的手段来做硬件整体的模拟,达到硬件级调试的目的,理论上是完全可行的。比如用我们现行的Pentium 4电脑,来模拟一台15年前的APPLE II机,并且做到仿真硬件级的调试,可以很轻松的攻破当时最困难的加密工具Locksmith(虽然这样做的实际意义非常的小)。利用我自己编写的APPLE机模拟器,在不借助任何特定的硬件设备的情况下,仅使用普通的电脑就能做到“时光逆转”(从当前断点任意回溯历史上经历的指令),“任意断点”(执行断点、内存断点、条件断点)等高级的调试功能。当然,APPLE的时代已经过去,我这样做纯粹是为了兴趣研究而已,没有任何实用价值。

对于IA32体系CPU的模拟,用现有的最快的台式机,如果抛弃一切调试功能的话,执行效率还是勉强可以接受的。这方面的例子可以参考BOCHS。值得注意的是BOCHS的代码体系非常差,还有很大的提高执行效率的空间。但是即使是用我自己的优化的模拟器代码,尝试整合我上面所说的一些高级的调试功能的话,运行起来也是如履薄冰,基本上没有什么实用的意义。我归纳了这个方案失败的原因,是因为把所有的监视、记录的任务都交给了宿主机CPU来处理,导致效率严重降低。我们现在台式机的CPU是很强大的,但也不是万能的,一些很简单的任务,比如条件技术,总线地址状态监视,IDE端口模拟等,如果都交给一个CPU来分时进行处理,再强大的CPU也会被拖垮。而这些琐碎的基本环节,正是我们进行硬件级调试的关键所在。所以我认为,在现有的技术条件下,除非出现比IA32体系的CPU(如P4)效能高出100倍,而价格相当的电脑,否则用纯软件的方法对硬件层次进行模拟和仿真调试的方案,是死路一条。但是如果出现了如此高效的新一代CPU,我们再去研究老CPU体制下的调试技术已经毫无前(钱)途了,呵呵,这种做法正如同我用现在的P4去研究15年前的APPLE一样。

所以,想要找到简易的万能方法突破目前各种加密的阴招,我认为采取软硬件结合是唯一可行的方案。

以前这个论坛上还有虚拟机技术一个板块,我认为还是相当不错的,因为我的硬件调试器的很多基本的构想,都是从软件虚拟机得来,只不过是换以硬件来实现相应的功能提高执行效率罢了。研究虚拟机的源代码,对于学习整个电脑系统运行的来龙去脉也十分有意义。现在除了”菜鸟园地“(现名初学者园地)和“脱壳论坛”以外,以前老论坛虚拟机技术等有长远意义的板块不复存在了。也许攻破某个壳,某个加密系统,或者搞定某个阴招,比起我上面说的这些从根源上研究加密解密的方法来说,更实用,更容易被大众接受吧......