论文部分内容阅读
伴随着计算机技术的不断发展,开发人员对软件的保护意识也逐渐地增强,为了防止软件中的关键算法被逆向分析,在发布一款软件之前通常都会对其进行加壳处理。同时,恶意代码为了逃避传统的基于特征码扫描的杀毒软件的查杀,也大量的使用加壳技术。一种已知类型的恶意代码可以通过加壳使杀毒软件为其产生大量不同的特征码序列,.使杀毒软件的特征库变得越来越庞大,降低了杀毒软件特征码的查找与匹配速度。在对未知恶意代码的特征码进行提取过程中,也会因为软件壳的存在而使提取到的特征序列不准确。因此,在评价一款杀毒软件的优劣时,是否具有较强的脱壳能力已经成为一项非常重要的指标。首先,本文对现有各种流行的加壳与脱壳技术进行研究,分析它们的实现原理,分析被加壳程序在静态以及运行时的特征,归纳被加壳程序的共同特征。其次,在对现有技术的研究基础之上,论文设计并实现了一个运行在Windows平台上的脱壳系统。该脱壳系统包含了如何实现对被加壳程序的脱壳、被加壳原程序的OEP地址的查找、原程序IAT的定位以及修复以及原程序PE映像的重构等内容。为了达到使宿主系统免受加壳恶意程序的破坏,以及被加壳程序脱壳的效率这两个目标,论文设计了一种构建于宿主系统之上的受控执行环境。加壳恶意代码在其上受控运行时,绝大部分代码都是直接在宿主系统上运行,这保证了脱壳的效率,同时,对于恶意代码产生的具有潜在威胁的系统调用,受控执行环境进行阻断,这保证了宿主系统的安全。本文实现的脱壳系统预期能够处理大多数的已知壳,例如:SimplePack,fsg,UPX,NSPack,NPack,ASPack,JDPack, eXPressor,PEPack,TeLock,也能够对未知壳进行处理。在整个脱壳的过程中,被加壳恶意程序不会威胁到宿主系统的安全,同时,在脱壳效率上也较高。本论文最后对脱壳系统进行了测试,并对测试结果进行分析。