论文部分内容阅读
反汇编与软件逆向工程技术的不断发展,为面向可执行程序代码的有效分析提供了强大的技术支撑,在较好地解决了二进制代码翻译、程序优化及软件系统安全等方面的疑难问题的同时,也给软件的著作权益保护提出了挑战。面对越来越严重的软件盗版问题,软件开发人员不断提出有效的软件保护方法,在软件盗版造成的经济损失与软件保护带来的成本之间努力做出平衡。代码混淆技术在保证程序语义不变的前提下,通过混淆变换算法将代码结构和控制转移关系转变为难于理解和分析的形式,能够有效阻碍反汇编和逆向工程过程,成为近年来备受关注的软件保护手段。本文以提高软件逆向工程代价,实现软件保护为目标,重点分析与研究了面向可执行程序的代码混淆技术,主要工作包括:一、简要概述了软件逆向工程技术和软件保护的一般方法,包括支持逆向工程的二进制程序分析技术和各类软件保护手段;详细阐述了代码混淆的概念、分类及其混淆变换的有效性评价指标;二、提出了三个面向可执行程序的代码混淆方法。其中,子程序入口与返回地址隐藏方法通过巧妙安排子程序调用与返回指令的目标地址,达到了子程序隐藏的目的;分支跳转指令的混淆变换以程序中的分支跳转指令为目标,通过指令变换达到控制流复杂化的目的;函数粒度的加密混淆变换以子程序代码块为单位进行代码的动态加解密,保证了内存中不出现代码的完全解密时刻,能够有效抵抗基于内存拷贝的攻击;三、详细论述了提出的三个混淆变换方法的原理、技术基础及实现细节,提出了混淆深度的概念并给出了混淆深度的形式化定义,给出了本文的核心方法函数粒度的加密混淆的算法描述;四、设计并实现了一个可执行程序混淆变换框架(Portable Executable obfuscating,简称PEobf),详细阐述了其框架结构,并给出了各模块的功能描述和实现细节;五、给出了PEobf框架的实验实现展示,基于这一框架给出了提出的混淆变换方法的实验结果,并对其有效性和性能做出了分析与评价;