论文部分内容阅读
随着信息技术的深入发展,软件作为智力和知识的结晶,其核心技术的保护显得日益重要。另一方面,层出不穷的恶意代码为延长其生命周期,也不断在寻求可以制造变种以避免被基于特征码扫描的杀毒软件所查杀的方法。软件壳是一种保护第三方软件不被逆向分析而且不影响其运行功能的程序。它完全基于目标程序的二进制码,与被保护的程序的逻辑相分离。因其稳定性强,且具有压缩功能等特性,软件壳在恶意代码免杀领域应用范围非常广。一种恶意代码通过加壳往往可以制造出几十甚至上百个变种,安全厂商发布的报告显示现行恶意代码的加壳率高达95%以上。面对由于加壳而产生的海量变种,除被动地增加病毒库特征码以外,国内外对脱壳方法也展开了研究。现有的脱壳方法往往只能针对某类壳,通用性差,难以收集,而且通常需要大量的人工分析才能得出正确的结果,自动化程度低。一个自动化的通用的脱壳机一方面可以减轻安全分析人员的劳动强度,另一方面也可以部署到用户端系统,以提高恶意代码的查杀率。本文设计了一个基于缓冲代码虚拟机的自动化通用脱壳系统。该课题首先对软件加壳技术做全面的研究和透彻的分析,从中抽象出软件壳的共性,据此提出解决相应问题的原则方法。其次,根据分析恶意代码需要安全执行环境、脱壳提出的可控以及仿真程度高以对抗反调试等特殊需求,引入了一种轻量级的指令级缓冲代码虚拟机。第三,根据所提炼出的脱壳所面临的阻碍,提出相应的解决方案,并讨论了其技术细节。实验表明,该方案独立于目标程序逻辑,对未知脱壳效果良好,不需要人工干预。本文的主要贡献和创新点在于如下工作:1将软件壳的行为抽象成:通过代码混淆变换对抗静态分析;通过PE结构变换对抗动态分析以及反调试三大类,为脱壳方案的设计提供依据;2提出了通用自动化的脱壳方法。该方法基于虚拟机技术控制目标执行,通过编译器入口特征查找规则,跨段跳检测查找规则,堆栈平衡规则及虚拟机扫描等方法来寻找目标在内存中自行解密的状态。相比其他的方法,该方案更具通用性,对未知壳脱壳效果良好;3特别地,首次提出了经定位、读取和重建IAT三个步骤自动重构被更改的PE结构的方法。该方法解决了经脱壳后的目标程序不能正常运行,难以被动态调试的问题。