[发明专利]阻止应用程序代码被静态分析的方法及装置有效
申请号: | 201910905676.8 | 申请日: | 2019-09-20 |
公开(公告)号: | CN112541188B | 公开(公告)日: | 2022-05-13 |
发明(设计)人: | 周志刚 | 申请(专利权)人: | 武汉斗鱼网络科技有限公司 |
主分类号: | G06F21/62 | 分类号: | G06F21/62 |
代理公司: | 北京众达德权知识产权代理有限公司 11570 | 代理人: | 刘杰 |
地址: | 430000 湖北省武汉市东湖开*** | 国省代码: | 湖北;42 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 阻止 应用程序 代码 静态 分析 方法 装置 | ||
1.一种阻止应用程序代码被静态分析的方法,其特征在于,所述方法包括:
获取待处理的应用程序代码;
对所述应用程序代码进行函数拆解,得到所述应用程序代码中包含的多个功能函数;
根据预设的第一随机选择函数从所述多个功能函数中选取至少一个功能函数作为待修改函数;
获取所述待修改函数包含的代码块,其中,每一个所述待修改函数包含至少一个代码块;
根据预设的第二随机选择函数从每一个所述待修改函数中选取至少一个代码块作为待修改代码块;
在每一个所述待修改代码块中插入干扰代码,并通过所述干扰代码在所述应用程序代码中构成一虚假分支函数,以使得所述虚假分支函数在所述应用程序代码被静态分析时对基址寄存器和堆栈寄存器进行操作。
2.如权利要求1所述的方法,其特征在于,所述对所述应用程序代码进行函数拆解的步骤,包括:
调用预先配置的继承自FunctionPass的类函数;
基于LLVM编译器框架及所述类函数对所述应用程序代码进行处理,得到所述应用程序代码中包含的多个功能函数。
3.如权利要求1所述的方法,其特征在于,所述根据预设的第一随机选择函数从所述多个功能函数中选取至少一个功能函数作为待修改函数的步骤,包括:
针对所述应用程序代码包含的每一个功能函数分别生成一随机数;
判断每一个所述功能函数对应的随机数是否大于第一预设阈值;
若所述随机数大于所述第一预设阈值,则将所述随机数对应的功能函数作为待修改函数。
4.如权利要求1所述的方法,其特征在于,所述获取所述待修改函数包含的代码块的步骤,包括:
根据预先配置的for循环语句遍历用于存储所述待修改函数包含的代码块的第一链表,得到每一个所述待修改函数包含的代码块;
根据所述待修改函数中各个代码块之间的逻辑关系将每一个所述待修改函数包含的代码块存储到对应的第二链表中。
5.如权利要求1所述的方法,其特征在于,所述根据预设的第二随机选择函数从每一个所述待修改函数中选取至少一个代码块作为待修改代码块的步骤,包括:
针对所述待修改函数包含的每一个代码块分别生成一随机数;
判断每一个所述代码块对应的随机数是否大于第二预设阈值;
若所述随机数大于所述第二预设阈值,则将所述随机数对应的代码块作为待修改代码块。
6.如权利要求1-5中任一项所述的方法,其特征在于,所述在每一个所述待修改代码块中插入干扰代码,并通过所述干扰代码在所述应用程序代码中构成一虚假分支函数的步骤,包括:
根据预先配置的代码块拆分函数将所述待修改代码块拆分为第一部分和第二部分;
根据所述第一部分的代码逻辑及所述第二部分的代码逻辑,生成干扰代码;
将所述干扰代码插入到所述第一部分与所述第二部分之间,以通过所述干扰代码在所述待修改代码块中构成一虚假分支函数;
其中,所述第一部分为所述待修改代码块中第一个非结束语句及其之前的语句,所述第二部分为所述待修改代码块中除所述第一部分之外的剩余语句,所述代码块拆分函数包括以下执行步骤:
获取所述待修改代码块中的第一行代码;
判断所述第一行代码是否是结束语句或调试代码;
若是,则取下一行代码作为所述待修改代码的第一个非结束语句。
7.如权利要求6所述的方法,其特征在于,所述干扰代码包括条件语句及干扰语句,所述根据所述第一部分的代码逻辑及所述第二部分的代码逻辑,生成干扰代码的步骤,包括:
将所述第一部分和所述第二部分包含的代码语句克隆;
从克隆得到的代码语句中选择随机语句进行修改,得到干扰语句;
将所述干扰语句与一恒假条件语句组合,得到所述干扰代码。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于武汉斗鱼网络科技有限公司,未经武汉斗鱼网络科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910905676.8/1.html,转载请声明来源钻瓜专利网。