摘 要 包含有大部分或全部源码信息的软件发行版本的普及,比如易被反编译成源码的Java字节代码,增加了软件被恶意逆向工程攻击的可能。文章介绍了面向对象语言的类分裂混淆方法,同时也给出了混淆技术的定义、分类和评判标准。
关键词 逆向工程;代码混淆;软件保护;类分裂
1 引言
计算机软件的安全一直是软件企业和相关研究领域的关注重点,当前存在的软件保护技术分别有硬件辅助保护、序列号保护、加密保护、服务器认证、防篡改以及代码混淆等。随着JAVA语言、逆向工程的迅速发展和普遍运用以及恶意主机对软件的逆向分析等突出安全问题的不断涌现,使得代码混淆,这一新的保护软件安全的技术正越来越受到人们的重视。2 代码混淆的定义和分类
2.1 代码混淆定义
给定一个程序P、策略T,经过混淆变换后得到程序P' (见图 1)。此过程称之为混淆变换,如果对程序进行一种功能保持的变换,变换后的程序拥有和原始程序相同的功能。更确切的说法应该包含以下两个条件:①如果P出错终止或终止失败,P'不一定终止。②P和P'在正常终止情况下,P'必须产生与P相同的输出。 所不同的是经过转换的P'相较P更难于被静态分析等逆向工程方法攻击,即使被反编译,生成的程序也难以被人阅读和理解。 图1 代码混淆2.2 代码混淆分类
根据混淆对象和对其进行操作的差别,可将代码混淆技术分为布局(layout)混淆、控制(control)混淆、数据(data)混淆、预防(preventive)混淆等几种。 (1)外形混淆。该类混淆主要包括对程序中的变量名、常量名、类名、方法名称等标识符作词法上的变换改名和删除程序中与执行无关的调试信息、注释、源码格式等。 (2)控制混淆。该类混淆的目的是使得攻击者对程序的控制流难以理解。主要包括打乱某段代码本身逻辑关系的聚集混淆(Aggregation Transformation)、把相关语句分散到程序不同位置并实现某项功能的次序混淆(Ordering Transformation)和隐藏真实执行路径的执行混淆(Computation Transformation)等。 (3)数据混淆。数据混淆的对象是程序中的数据域。它可细分为相关数据的储存(Storage)与编码(Encoding)方式的混淆、组合和拆分数据的聚集(Aggregation)混淆、位序重计的次序(Ordering)混淆等。 (4)预防混淆。与前述混淆类型针对恶意用户不同,预防混淆主要利用一些专用反编译器的设计缺陷,以使这些反编译器难以反向还原混淆之后的代码。例如,反编译器 mocha 对于 Return 后面的指令不进行反编译,Hosemocha 就是专门针对此缺陷,故意将代码放在 Return 语句后面,从而使反编译失效。2.3 类分裂
介绍完代码混淆的分类后,接下来我将就面向对象语言中的一种混淆技术:类分裂(class splitting)进行说明。首先对类分裂进行定义:类分裂是将一个初始(原)类用两个或两个以上的类来替换的混淆方法。对类分裂进行叙述前,我们规定以下相关使用术语的意义: P: JAVA程序 Classes(P): P中一般类的集合 Interfaces(P): P中接口类的集合 ct: Class或Interface中的任意类 Methods(ct): ct中的成员函数的集合 Field(ct): ct中的成员变量的集合 注:Methods(ct),Field(ct)不包括从父类继承的成员函数和成员变量,而只包括:①当前定义类中新定义的成员函数和成员变量。②当前定义类所覆盖的其父类的成员函数。依赖(depends)关系的定义: m,n Methods(ct),如果存在m调用n,则(m,n) ∈ depends and m∈Methods(ct), f∈Field(ct),如果存在m使用了f,则(m,f) ∈ depends 为了便于用例的书写,特做说明,图2左列和右列的符号实际上表示同一类。C | Ct |
C1 | Ct,1 |
Ct,1 | Ct,2 |
[8]电大学习网.免费论文网[EB/OL]. /d/file/p/2024/0424/fontbr />
3 代码混淆的评判指标
程序混淆效果通常从强度(potency)、耐受性(resilience)、开销(cost)、隐蔽性(stealth)等 4个方面来评估: (1)强度。指混淆变换后的程序相对原始的程序对恶意用户理解程序造成的困难程度或复杂度。 (2)耐受性。指混淆变换后的程序对使用自动去混淆工具进行攻击的抵抗度。其抵抗度大小与前述标准之一的强度的大小无直接联系,甚至可能出现某些强度很高的混淆变换对自动去混淆工具的抵抗能力却很差的情况。 (3)开销。指经过混淆变换后的程序在执行时由变换所带来的额外的执行时间和所需存储空间的开销。 (4)隐蔽性。耐受性好的混淆变换不容易被自动去混淆工具所去除,但却可能很容易被攻击者的人工分析识破。特别是,如果一种变换所引入的代码和原始程序有较大的差异性,就会轻易地被攻击者识破,因此应尽力使用与原代码相近的语法结构等来加强隐蔽性。4 结语
代码混淆的目的是防止对软件的逆向分析,从而有效保护软件知识产权。它通过改变程序本身,使其转换为极难理解和分析的新程序,最终让恶意攻击者在必须耗费其所不能承受的代价(时间或其它方面)面前,放弃对软件的分析来实现。但代码混淆技术作为一种新的软件保护方法,在理论基础、技术成熟度等方面依旧存在许多不足,这也将是代码混淆技术下一步要解决的问题。参考文献
[1] C. Collberg,C. Thomborson,and D . Low. A Taxonomy of Obfuscating Transformations. Technical Report 148,July 1997[2] C. S. Collberg and C. Thomborson. Watermarking,Tamper-Proofing,and Obfuscation- Tools for Software Protection. IEEE Transaction on Software Engineering,28(8):735-746,Aug,2002[3] H. Chang and M. Atallah. Protecting software code by guards. In Proceeding of the ACM Workshop on Security and Privacy in Digital Rights Managements,pages 160-175,Nov. 2001[4] C. Wang. A Security Architecture for Survivability Mechanisms. PhD thesis,University of Virginia,School of Engineering and Applied Science,October 2000[5] Mikhail Sosonkin,Gleb Naumovich and Nasir Memon. Obfuscation of design intent in object-oriented applications. Department of Computer and Information Science Polytechnic University 2003[6] 罗宏,蒋剑琴,曾庆凯.用于软件保护的代码混淆技术.计算机工程,第32卷第11期,2006.7[7] 宋亚奇.基于代码混淆的软件保护技术研究.硕士论文,西北工业大学,2005.6
[8]电大学习网.免费论文网[EB/OL]. /d/file/p/2024/0424/fontbr />
相关文章:
国家、市场与社会(下)从全球视野和批判角度审视中国传播04-26
国家、市场与社会(上)从全球视野和批判角度审视中国传播04-26
关于国家权力合法性04-26
刑法的意义与国家刑权力的调整——对人权两《公约》的04-26
和谐社会视域中的国家权力与社会权力04-26
审美权力假设与“国家美学”问题04-26
公民权利国家权力对立统一关系论纲04-26
人格魅力、权力制约与法治国家04-26
国家审计对权力的制约与监督探讨04-26
刑事政策的理论预设:国家、权力与公共政策04-26