一种基于二次汇编的代码混淆方法技术

技术编号:22056053 阅读:44 留言:0更新日期:2019-09-07 15:32
本发明专利技术提出一种基于二次汇编的代码混淆方法,属于软件保护技术领域,本方法包括以下步骤:对二进制文件进行合法性检验,检查其是否为格式规范的二进制文件;对格式规范的二进制文件进行预处理,找出有关跳转指令和适合插入垃圾指令块的地址信息;对二进制文件进行二次汇编,将文件中的汇编指令替换成等效的指令序列,并在文件中插入垃圾指令进行控制流混淆,生成混淆的汇编文件,再编译成混淆的二进制文件;对混淆的二进制文件进行加密,生成可执行加密二进制文件。本方法避免了传统二进制混淆存在的重定位问题,同时引入了多样性,细粒度等优势,从而更有效的阻止了逆向工程,代码盗用等攻击手段。

A Code Obfuscation Method Based on Secondary Assembly

【技术实现步骤摘要】
一种基于二次汇编的代码混淆方法
本专利技术属于软件保护
,涉及一种通过代码混淆技术来进行软件保护的方法,特别涉及一种基于二次汇编技术的代码混淆方法。
技术介绍
软件安全面临的威胁主要有软件盗版,代码盗用,恶意篡改等等。而软件的逆向工程则是这些攻击方式的基础。保护一个软件免受篡改,恶意修改以及逆向工程是一项非常困难的任务,主要原因是软件分析人员可以无限制的访问软件,他可以借助工具模拟用户正常操作,在调试器中进行单步调试,反汇编,反编译等等;也可以读取内存中的敏感数据甚至是加密密钥,或者是在软件运行期间内修改任何中间值来进一步分析,其目的就是理解程序逻辑并且进一步复制代码或者篡改校验逻辑。计算机领域的“逆向工程”技术指的是通过对程序的数据流以及控制流进行分析,通过多种分析手段,从低级语言来恢复或重构与其对应的高级语言的结构和意义的过程。逆向工程的应用十分广泛,在源码丢失的情况下,逆向工程可以帮助开发者或者系统研究人员恢复关键处的代码或者逻辑,用以改进当前代码或学习。除了这些正面用途,逆向工程也常被用于软件破解,代码剽窃,非法攻击等负面用途。广义的逆向工程包括逆向分析与重建两个阶段,狭义的逆向工程只包括逆向分析,即通过有目的的对程序进行分析,获取对自己有用的信息。例如以软件破解为目的的攻击者,并不需要复原整个软件的逻辑,他们只需到定位到软件保护算法所在位置即可,但同样可以造成巨大破坏和损失。目标代码分析是程序分析领域的重要分支,它无需借助其它额外信息,只需要一个可执行文件,使用相关的分析工具对二进制机器码进行分析,获取程序的控制流,数据流,以及代码引用,函数调用之间的关系。因此针对目标代码的保护是软件保护的核心任务。代码混淆技术是防止软件被逆向工程的有效手段之一。它指的是通过对程序进行混淆变化,在保持原有的功能和语义的前提下,使得变换后的程序比混淆前的程序更难被攻击者理解或还原。根据保护阶段的不同可以将代码混淆分为基于源码的混淆,基于可执行文件的混淆与基于中间语义层的混淆。其中应用范围最为广泛的是基于可执行文件的混淆方式,例如软件加壳与代码虚拟化。软件加壳指的是通过对二进制程序的代码段与数据段进行加密,并附加一段解密代码,而该段代码会在程序运行时优先取得程序的控制权,并对程序中提前加密的数据以及代码进行解密,然后再把控制权交还给原始代码。因此经过加壳的程序可以有效的抵抗静态分析手段。然而加壳这种软件保护方式的缺点是会将原始代码解密到内存中然后执行,这也就导致脱壳后的程序无法继续受到保护,因此可以认为加壳是一种粗粒度的保护方式。二次汇编(Reassemble)技术可以分类为二进制重写技术的一种,它指的是将可执行文件反汇编成汇编文件(.s文件)然后再重新编译成新的二进制的过程。由于可执行文件结构的复杂性,直接对二进制文件进行修改或者打补丁并不是一件容易的事情。因此基于此种情况,ShuaiWang等人(S.Wang,P.Wang,andD.Wu,“ReassembleableDisassembling,”in24thUSENIXSecuritySymposium(USENIXSecurity’15).USENIXAssociation,2015,pp.627–642.)提出了二次汇编技术,并且指出解决重定位问题是二次汇编能否成功的关键所在。也即一个二次汇编工具是否能够识别出可执行文件中哪些元素的地址有可能在新文件中发生改变,并且把这些具体的地址引用抽象成符号引用。该问题也可以简化为:给出一个可执行文件的反汇编代码,如何区分其中的立即数是地址还是常量。问题的难点在于机器语言属于无类型语言,文件中有可能有很多复杂的引用情况出现,并且函数边界等也难以判定,而一旦类型恢复中出现了些许错误,生成的二进制文件都有可能是出错的。目前为止较为成熟的二次汇编工具是由RuoyuWang等人(RuoyuWang,YanShoshitaishvili,AntonioBianchi,”Ramblr:MakingReassemblyGreatAgain”inNDSS)发布的Ramblr工具,其通过降低符号化过程中出现错误的概率,提高二次汇编过程的成功率,并且具有相应的容错机制。对于传统的混淆方式,例如Collberg等人(CollbergC,ThomborsonC,LowD.ATaxonomyofObfuscationTransformations.DepartmentofComputerScience,TheUniversityofAuckland,TechnicalReport148,1997.)指出的数据加密,变量别名,将静态数值转化为运行时数值等等,随着近些年软件分析技术的发展,很多静态分析软件都可以自动识别这些较为简单的混淆方式。而目前常用的基于可执行文件的混淆方案如加壳,虚拟机保护等,则由于重定位问题,即在对二进制文件进行更改时,不能破坏代码间的引用关系,造成引用错误,从而限制了混淆方案的设计和最终的效果。基于中间语言的混淆,例如基于LLVM实现的OLLVM,该种混淆方式存在的问题是由于其集成于编译器中,使用者需在开发阶段使用指定的编译器。但是目前软件的发布形式多以可执行文件的方式发布,基于二进制形式文件的混淆显然比基于中间语言层的混淆方式具有更广泛的应用范围和实际上的研究意义。单一、单次的混淆算法并不能有效的保护原程序,即使复杂如虚拟机保护技术,如果逆向分析人员有足够的耐心和能力找到指令间的对应关系,破解虚拟机保护技术也并非一件难事。所以需要设计一套可迭代、具有多样性、可扩展性的细粒度混淆算法。结合多种不同的混淆算法并且进行迭代才能够产生具有足够强度的,能够抵抗静态和动态分析的混淆变化。
技术实现思路
本专利技术的目的在于提出一种基于二次汇编的代码混淆方法,该方法避免了传统二进制混淆存在的重定位问题,同时引入了多样性,细粒度等优势,从而更有效的阻止了逆向工程,代码盗用等攻击手段。本专利技术采用的技术方案如下:一种基于二次汇编的代码混淆方法,包括以下步骤:对二进制文件进行合法性检验,检查其是否为格式规范的二进制文件;对格式规范的二进制文件进行预处理,找出有关跳转指令和适合插入垃圾指令块的地址信息;对二进制文件进行二次汇编,将文件中的汇编指令替换成等效的指令序列,并在文件中插入垃圾指令进行控制流混淆,生成混淆的汇编文件,再编译成混淆的二进制文件;对混淆的二进制文件进行加密,生成可执行加密二进制文件。进一步地,替换指令时,根据指令操作码对指令进行分类,若有立即数出现,则进行立即数加密,若有特殊寄存器出现,则直接添加花指令;调用相应的处理函数,随机选择混淆模板,生成混淆后的替换指令;将该替换指令返回,替代原指令。进一步地,控制流混淆时,通过基于原跳转指令的插入算法插入垃圾指令,该基于原跳转指令的插入算法是通过插入中间跳的方式进行控制流混淆,具体为:先记录原跳转目标地址,再利用垃圾指令生成器生成一段新的垃圾指令,再将原跳转指令的目标改为插入的垃圾指令块,垃圾指令块执行完毕后继续跳转到原目标执行,实现控制流混淆。进一步地,控制流混淆时,通过基于垃圾指令块间跳转的混淆算法插入垃圾指令,该基于垃圾指令块间跳转的混淆算法为通过插入随机数个垃本文档来自技高网
...

