下载此文档

虚拟机、虚拟环境与代码动态变形技术.doc


文档分类:论文 | 页数:约15页 举报非法文档有奖
1/15
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/15 下载此文档
文档列表 文档介绍
虚拟机、虚拟环境与代码动态变形技术简介虚拟机保护是这两年颇为流行的软件保护技术。这个词源于俄罗斯的著名软件保护软件"VmProtect",以此软件为开端引起了软件保护壳领域的革命。各大软件保护壳开发团队都将虚拟机保护这一新颖的技术加入到自己的产品中。如今针对虚拟机保护领域的文章大多是对"VmProtect"的逆向和分析。没有过多的资料与文章来谈谈它的设计与构建。此篇文章源自我自己的软件保护壳对于虚拟机保护这一部分的解决方案。其中借鉴了一部分"VmProtect"的技术,这方面的主要资料来源于"看雪论坛"以及与朋友们的讨论。其中又加入了我的一些个人对于虚拟机保护的理解。设计中我采取了三种不同的虚拟机来构成一套完整虚拟机保护系统。文中基本描述了我的虚拟机保护所采用的技术与原理,但具体算法与数据结构并不涉及。文中的第二个重要的议点是当今流行的保护技术-乱序与替换。有人也喜欢把替换称为抽取,这里只是觉的替换更加直观。并把这两部分合称为代码混淆,在文章的最后讨论了对于花指令生产器的设计。单纯的乱序与替换是不能够起到迷惑Cracker的作用,唯有与随机生成的花指令联合起来才可以达到延长破解者逆向时间的作用。虚拟机保护的构建整体的设计在我解决方案中设计了三种不同的虚拟机来达到保护的目的。从保护壳大体来讲我构建了一台现实生活中不存在的计算机与它的汇编器和调试器,并用它编写了保护壳的大部分重要代码。第三方虚拟机保护在一些crackme中可以找寻到它的影子,主要是为了保护注册算法不被逆向。在局部方面我定义了两种虚拟机保护,一种是使用x86体系结构衍生出的虚拟机保护。因为x86的编码是可识别的,所以防御的重点就是对于x86编码的转换与加解密。第二种保护是来源与SSCON2008著名程序员刘涛涛的扭曲加密变换和"VmProtect"的一些设计思路。其中一些设计又不同于这两者。保护对象---函数在进行保护之前,首先有一个重要的问题就是保护对象,虚拟机保护并不是壳。在稳定性的前提下很难满足使用虚拟机进行全程序保护又能保持高稳定性。主要影响稳定性的原因是以下三种情况:重定位问题模拟程度的问题各种猥琐编码技巧引起不可预知的错误对于重定位的引起的不稳定,似乎是一个不可修复的硬伤。由于本文讨论的技术都有一个共同的BUG就是重定位。所以对它的讨论,另外有一节专门讲述。对于第二种情况是显而易见的,我们设计的毕竟是虚拟机。在有限的开发周期与资源的情况下并不太可能开发出可以模拟当时完整运行情况的虚拟机,那样的虚拟机并不是用来做虚拟机保护的。例如大名鼎鼎的bochs。内存访问,异常处理,未模拟的指令,都是造成不稳定的因素。最后一种情况是这样的。当一个程序被一个壳保护,或者在编写这个软件的过程中应用了反逆向的编程手段,或者是我们要保护的目标程序是一个已经经过某个壳保护了的程序。这个壳应用了大量非常规的编码手段。还有可能是目标程序使用的编译器生成或者优化的代码比较特殊。最后一种情况也属于壳稳定性讨论范围,毕竟没有一款壳可以号称兼容所有的程序。即便是简单的添加新节后XOR。所以,为了把兼容性减小到最低,我们虚拟机保护的对象定位在函数级别上。这里要注意的是使用虚拟机保护的人必须了解要保护软件的内部构造,知道要保护哪一部分,哪些部分是可以稳定的进行保护。而不是盲目的使用壳随意对任意函数进行保护,这样会造成兼容性降低。当我们确定了我们的保护对象,现在首先面临的问题就是如何找出我们的保护对象。从一个PE文件的代码节中找出特定函数帧并不是非常困难的问题。但要做到100%的识别出所有函数还是比较困难的,这里就涉及了很多问题。先让我们看一个标准的函数框架55pushebp8BECmovebp,esp....任意代码...8BE5movesp,ebp5DpopebpC3retn对于识别这种标准框架的流程很简单。通过反汇编引擎从代码开头开始遍历。先找函数开头的标记后,接下来找函数结尾,找到后与前一个开头标记进行闭合并记录。遇到其余指令则直接略过。依次循环下去。但是事实并非想象的那样美好,优化过后的代码往往不够那么标准,加上编译器的不同对于函数的建立也有所不同。还有就是加入反逆向代码的程序。所以即便是著名的反汇编软件IDA也不能达到完全正确的识别。这里采用的解决方案是,。。x86虚拟机保护为什么要使用x86编码指令x86的编码毕竟是公开的,任何反汇编器或者调试器都可以对它进行分析。我为什么还要使用x86虚拟机作保护呢?原因有三点:开发周期短稳定性高避免的重定位修复基于开发周期和成本的考虑,x86虚拟机保护是所有虚拟机保护中成本开销最小的虚拟机了。基于编码复杂度的考虑,由于本身就是用x86虚拟机所以代码长度并不用进行修改。这

虚拟机、虚拟环境与代码动态变形技术 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数15
  • 收藏数0 收藏
  • 顶次数0
  • 上传人marry201208
  • 文件大小793 KB
  • 时间2019-06-27