几年以前,黑客的主要工具还是反汇编器和调试器。而现在,传统的工具集中增加了仿真器,仿真器在实际使用中为代码挖掘者提供了无数的可能性。直到最近,还是只有大公司才能从这些可能性中得利;而现在,这些可能性已经成为每一个研究者习惯利用的性质。那么,什么是仿真器?它能提供什么样的新功能?
每一个操作系统都具有自己的特色,例如,同一个程序在不同的操作系统(在Windows 9x和Windows NT)中的表现可能相当不一样。在这方面提及大量的类UNIX系统和具有相同基因的变体是不明智的。进行网络安全研究的黑客至少必须具备三个操作系统的技能:Windows NT,Linux和FreeBSD;其他的在市场上占有一定份额的操作系统也是有必要具备的。许多的弱点(特别是溢出错误)本身只出现在特定的版本中,其他的版本可能没有这类问题。这样你就不可能用手头有的东西来编写和调试所有的目标。然而,经常重装操作系统是很不方便的,虽然你习惯于这样做。除了浪费大量的时间(而时间总是与我们作对),还存在丢失所有已积累数据的潜在风险!
此外,创建内核转储的溢出错误测试非常容易使文件系统陷入混乱。因为丢失的数据可以被部分或者全部地恢复,你必须能够进行这种操作以获得大量的避免破坏后果的经验。愚钝理论(以及“Norton Disk Destroyer”)没有任何帮助。因此,黑客在动手前经常连接一个额外的硬盘,用以恢复任何可能的损失。
与病毒和试验程序相关的试验必须在与外界隔离的独立计算机中进行。这是因为内置在Windows NT家族和UNIX变体之类的操作系统内的本地访问控制系统非常不完善。由此导致的结果是,研究者的任何微小疏忽经常会导致巨大的破坏。
这些问题的传统解决方法是购买多台计算机或者至少大量的硬盘,这些硬盘被交替地连接到计算机上。第一种方法太昂贵(而且普通的平面上也没有空间放置所有的这些计算机),也毫无美感。第二种方法很不方便。而总是这样移来移去也使得硬盘很难幸免因振动而产生坏块。
幸运的是,这种可怕的事情已成过去。现代处理器的强大能力允许我们完整地仿真整台PC,并以能够接受的速度来实时地执行程序。似乎每天都有新的仿真器出现,迄今为止,我们已经有VMware,Virtual PC,Bochs和DOSBox,还可以列出其他的一些。图3.1显示了其中的一个仿真器。应该选择哪一种呢?大多数涉及仿真器的出版物都是专门为游戏玩家和系统管理员预备的。游戏玩家主要对高的执行速度和高质量的音响感兴趣。对于系统管理员而言,虚拟机之间通信机制的出现是特别重要的。黑客对这些特性很少感兴趣或者根本没有兴趣。对他们而言,是否可以运行SoftIce是头等重要的(也期望有内置调试器)。此外,相对于真实的处理器而言,仿真的主要优点并不是建立在仿真上的。当然,我不会匆忙地下结论。

图3.1 仿真器作为一种测试平台,用于获得恢复损坏的文件系统的技巧
3.1 最低系统要求
大多数仿真器对硬件的要求相当低。例如,为了舒服地与Windows 2000和FreeBSD 4.5一起工作,使用Pentium III 733 MHz处理器(VMware将其仿真为Pentium III 366 MHz,而Virtual PC将其仿真为Pentium III 187 MHz)就足够了。简单地说,它能让你玩Quake I,虽然几乎是处于其能力的极限。
对可用的随机存取内存(RAM)的要求要严格一些。宿主操作系统通常至少需要128MB内存,并分配128MB~256MB给每一个虚拟机(即寄宿操作系统)。当然,要求的内存数量取决于所仿真的操作系统的类型。例如,如果仿真MS-DOS,那么4MB就足够了。而256MB就足以仿真运行在Windows 2000或任何相似的操作系统上的Windows 2000/XP/2003。
硬盘的大小通常并不是特别重要的。虚拟机也并不是用来做数据积累的。在一些少见的异常情形中,除了典型的操作系统安装文件和最低要求的附加应用程序之外,甚至不会安装其他的任何东西,一般不会要求超过1GB的磁盘空间。同时,我所知道的所有仿真器都不要求直接访问物理磁盘。相反,虚拟磁盘映像都存放在一个普通文件中,该文件保留在宿主操作系统中,宿主操作系统也能完全控制它。一般地,至少有两种类型的虚拟磁盘,即固定的和动态的(稀疏的)。当创建一个固定的磁盘时,仿真立即将映像文件分散到所要求的磁盘空间中,即使其中并不包含有用的信息。相反,动态磁盘仅在映像文件中存放那些真实使用的虚拟扇区,当用真实数据填充时,映像文件会依据需要而增大。真是一种有趣的方式,是不是?
不一定非要在虚拟机中将物理磁盘划分为相等的两部分,在理论上也可以给每一个机器都分配全部可用的空间。此外,机器本身还能决定哪一个最具紧迫性。但是事情并非如此简单。动态盘的效率比固定盘的效率要低很多。而且,动态盘还会遭受内部碎片的影响(不要将这种碎片与映像文件的碎片和被仿真的系统文件碎片相混淆)。虽然有的仿真器(特别是VMware)含有内置的消除碎片的工具,但仍然不能解决这个问题。更糟糕的是,动态盘的格式并未标准化,因此不同的仿真器所创建的映像是互相不兼容的。
其他硬件的可用性并不重要,因为它们不会影响仿真器的速度。