【技术保护点】
1.一种基于二次汇编的代码混淆方法,包括以下步骤:对二进制文件进行合法性检验,检查其是否为格式规范的二进制文件;对格式规范的二进制文件进行预处理,找出有关跳转指令和适合插入垃圾指令块的地址信息;对二进制文件进行二次汇编,将文件中的汇编指令替换成等效的指令序列,并在文件中插入垃圾指令进行控制流混淆,生成混淆的汇编文件,再编译成混淆的二进制文件;对混淆的二进制文件进行加密,生成可执行加密二进制文件。

【技术特征摘要】
1.一种基于二次汇编的代码混淆方法,包括以下步骤:对二进制文件进行合法性检验,检查其是否为格式规范的二进制文件;对格式规范的二进制文件进行预处理,找出有关跳转指令和适合插入垃圾指令块的地址信息;对二进制文件进行二次汇编,将文件中的汇编指令替换成等效的指令序列,并在文件中插入垃圾指令进行控制流混淆,生成混淆的汇编文件,再编译成混淆的二进制文件;对混淆的二进制文件进行加密,生成可执行加密二进制文件。2.如权利要求1所述的方法,其特征在于,替换指令时,根据指令操作码对指令进行分类,若有立即数出现,则进行立即数加密,若有特殊寄存器出现,则直接添加花指令;调用相应的处理函数,随机选择混淆模板,生成混淆后的替换指令;将该替换指令返回,替代原指令。3.如权利要求1所述的方法,其特征在于,控制流混淆时,通过基于原跳转指令的插入算法插入垃圾指令,该基于原跳转指令的插入算法是通过插入中间跳的方式进行控制流混淆,具体为:先记录原跳转目标地址,再利用垃圾指令生成器生成一段新的垃圾指令,再将原跳转指令的目标改为插入的垃圾指令块,垃圾指令块执行完毕后继续跳转到原目标执行,实现控制流混淆。4.如权...

【专利技术属性】
技术研发人员:贾晓启王畅陈阳杜海超解亚敏唐静
申请(专利权)人:中国科学院信息工程研究所
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1