在逆向工程工具的帮助下,程序能被逆向编译成源代码。代码扰乱(Code Ob-fuscation)是一项把原始程序转化为一些不含一致流的代码,来防止逆向工程和篡改攻击的技术。扰乱变换技术应该维持程序的功能性,对代码执行和存储利用只能有适度影响。同时,扰乱变换必须对来自自动逆向工程工具的各种攻击有很强的适应性。扰乱变换的质量会根据它们的潜力(Potency)(可以迷惑读程序的人到什么程度?)、适应性(抵御自动去扰乱攻击怎么样?)、开销(对应用增加了多少开销),被分类和评估。
人们提出了几种扰乱变换(Collberg and Thomborson,2002):布局变换(Lay-out Transformation)、数据变换、控制变换以及预防性变换。布局变换通过去除代码的格式(例如嵌套的条件语句)和用随机字符串替换重要变量的名称,来修改代码的外观。一旦原始格式丢失,就很难恢复。这只在与其他变换联合使用时有效。数据变换改变了程序中用到的数据结构,包括如何改变数据在内存的存储方式、如何解析存储数据、如何把数据聚集和如何排列数据。控制变换是为了操控程序控制流,例如改变语句组织的方式、语句执行的次序以及识别程序里循环结构和块结构。
预防性变换的目的是使去扰乱器(Deobfuscators)更难得到程序代码、使自动去扰乱技术变得更难,以及利用去扰乱器的已知的弱点。(www.xing528.com)
可以在源码级和汇编级实现扰乱。源码级的变换使用更广,但是如果源码级变换设计得不好,编译器里的编码优化器就不能完成扰乱,敌手就会很容易地发现在哪里进行了变换。由于能有效地隐藏二元运算,汇编级的扰乱会更有效地工作。
为了评估扰乱变换的质量,潜力和适应性(Collberg et al.,1997)是评价考虑的两个主要因素。换句话说,扰乱变换的质量由转换代码比原始代码扰乱的程度和转换代码抵御自动去扰乱攻击的程度来衡量。适应性(Resilience)的衡量标准包括程序员创建一个去扰乱器花费的努力以及运行去扰乱器所用的时间和空间。添加到某项应用的扰乱器的安全级别取决于扰乱中变换的精巧、可用的去扰乱算法的力度,以及去扰乱器使用的资源。为了使扰乱达到最好的效果,上面提到的扰乱变换技术可以联合使用。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。