[发明专利]一种基于二次汇编的代码混淆方法在审
申请号: | 201910462869.0 | 申请日: | 2019-05-30 |
公开(公告)号: | CN110210190A | 公开(公告)日: | 2019-09-06 |
发明(设计)人: | 贾晓启;王畅;陈阳;杜海超;解亚敏;唐静 | 申请(专利权)人: | 中国科学院信息工程研究所 |
主分类号: | G06F21/14 | 分类号: | G06F21/14 |
代理公司: | 北京君尚知识产权代理事务所(普通合伙) 11200 | 代理人: | 陈艳 |
地址: | 100093 *** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 二进制文件 混淆 汇编 代码混淆 格式规范 加密 预处理 指令 传统二进制 合法性检验 地址信息 汇编文件 汇编指令 逆向工程 软件保护 跳转指令 指令序列 可执行 控制流 细粒度 重定位 垃圾 编译 替换 盗用 多样性 攻击 引入 检查 | ||
本发明提出一种基于二次汇编的代码混淆方法,属于软件保护技术领域,本方法包括以下步骤:对二进制文件进行合法性检验,检查其是否为格式规范的二进制文件;对格式规范的二进制文件进行预处理,找出有关跳转指令和适合插入垃圾指令块的地址信息;对二进制文件进行二次汇编,将文件中的汇编指令替换成等效的指令序列,并在文件中插入垃圾指令进行控制流混淆,生成混淆的汇编文件,再编译成混淆的二进制文件;对混淆的二进制文件进行加密,生成可执行加密二进制文件。本方法避免了传统二进制混淆存在的重定位问题,同时引入了多样性,细粒度等优势,从而更有效的阻止了逆向工程,代码盗用等攻击手段。
技术领域
本发明属于软件保护技术领域,涉及一种通过代码混淆技术来进行软件保护的方法,特别涉及一种基于二次汇编技术的代码混淆方法。
背景技术
软件安全面临的威胁主要有软件盗版,代码盗用,恶意篡改等等。而软件的逆向工程则是这些攻击方式的基础。保护一个软件免受篡改,恶意修改以及逆向工程是一项非常困难的任务,主要原因是软件分析人员可以无限制的访问软件,他可以借助工具模拟用户正常操作,在调试器中进行单步调试,反汇编,反编译等等;也可以读取内存中的敏感数据甚至是加密密钥,或者是在软件运行期间内修改任何中间值来进一步分析,其目的就是理解程序逻辑并且进一步复制代码或者篡改校验逻辑。
计算机领域的“逆向工程”技术指的是通过对程序的数据流以及控制流进行分析,通过多种分析手段,从低级语言来恢复或重构与其对应的高级语言的结构和意义的过程。逆向工程的应用十分广泛,在源码丢失的情况下,逆向工程可以帮助开发者或者系统研究人员恢复关键处的代码或者逻辑,用以改进当前代码或学习。除了这些正面用途,逆向工程也常被用于软件破解,代码剽窃,非法攻击等负面用途。广义的逆向工程包括逆向分析与重建两个阶段,狭义的逆向工程只包括逆向分析,即通过有目的的对程序进行分析,获取对自己有用的信息。例如以软件破解为目的的攻击者,并不需要复原整个软件的逻辑,他们只需到定位到软件保护算法所在位置即可,但同样可以造成巨大破坏和损失。目标代码分析是程序分析领域的重要分支,它无需借助其它额外信息,只需要一个可执行文件,使用相关的分析工具对二进制机器码进行分析,获取程序的控制流,数据流,以及代码引用,函数调用之间的关系。因此针对目标代码的保护是软件保护的核心任务。
代码混淆技术是防止软件被逆向工程的有效手段之一。它指的是通过对程序进行混淆变化,在保持原有的功能和语义的前提下,使得变换后的程序比混淆前的程序更难被攻击者理解或还原。根据保护阶段的不同可以将代码混淆分为基于源码的混淆,基于可执行文件的混淆与基于中间语义层的混淆。其中应用范围最为广泛的是基于可执行文件的混淆方式,例如软件加壳与代码虚拟化。软件加壳指的是通过对二进制程序的代码段与数据段进行加密,并附加一段解密代码,而该段代码会在程序运行时优先取得程序的控制权,并对程序中提前加密的数据以及代码进行解密,然后再把控制权交还给原始代码。因此经过加壳的程序可以有效的抵抗静态分析手段。然而加壳这种软件保护方式的缺点是会将原始代码解密到内存中然后执行,这也就导致脱壳后的程序无法继续受到保护,因此可以认为加壳是一种粗粒度的保护方式。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国科学院信息工程研究所,未经中国科学院信息工程研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910462869.0/2.html,转载请声明来源钻瓜专利网。