[发明专利]多兼容性代码加固方法在审
申请号: | 202110260003.9 | 申请日: | 2021-03-10 |
公开(公告)号: | CN112989290A | 公开(公告)日: | 2021-06-18 |
发明(设计)人: | 禹明生;刘远;王晖;李金祥;段雨洪 | 申请(专利权)人: | 四川长虹格润环保科技股份有限公司 |
主分类号: | G06F21/14 | 分类号: | G06F21/14;G06F8/76;G06F8/41 |
代理公司: | 四川省成都市天策商标专利事务所 51213 | 代理人: | 陈艺文 |
地址: | 610404 四川*** | 国省代码: | 四川;51 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 兼容性 代码 加固 方法 | ||
本发明公开了一种多兼容性代码加固方法,包括:使用LLVM将被保护代码转化为LLVM IR文件,使用VMPP设计虚拟指令集;指令转换器进行指令虚拟化:指令转换器解析所述LLVM IR文件,将其转换为所述虚拟指令集上的虚拟指令,包括数据段、指令段和外部函数调用代码,分别对应于IR数据和指令中的全局变量、指令和外部函数调用表;使用开发者工具链进行架构的兼容:使用开发者工具链编译源代码生成不同架构上的so文件或者静态链接库文件;本发明使得被保护的代码兼容性高、安全性好。
技术领域
本发明涉及代码安全技术领域,特别是一种多兼容性代码加固方法。
背景技术
安卓系统越来越广泛的被应用在各种只能设备上,与此同时,针对安卓应用软件的逆向攻击也日益增多,这不仅极大的侵犯了软件开发者的合法权益,也给终端用户带来了潜在的安全风险。现有的安卓软件保护方法比如命名混淆、动态加载、代码隐藏等虽然在一定程度上增加了安卓软件的逆向难度,但是容易被绕过。一种更为有效的方法是采用指令虚拟化的加固方法,但是已有的指令虚拟化方法只针对特定架构,无法兼容多种架构的安卓设备。
发明内容
为解决现有技术中存在的问题,本发明的目的是提供一种多兼容性代码加固方法,本发明使得被保护的代码兼容性高、安全性好。
为实现上述目的,本发明采用的技术方案是:一种多兼容性代码加固方法,包括以下步骤:
步骤1、使用LLVM将被保护代码转化为LLVM IR文件,使用VMPP设计虚拟指令集;
步骤2、指令转换器进行指令虚拟化:指令转换器解析所述LLVM IR文件,将其转换为所述虚拟指令集上的虚拟指令,包括数据段、指令段和外部函数调用代码,分别对应于IR数据和指令中的全局变量、指令和外部函数调用表;
步骤3、使用开发者工具链进行架构的兼容:使用开发者工具链编译源代码生成不同架构上的so文件或者静态链接库文件。
作为本发明的进一步改进,在步骤1中,所述虚拟指令集基于寄存器架构,使用256个通用寄存器和16个参数寄存器进行运算操作。
作为本发明的进一步改进,在步骤1中,所述虚拟指令集包括8个类型共45条指令,8个类型的指令分别为R类型指令、I类型指令、B类型指令、CMP类型指令、W类型指令、C类型指令、M类型指令和E类型指令,其中:
R类型指令为源操作数均为寄存器的指令,用于算术运算、逻辑、位移操作;
I类型指令为源操作数为寄存器和立即数的指令,用于算术运算、逻辑、位移操作;
B类型指令为跳转指令,用于实现指令跳转和内部函数调用;
CMP类型指令为比较型指令,用于比较源操作数;
W类型指令为访存指令和赋值寄存器指令,用于访问内存等操作;
C类型指令为外部函数调用指令,用于处理外部函数调用;
M类型指令包含malloc指令和return指令,用于分配内存和函数返回;
E类型指令为异常处理的指令,用于处理异常机制。
作为本发明的进一步改进,在步骤2中,指令转换器解析LLVM IR文件时,使用LLVMAPI依次读取并处理每条IR数据和指令,分别生成数据段、指令段和外部函数调用代码;指令转换器依次读取IR数据和指令中每个全局变量,解析出该变量的长度与值,将变量的值写入数据段文件中;若该变量未初始化,则将相应长度的0写入数据段文件,同时记录该变量的符号和起始地址,以及其映射关系,这样其他指令通过访问其地址来使用该变量。
作为本发明的进一步改进,所述步骤3具体如下:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于四川长虹格润环保科技股份有限公司,未经四川长虹格润环保科技股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110260003.9/2.html,转载请声明来源钻瓜专利网。