二进制代码混淆的国内外研究现状
- 格式:pdf
- 大小:199.35 KB
- 文档页数:8
二进制代码相似度检测复现引言在软件开发领域,代码的相似度检测是一项重要的技术,它可以帮助开发人员发现重复的、冗余的或可能存在问题的代码片段。
其中,二进制代码相似度检测是一种常用的技术手段,它可以比较两个二进制文件之间的相似程度,以帮助开发人员进行代码分析、优化和维护。
本文将以二进制代码相似度检测为主题,介绍如何复现这一技术。
一、背景介绍二进制代码是计算机程序的一种形式,它是由计算机硬件直接执行的指令序列。
与源代码相比,二进制代码更加难以阅读和理解,但它在计算机系统中起着至关重要的作用。
因此,对二进制代码的相似度检测具有重要的意义。
二、实现方法要进行二进制代码的相似度检测,需要先将二进制文件转换为可比较的形式。
常用的方法是将二进制文件转换为十六进制字符串或二进制字符串。
接下来,可以使用以下方法进行相似度比较:1. 汉明距离法汉明距离是指两个等长字符串之间对应位置不同字符的个数。
在二进制代码相似度检测中,可以将二进制字符串视为一个位向量,然后计算两个二进制字符串之间的汉明距离。
汉明距离越小,表示两个二进制字符串越相似。
2. 编辑距离法编辑距离是指将一个字符串转换为另一个字符串所需的最少操作次数。
在二进制代码相似度检测中,可以将二进制字符串视为一个字符序列,然后使用动态规划算法计算两个二进制字符串之间的编辑距离。
编辑距离越小,表示两个二进制字符串越相似。
3. 哈希函数法哈希函数是一种将任意长度的输入映射为固定长度输出的函数。
在二进制代码相似度检测中,可以使用哈希函数将二进制字符串映射为一个固定长度的哈希值,然后比较两个二进制字符串的哈希值。
哈希值越接近,表示两个二进制字符串越相似。
三、实验步骤为了复现二进制代码相似度检测,可以按照以下步骤进行实验:1. 收集二进制文件:从不同的软件项目中收集一些二进制文件,确保它们具有一定的差异性。
2. 转换为可比较形式:使用十六进制转换工具将二进制文件转换为十六进制字符串。
恶意代码二进制程序行为分析关键技术研究随着信息时代的来临,互联网已经成为了人们工作和生活中不可缺少的一部分。
但是,在生活因为互联网而变得便捷的同时,也使得人们更加容易遭受到来自于恶意代码的攻击。
特别是在恶意代码的编写、传播以及利用发展成为一个黑色产业链之后,恶意代码的产量越来越大,生产速度也越来越快。
恶意代码对网络安全造成的影响也随之变得越来越大,甚至严重地威胁到了国家的安全。
正是鉴于恶意代码的带来的严重安全威胁,对恶意代码的分析已经成为了所有安全机构和厂商关注的重点。
特别是基于二进制程序行为的恶意代码分析技术已经被广泛的应用在日常分析工作当中,以帮助安全分析人员迅速地对恶意代码进行分析。
从而,可以达到对恶意代码传播扩散的遏制,保护合法用户的利益不受到来自于恶意代码的侵害。
随着近年来恶意代码分析技术研究的不断进步,已经取得了一些重要的研究成果,对恶意代码的传播及其造成的危害起到了有效的遏制作用。
但是,依然还有许多问题依然困扰着研究人员。
对于恶意代码二进制程序行为分析主要存在着以下几个问题:首先,在现有的恶意代码行为分析当中,多数分析方法都是底层都是在汇编代码层面对其行为进行描述。
由于汇编代码复杂且难于理解,使得用其描述的行为很难具有可读性,缺乏针对的行为形式化的抽象描述。
尽管,有些研究者借助编译器中的中间语言对程序行为进行了抽象,但是由于这种中间语言专注于对程序正向编译执行,而缺乏对反编译技术的有效理解,导致很多反编译中存在问题无法被正确描述,从而导致恶意代码行为的抽象描述存在欠缺,不能正确地展示出恶意代码运行的整个流程。
也正是由于缺少对恶意代码分析的形式化中间描述语言,使得很多分析方法都只能够停留在技术说明的层面,不能够向人们完整地展示其分析方法的全部过程。
其次,现有的恶意代码行为分析技术,无论是动态行为分析,还是静态行为分析往往都关注于恶意代码的调用函数层面的监视分析,没有深入到内存和寄存器的变化层面。
基于神经网络的二进制代码安全分析研究二进制代码是计算机程序的底层运行形式,但其难以被人类理解。
而随着计算机领域的发展,各种恶意软件和攻击手段层出不穷,对程序的安全分析显得尤为重要。
近年来,基于神经网络的二进制代码安全分析研究备受关注。
神经网络是由人工神经元之间复杂相互作用而形成的模型,其具有非常强大的模式识别和拟合能力。
基于神经网络的二进制代码安全分析主要是通过机器学习的方法来识别程序的安全性,具有一定的自动化和高效性。
在这个研究领域中,涉及到的主要技术包括程序的静态分析和动态分析。
其中,静态分析是通过对程序进行反汇编或二进制分析,对程序的结构进行解析,提取出程序的特征,进行安全性评估。
而动态分析则是通过对程序进行运行,根据程序的行为来进行安全性评估。
基于神经网络的二进制代码安全分析主要应用于以下几个方面:首先,二进制代码的加密和解密。
在软件开发过程中,为了防止程序被反编译和篡改,开发者通常会对二进制代码进行加密。
基于神经网络的二进制代码安全分析可以帮助破解这种加密,分析加密算法,提高安全性。
其次,二进制代码的漏洞分析和修补。
在软件开发过程中,程序往往存在着漏洞,这些漏洞可能被黑客利用,导致程序崩溃、泄露数据或被入侵。
基于神经网络的二进制代码安全分析可以帮助发现这些漏洞,提出修补方案,提高程序的安全性。
再次,二进制代码的恶意软件检测和分析。
恶意软件是指具有恶意目的的计算机程序,如病毒、木马、蠕虫等。
这些恶意软件可能会给用户带来安全隐患,如窃密、勒索、篡改等。
基于神经网络的二进制代码安全分析可以通过学习恶意软件的行为模式,来进行检测和分析。
最后,二进制代码的逆向工程和保护。
逆向工程是指通过对已有程序进行反汇编和分析,来了解程序的结构和实现原理。
而保护则是指通过各种手段,来保护程序的版权和代码安全性。
基于神经网络的二进制代码安全分析可以帮助进行逆向工程,提出保护方案,提高程序的安全性。
总之,基于神经网络的二进制代码安全分析研究具有非常重要的应用价值。
代码混淆技术研究综述引言随着信息技术的快速发展和普及,软件的开发和使用已经成为现代社会的一个重要组成部分。
随之而来的问题是软件安全性的挑战。
恶意攻击者往往试图通过逆向工程和分析软件源代码来发现其漏洞和弱点,从而实施攻击。
为了应对这一挑战,代码混淆技术应运而生。
代码混淆技术旨在通过改变软件源代码的结构和逻辑,使其难以理解和分析,从而加强软件的安全性。
本文将对代码混淆技术进行综述,并探讨其研究现状和发展趋势。
一、代码混淆技术概述代码混淆技术是一种通过对软件源代码进行转换和重组来隐藏其真实意图和逻辑的手段。
通过代码混淆,可以使软件的逻辑结构变得复杂和难以理解,从而降低攻击者对软件源代码的分析效率,增加攻击者攻击软件的成本和难度。
代码混淆技术通常包括以下几种常见手段:1. 控制流混淆:通过改变软件的控制流程,使得程序的执行路径变得复杂和混乱,增加攻击者理解和分析程序的难度。
代码混淆技术的目标是增加软件系统的复杂性,使得攻击者难以理解和分析软件的内部逻辑和结构,从而提高软件的安全性。
二、代码混淆技术研究现状代码混淆技术是软件安全领域的一个重要研究方向,当前已经取得了一些研究成果。
代码混淆技术的研究现状主要包括以下几个方面:1. 控制流混淆技术研究控制流混淆是代码混淆技术中的一个重要手段,当前已经有许多研究针对控制流混淆进行了深入的探讨。
现有的控制流混淆技术主要包括基础块替换、指令混淆、虚假指令插入等方法。
通过这些技术,可以有效地改变程序的控制流程,使得程序的执行路径变得复杂和难以理解。
2. 数据混淆技术研究数据混淆技术是代码混淆技术的另一重要方面。
目前已经有许多研究着眼于数据混淆技术的研究。
常见的数据混淆技术包括变量重命名、数据加密、数据重排等方法。
通过这些技术,可以有效地隐藏程序中的数据访问关系,增加程序的复杂度。
3. 代码混淆工具研究当前已经有一些代码混淆工具得到了研究和开发,并广泛应用于实际的软件开发中。
代码混淆技术研究综述随着软件开发的发展,越来越多的软件产品面临污点问题和反编译攻击。
这给软件部署和运营过程带来了巨大的安全隐患。
通过代码混淆技术,可以使得代码变得更加难以理解,从而提高软件的安全性和保护知识产权。
代码混淆技术被广泛应用于Java、C/C++、JavaScript、Objective-C等编程语言中,成为提高代码安全性的重要手段。
本文旨在对代码混淆技术进行综述,探讨代码混淆技术的优缺点、常用技术和未来发展趋势。
一、代码混淆技术的优缺点代码混淆技术的优点是可以对代码进行加密和混淆,从而使得反编译和分析难度增加。
采用代码混淆技术可以使得软件更加安全和保护知识产权。
下面列举了代码混淆技术的优点:1. 提高软件安全性:代码混淆技术可以提高软件的安全性,防止黑客攻击和归档分析。
2. 保护知识产权:代码混淆技术可以保护知识产权,防止他人篡改代码、复制代码或者非法使用代码。
3. 防范逆向工程:代码混淆技术可以防范逆向工程,使得代码难以理解、分析和模拟。
4. 提高反软件病毒和恶意攻击的能力:代码混淆技术可以增强反恶意软件病毒和恶意攻击的能力。
代码混淆技术的缺点在于其会增加代码大小和执行时间。
代码混淆技术需要对代码进行加密和混淆,这将增加代码的大小和执行时间。
另外,代码混淆技术对于代码质量的影响也是一个需要考虑的问题,如果代码混淆技术应用不恰当,则可能会对代码质量产生负面影响。
代码混淆技术的常用技术有:标识重写技术、控制流混淆技术、数据流混淆技术和代码隐藏技术等。
1. 标识重写技术:标识重写技术是最基本的混淆技术,其目的是将代码所有元素进行替换,使得反编译者难以识别代码的含义。
标识重写技术主要包括函数名、变量名、结构名、常量名、类型名、枚举类型名以及宏等元素的重写。
2. 控制流混淆技术:控制流混淆技术主要是对程序控制流程进行混淆,使得程序难以分析和理解。
控制流混淆技术包括基本块排列混淆、代码插入混淆、代码拆分混淆、跳转替换混淆以及函数内联混淆等技术。
代码混淆技术研究综述近年来,随着软件领域的迅速发展,软件的安全性也变得越来越重要。
随之而来的是——黑客攻击事件激增。
对于黑客来说,攻击软件的最好方式就是攻击软件中的漏洞,而这些漏洞往往都是由于开发者犯了错误而导致的。
为了解决这个问题,一种被广泛采用的方法是代码混淆。
代码混淆是一种将程序代码进行加密或其他修改的技术,以使黑客难以理解和反编译该代码,从而提高代码的安全性。
本文将对代码混淆技术进行研究综述。
1. 静态混淆和动态混淆代码混淆可以分为静态混淆和动态混淆两种方式。
静态混淆是通过修改程序代码本身来实现,它通常会对代码进行变量重命名、删除无用代码、添加无用代码、修改控制流等操作,以此来使程序代码不容易被反编译和理解。
静态混淆的优点是不需要在程序运行时加载代码,因此对程序的运行速度没有影响,缺点是由于静态混淆是在开发阶段完成的,因此也容易被反混淆。
动态混淆则是指在程序运行时对程序的代码进行修改,一般会对代码进行加密、解密、动态调用等操作。
动态混淆的优点是可以在程序运行过程中动态加密和解密代码,从而使黑客无法在攻击前获取到明文代码,而且也不容易被反混淆,缺点是会对程序的运行速度产生一定的影响。
2. 常见的代码混淆技术(1)变量重命名变量重命名是一种最基本且最常见的代码混淆技术。
它的思路非常简单,就是将程序中的变量名进行重命名,使程序的逻辑结构变得难以理解。
变量重命名不仅使代码难以读懂,也使反汇编代码难以理解,从而增加攻击者从反汇编代码重构程序的复杂度。
(2)控制流混淆控制流混淆是一种使程序控制流程难以理解的技术。
它通过在代码中插入大量无效代码,改变程序控制流程,使程序逻辑变得混乱和不连续。
控制流混淆技术可以使程序难以反汇编、反编译和理解,从而增加攻击者重构程序的难度。
(3)代码替换代码替换是一种通过用一段功能相同的代码替换原有的代码来实现混淆的技术。
在程序执行过程中,可以随机选择一个代码片段替换当前正在执行的代码片段,从而使程序逻辑变得难以理解。
二进制代码混淆的国内外研究现状一.国内外研究现状南开大学贾春福《路径模糊一种有效抵抗符号执行的二进制混淆技术》提出了一种新的基于路径模糊的软件保护方法以抵抗符号执行的逆向分析:利用条件异常代码替换条件跳转指令来隐藏程序的路径分支信息,通过系统的异常处理机制实现程序的跳转,并使用不透明谓词技术引入伪造的路径分支来弥补程序在统计属性上的差异。
电子科技大学吴适《基于二进制代码混淆的软件保护研究》提出一种新的 C2D 转换的混淆算法—基于代码-数据欺骗的混淆算法,该算法的目的是为了在静态分析工具中隐藏目标基本块及到目标基本块的控制流,当反汇编器遇上条件跳转指令时,跳转指令中的目标地址和跳转指令紧接着的地址都会被解释成指令。
令绝对跳转指令(jmp,ret)后面的地址为 A,当使用递归遍历算法时,若没有其他指令跳转到 A,则 A 不会被解释成指令;当使用顺序扫描算法时,A 地址处存在无法被解释的指令,则会跳过对 A 的反汇编。
利用这两点规律,将真正的控制转移隐藏在某条指令的数据部分中,还可以将指令隐藏在代码段的静态数据中。
西北大学王怀军《基于变形的二进制代码混淆技术研究》研究并实现了二进制代码混淆保护原型系统MEPE,MEPE 系统变形部分主要包含3 方面研究内容: 1) 指令等价变形,主要通过设计指令变形的模板函数,利用模板函数对原始指令进行等价变形。
2) 控制流混淆,通过打乱原来指令的物理顺序,利用跳转地址表管理指令执行顺序; 3) 循环体中指令变形的控制,首先分析循环结构对时间开销的影响,然后提出控制循环体中指令变形和控制流混淆的方法。
南开大学王志《二进制代码路径混淆技术研究》提出了一种全新的线性代码混淆策略,该策略将未解数学猜想引入到软件的路径信息中,将基于符号执行和约束求解技术的逆向工程难度等价到证明未解数学猜想的难度。
在代码混淆中只使用线性操作,不使用加密函数。
多项式等价变换、收敛值变换、固定循环次数变换和相似控制流变换是基于未解数学猜想的路径混淆所特有的变换方式,多态和变形技术是常用的代码变换技术,由于基于未解数学猜想的路径混淆有很好的可扩展性,这些代码变换技术可以直接应用到混淆后代码中。
代码混淆技术研究综述代码混淆技术是一种应用于软件安全领域的技术,通过对程序代码进行加密、替换、重组、插入无效代码等方式,增加代码的复杂度与混淆程度,提高程序的安全性。
随着软件复杂度和攻击技术的不断提升,代码混淆技术愈发成为保护程序安全的必要手段。
一、代码混淆技术的概念及目的1.控制流混淆技术控制流混淆技术通过修改程序的控制流程,增加分支逻辑判断、插入无用分支等方式,加强程序的混淆程度,使攻击者难以通过分析代码结构来获取程序逻辑。
常用的技术包括跳转插入、循环转换、枚举转换、函数调用随机化等。
数据流混淆技术通过对程序变量、常量等数据进行加密、变形、替换等操作,增加程序数据流程的复杂度,使攻击者难以获取数据信息。
常用的技术包括变量加密、常量替换、数组拆分、加密字符串、加密方式等。
3.代码结构混淆技术代码混淆技术已被广泛应用于软件安全领域。
在商业软件、游戏、金融、物联网、移动应用等领域,代码混淆技术都被用于保护程序安全。
具体应用包括:1.商业软件保护代码混淆技术可用于保护商业软件的安全,防止破解和盗版。
商业软件通常涉及到重要的商业机密和数据,代码混淆技术可以有效地保护这些信息不被窃取。
2.游戏保护游戏开发者通常使用代码混淆技术,以增加游戏程序的安全性,防止游戏被盗版和修改。
此外,代码混淆技术还可以用于反外挂、防作弊等方面。
3.金融应用保护在金融应用领域,代码混淆技术通常用于增加应用程序的安全性。
防止程序被攻击者窃取重要信息,如银行、证券等金融应用。
4.物联网应用保护在物联网应用领域,代码混淆技术可以用于起到保护设备连接安全的作用。
物联网应用通常涉及到硬件、设备、传感器、数据传输等多个方面,混淆程序代码可以有效地保护物联网应用的安全。
五、总结随着软件攻击技术的对抗,代码混淆技术已成为一种必要的程序安全保护手段。
在程序代码混淆中,控制流混淆、数据流混淆、代码结构混淆等技术被广泛应用,并已成为主流的保护方法。
2015年从法律角度浅观中国计算机游戏软件保护现状10月11日从法律角度浅观中国计算机游戏软件保护现状喻子豪(湖北经济学院,2015)提要:长久以来,盗版计算机游戏软件(后文简称盗版游戏)在中国大陆市场十分的猖獗,这不仅仅影响到了境内外游戏厂商的直接利益,还间接导致了中国计算机游戏软件的衰败。
反观,盗版游戏产业却蒸蒸日上,形成了一个又一个黑色产业链。
本文将从法律角度浅观中国游戏保护现状。
法律から、中国のゲーム保全状況観察Shigou Y u(HBUE,2015 china)要約:長い時間、海賊版コンピュータゲームソフトとは、(以下、海賊版ゲームと呼ぶ)国内外のゲームメーカーの利益に影響を与えるだけでなく、間接的に中国のコンピュータゲームソフトの衰退につながりました。
これとは対照的に、海賊版ゲーム業界はブラックチェーンを形成し、次々に活況を呈しました。
この論文は、法律について、中国のゲーム保全状況の観察を書かている。
Pirated computer game software in the ChineseZihao Y u(HBUE,2015 china)mainland market is very rampant in a long time, which not only affects the direct interests of the domestic and foreign game manufacturers, but also indirectly led to the decline of Chinese computer game software industry. In contrast, the piracy game industry is booming, there is even a black industry chain. This article will talk about the perspective of the protection of China's game industry in the view of laws.第一章导入案例外星电脑公司诉翁正文等计算机游戏软件著作权侵权纠纷案一案由简介1996年6月至1997年10月间,福州外星电脑科技有限公司(简称外星电脑公司)将其开发的《楚汉争霸》、《战国群雄》等十种中文游戏软件(以下简称《楚汉争霸》等十种游戏软件)到国家版权局计算机软件登记管理办公室进行计算机软件著作权登记,经审查后,发给了《计算机软件著作权登记证书》。上述十种游戏软件开始在全国各地发行。自1999年1月起,被告翁正文、叶秀娟以振华公司(是翁正文等人成立的公司,因未注册登一记,该公司实际上并不存在)的名义生产、销售上述游戏软件的盗版卡带,并将这些游戏软件更改了名字,这些盗版游戏卡带通过其雇用的王晓燕向全国各地销售。1999年3月9日,王利军在收到王晓燕发来的振华公司含有《刘邦传一记》等十种涉嫌侵权软件《报价单》的传真后,即与其订货。王晓燕以振华公司的名义分别于3月12日和3月27日将上述游戏卡带发货给王利军,并提供叶秀娟的银行帐号给王利军作汇款之用。1999年3月19日,利军商行(甲方)和环球商行(乙方)订立《协议书》约定,甲方给乙方提供《刘邦传记》等五种游戏卡带各3片,每片50元。3月29日,双方又签订了一份《协议书》约定,甲方给乙方提供《刘邦传记》等十种游戏卡带各50片,每片50元。环球商行在收到利军商行发货的这十种游戏卡带后,即在福州地区进行销售。外星电脑公司在发现上述事实后,认为翁正文等侵犯了其计算机软件著作权,向福建省高级人民法院提起诉讼。二判决及判决要旨一审法院判决要旨:一审法院将从利军商行和环球商行查扣的涉嫌侵权的《刘邦传记》等十种游戏卡带与原告提供的《楚汉争霸》等十种相应的游戏卡带,委托福建省版权局进行对比鉴定。福建省版权局闽权(1999)7号《福建省版权局就省高级人民法院委托鉴定10盒涉嫌侵权游戏卡的复函》的结论是,十一种涉嫌盗版游戏软件除开机时将正版游戏软件的制作单位去掉和将游戏名称更改外,游戏里面的程序设计、美术画面及音乐音效与正版卡带完全一样。一审法院认为原告外星电脑公司开发的游戏软件经国家有关部门审查发给《计算机软件著作权登记证书》,其合法权益应受到保护。翁正文、叶秀娟未经游戏软件著作权人同意,擅自删除、修改、复制外星电脑公司公开发行的《楚汉争霸》等十种游戏软件,将这些游戏软件更名后,制作成游戏卡带,以振华公司的名义由其雇员在全国各地进行销售,严重侵犯了外星电脑公司对这十种游戏软件的署名权、修改权、保护作品完整权、使用权、获得报酬权,依据《计算机软件保护条例》第三十条第(四)、(五)、(六)、(七)项的规定应承担相应的侵权责任。翁正文、叶秀娟实施侵权中主观上有共同故意,应共同承担侵权责任。王晓燕系翁正文、叶秀娟的雇用人员,不应作为侵权主体承担雇主的侵权责任,故外星电脑公司要求王晓燕承担侵权责任的诉讼请求,不予支持。利军商行和环球商行依据《计算机软件保护条例》第三十条第(七)项的规定应承担相应的侵权责任。综上,一审法院判决:(一)被告环球商行、利军商行、翁正文、叶秀娟应立即停止侵犯外星电脑公司《楚汉争霸》等十种游戏软件著作权的行为,销毁翁正文、叶秀娟生产、销售的《刘邦传记》等十种游戏卡带的侵权产品;(二)被告环球商行、利军商行、翁正文、叶秀娟应在全国性报刊上刊登道歉声明,向外星电脑公司公开赔礼道歉(道歉声明内容须经法院审核);(三)被告环球商行应在本判决生效之日起十日内赔偿外星电脑公司经济损失人民币50000元;(四)被告利军商行应在本判决生效之日起十日内赔偿外星电脑公司经济损失人民币50000元;(五)被告翁正文、叶秀娟应在本判决生效之日起十日内共同赔偿外星电脑公司经济损失人民币400000元;(六)驳回原告外星电脑公司其他诉讼请求。二审双方观点:上诉人翁正文不服一审判决,向最高人民法院提起上诉称:(一)关于福建省版权局的鉴定结论。该鉴定结论没有对本案所涉软件的二进制代码组成的指令序列进行对比描述,仅有美术画面、音乐音效及游戏玩法等进入操作程序的对比描述,因此这种对比鉴定不符合《计算机软件保护条例》关于计算机软件著作权保护客体和侵权认定的有关规定,不能作为本案涉嫌侵权软件侵害外星电脑公司软件的有效证据。(二)关于认定上诉人侵权的证据。原审法院认定上诉人侵权的证据除上述鉴定结论外,主要还有涉嫌侵权游戏软件的外包装印刷品、《报价单》、《客户资料》、《发货清单》、“退坏卡单”、“IC烧录记录”和文档资料,上述证据均不能作为认定上诉人侵权的有效证据。因为《报价单》、《客户资料》、《发货清单》、“退坏卡单”、“Ic烧录记录”和文档资料均属于间接证据,且该文档资料与计算机软件文档的意义相去甚远、更不能说明与外星电脑公司软件文档有任何相同之处。被上诉人外星电脑公司答辩称:(一)福建省版权局的鉴定结论足以证明上诉人生产销售的游戏卡带系盗版软件。上诉人在上诉状中对计算机软件作了错误的定义,实质上否定了计算机源程序的存在,其目的在于规避其无法提供其生产销售软件的源程序和目标程序。上诉人不能提供其生产销售游戏卡带中软件的源程序,依法应视为其放弃了抗辩的权利。(二)本案认定上诉人侵权的证据确实充分。从当场查扣的生产游戏卡的“IC烧录记录”和文档资料,含有涉嫌侵权产品的《报价单》、《客户资料》、发货单等证据即可证实,翁正文、叶秀娟不但是盗版软件的销售者,还是生产者。二审法院判决及判决要旨:二审法院认为:上诉人对为何其住处存在上述IC烧录记录及文档资料既无合理的解释,也无其他证据否定这些证据的证明力。而且IC烧录记录形成的时间与其向利军商行销售被控侵权软件的时间基本吻合。因此,在无其他反证的情况下,根据上述证据足以认定上诉人有直接生产(即复制)被控侵权软件的行为。在当事人明确表示不申请对双方软件程序代码进行对比鉴定,亦未提供被控侵权软件的源程序的情况下,二审法院根据游戏软件的特点进行现场勘验,认定双方游戏软件所体现的场景、人物、音响等外观与感受完全相同,结合本案其他证据推定诉争游戏软件程序代码相同,从而认定上诉人构成侵犯诉争软件的著作权。判决驳回上诉,维持原判。第二章由本案分析延伸至中国计算机游戏软件保护现状探讨一、争诉焦点本案中,上诉人诉称福建省版权局的鉴定结论以及涉嫌侵权游戏软件的外包装印刷品、《报价单》、《客户资料》、《发货清单》、“退坏卡单”、“IC烧录记录”和文档资料均不能作为认定上诉人侵权的有效证据。
程序员之家58Java 程序混淆技术的最新研究进展分析◆李祥峰(大连华信计算机技术股份有限公司 116033)摘要:随着混淆技术在软件抵制逆向和重组工程中的应用和普及,信息化技术的发展能够更好的为计算机的运行安全做出保障。
Java 程序混淆技术作为一种特殊形式的编码技术,可以为保护信息技术市场的知识产权做出贡献,文章将对目前Java 程序混淆技术的最新研究进展进行分析,为今后的软件发展做出研究和展望。
关键词:Java;程序混淆技术;研究进展计算机技术的普及为数据时代的软件产业发展提供了机遇和挑战,很多不法分子为了盈利会研发可以盗取和控制目标计算机系统的程序,严重威胁了正常网络公司的营运工作,对正规软件的安全造成很大影响。
一部分软件的攻击者在破解目标软件的备份之后,就可以使用编辑和调试工具对目标软件的二进制程序代码进行修改或是检查,导致原软件的控制机制失效,不仅为盗版软件的滋生奠定了基础,也对网民信息和商业机密造成了威胁。
1 Java 程序混淆技术研发意义Java 程序的平台无关性使其可以在网络上进行广泛的传播和使用,但是也是由于这个特性对自身的知识产权机制产生了分歧。
Java 程序的语言为了实现平台无关性使用了经典的class 字节文件形式,经过了简单的预编译之后就可以让Java 的源代码转化为字节码,在虚拟机上进行解释和执行。
由于Java 系统的字节码设计过于简单,因此在形成class 字节文件形式之后很容易被攻击者反编译成Java 程序的源代码,从而让使用Java 程序的软件受到攻击。
目前市场上能够实现Java 反编译的程序工具有很多,如jad、mocha 等都可以使用自身的反编译程序对Java 字节的软件进行反编译,因此防止Java 字节码文件的反编译技术工具的研发是目前信息技术领域的发展方向之一。
2 混淆技术基本原理和分类情况混淆技术是一种特殊形式的编码技术,被国际上用于保护软件知识产权领域,目前市面上指代的混淆技术是指对于拟定发布的程序进行语义或是字节上的混淆置换,让混淆置换后的程序和原本的程序有着功能上的相似,但是很难被逆向反编译的工具所攻击。
二进制代码混淆的国内外研究现状1.国内外研究现状南开大学 贾春福 《路径模糊一种有效抵抗符号执行的二进制混淆技术》提出了一种新的基于路径模糊的软件保护方法以抵抗符号执行的逆向分析:利用条件异常代码替换条件跳转指令来隐藏程序的路径分支信息,通过系统的异常处理机制实现程序的跳转,并使用不透明谓词技术引入伪造的路径分支来弥补程序在统计属性上的差异。
电子科技大学 吴适 《基于二进制代码混淆的软件保护研究》提出一种新的 C2D 转换的混淆算法—基于代码-数据欺骗的混淆算法,该算法的目的是为了在静态分析工具中隐藏目标基本块及到目标基本块的控制流,当反汇编器遇上条件跳转指令时,跳转指令中的目标地址和跳转指令紧接着的地址都会被解释成指令。
令绝对跳转指令(jmp,ret)后面的地址为 A,当使用递归遍历算法时,若没有其他指令跳转到 A,则 A 不会被解释成指令;当使用顺序扫描算法时,A 地址处存在无法被解释的指令,则会跳过对 A 的反汇编。
利用这两点规律,将真正的控制转移隐藏在某条指令的数据部分中,还可以将指令隐藏在代码段的静态数据中。
西北大学王怀军《基于变形的二进制代码混淆技术研究》研究并实现了二进制代码混淆保护原型系统MEPE,MEPE 系统变形部分主要包含3 方面研究内容: 1) 指令等价变形,主要通过设计指令变形的模板函数,利用模板函数对原始指令进行等价变形。
2) 控制流混淆,通过打乱原来指令的物理顺序,利用跳转地址表管理指令执行顺序; 3) 循环体中指令变形的控制,首先分析循环结构对时间开销的影响,然后提出控制循环体中指令变形和控制流混淆的方法。
南开大学 王志 《二进制代码路径混淆技术研究》提出了一种全新的线性代码混淆策略,该策略将未解数学猜想引入到软件的路径信息中,将基于符号执行和约束求解技术的逆向工程难度等价到证明未解数学猜想的难度。
在代码混淆中只使用线性操作,不使用加密函数。
多项式等价变换、收敛值变换、固定循环次数变换和相似控制流变换是基于未解数学猜想的路径混淆所特有的变换方式,多态和变形技术是常用的代码变换技术,由于基于未解数学猜想的路径混淆有很好的可扩展性,这些代码变换技术可以直接应用到混淆后代码中。
Collberg 《A Taxonomy of Obfuscation Transformations.Department of Computer Science》第一次针对JAVA 程序提出了代码混淆。
Collberg 在其技术报告中提出了混淆转换的定义、混淆算法的详细分类及其有效性评估方法,该报告中根据其分类描述了混淆转换的一般性算法,这些算法能够应用于大部分流行的高级程序语言的代码混淆。
根据 Collberg 的分类,混淆转换可以分为词法结构混淆又称布局混淆、控制流混淆、数据混淆以及针对特定反混淆器的预防性混淆。
Cohen 《Operating System Protection through Program Evolution》论述了将代码混淆作为一种技术用于增加软件代码的多样性,其使用了重排指令顺序,增加或者删除跳转指令和反内联函数等方法,在不改变代码语义的情况下对软件的指令或指令序列进行替换,利用软件代码的多样性增加攻击者对软件进行逆向分析和篡改的难度。
C Wang《A security architecture for survivability mechanisms:[dissertation]》针对静态逆向反编译技术提出了基于控制流退化(degeneration of control flow)的高级语言代码混淆策略,通过间接跳转对控制流重新整合,并在数据流中引入指针别名操作,有效地提高了软件代码的复杂度,并降低了静态逆向反编译的精度。
Linn C 《Obfuscation of executable code to improve resistance to staticDisassembly》等人针对静态反汇编技术提出了一种二进制代码混淆方案。
反汇编技术是将二进制机器代码转换成汇编指令,是逆向分析和推理的基础,常用的反汇编算法有线性扫描算法(linear sweep algorithm)和递归遍历算法(recursivetraversal algorithm)。
针对线性扫描算法难以区分代码和数据的问题,Linn 等人提出了分支反转(branch flipping)技术,在条件跳转指令之后加入垃圾数据以阻止线性扫描算法的分析。
针对递归遍历算法以控制流为基础进行反汇编的特点,Linn 等人提出了分支函数(branch functions)技术,将控制流中显而易见的直接跳转指令和函数调用指令隐藏在分支函数中,并引入不透明谓词(opaquepredicates)和跳转表欺骗(jump table spoofing)技术误导反汇编的递归遍历算法。
Wang 和 Linn 等人的混淆策略都利用了静态逆向分析难以处理指针别名的问题,将控制流的静态逆向分析由线性复杂度变成 NP 完全问题。
Kanzaki《Exploiting Self-Modification Mechanism for Program Protection》利用二进制代码自修改机制(self-modifying mechanism)对软件中的重要代码进行伪装。
首先,用不可执行的垃圾指令对软件原始的二进制指令进行伪装;然后,在软件执行中利用二进制代码的自修改机制动态地生成原始指令并替换伪装代码;最后,将已经执行过的原始指令再次使用垃圾指令进行覆盖。
Birrer 利用程序碎片技术和跳转表使混淆后的软件二进制代码具有变形能力。
Kanzaki 和 Birrer 等人提出的两种代码混淆策略隐藏了软件代码或控制流,使其在执行过程中才动态的展现出来,其混淆的对象是静态反汇编和反编译技术。
多样性是生物系统健壮的重要保证。
当前软件系统大部分是同构系统,缺乏多样性。
Forrest 《Building Diverse Computer Systems. Proceedings of the6th Workshop on Hot Topics in Operating Systems》提出了利用混淆堆栈数据的方式增加软件代码的多样性,在保持软件的用户体验、功能性和效率的基础上,提高了软件的抗攻击能力。
Bhatkar 《Address Obfuscation: an Efcient Approach to Combat aBroad Range of Memory Error Exploits》提出了地址混淆的策略,在Forrest 等人的工作基础上对软件中的代码和数据地址进行混淆变换,进一步提升了软件代码的健壮性。
2007 年,Popov 《Binary obfuscation using signals. Proceedings of theUSENIX Security Symposium》提出了一种基于Linux信号机制的二进制代码混淆技术:使用各种产生异常信号的代码替换程序中的 jmp、ret 和 call 等跳转指令来混淆程序的执行过程。
二进制代码中读写内存、算术运算和调用系统函数等操作,都有可能产生系统异常信号,因此,静态逆向分析工具很难准确判定在执行过程中二进制代码是否会产生异常信号。
但是,该技术无法对二进制代码的路径分支进行混淆,因此,它不能缓解软件执行过程中的信息泄露问题。
2008 年,Sharif 《Impeding malware analysis using conditional codeObfuscation》等人提出了一种基于哈希函数代码混淆策略,用哈希值替换路径分支条件中的常量,利用哈希函数的单向性增加逆向工程的难度,但是,哈希函数不具有保序性,即无法保证当 x > y 时,Hash(x) > Hash(y)成立。
因此,该混淆策略具有局限性,只能保护等于关系的路径分支条件。
2011 年,Falcarin 《Exploiting Code Mobility for Dynamic BinaryObfuscation》等人将软件核心代码放到网络上的一个可信实体中,该实体在攻击者的控制之外,利用代码的流动性使软件在执行过程中动态获得这些代码,减少攻击者对软件整个二进制代码的能见度,从而限制攻击者的知识并阻止其逆向工程。
2011 年,Ceccato 《Remote Software Protection Using Orthogonal Replacement》 等人提出了基于正交替换(orthogonal replacement)的客户端混淆策略,通过设置客户端代码的有效期,软件客户端在运行过程中与远程可信服务器进行频繁的代码替换,使软件代码不断的更新,增加攻击者进行逆向工程的难度。
Falcarin 和Ceccato 提出的混淆策略都是基于网络交互的,在不可信主机上运行的软件代码都是不完整的,软件的执行过程需要由远程可信服务器决定,而且每次执行的代码都是定制的,这样迫使攻击者不断面对软件的变化,增加逆向工程的复杂度。
而且,本地代码的不完整性也干扰了攻击者对软件行为的静态预测能力。
但是,由于网络带宽和延迟的限制,应用程序与可信的远程服务器的频繁交互过程将致使软件的运行效率远远低于本地执行,因此大部分软件还是以二进制本地代码形式发布,服务器端运行保护(protection byserver-side execution)并非对所有应用程序都适用。
二.代码混淆技术的分类Collberg 等人根据各种代码混淆技术变换对象的不同将混淆分为四类:布局混淆、数据混淆、控制混淆和预防混淆。
1. 布局混淆布局混淆(layout obfuscation)是指删除或者混淆软件源代码或者中间代码中与执行无关的辅助文本信息,增加攻击者阅读和理解代码的难度。
软件源代码中的注释文本、调试信息可以直接删除,用不到的方法和类等代码或数据结构也可以删除,这样即可以使攻击者难以理解代码的语义,也可以减小软件体积,提高软件装载和执行的效率。
软件代码中的常量名、变量名、类名和方法名等标识符的命名规则和字面意义有利于攻击者对代码的理解,布局混淆通过混淆这些标识符增加攻击者对软件代码理解的难度。
标识符混淆的方法有多种,例如哈希函数命名、标识符交换和重载归纳等。
哈希函数命名是简单地将原来标识符的字符串替换成该字符串的哈希值,这样标识符的字符串就与软件代码不相关了;标识符交换是指先收集软件代码中所有的标识符字符串,然后再随机地分配给不同的标识符,该方法不易被攻击者察觉;重载归纳是指利用高级编程语言命名规则中的一些特点,例如在不同的命名空间中变量名可以相同,使软件中不同的标识符尽量使用相同的字符串,增加攻击者对软件源代码的理解难度。