[发明专利]一种基于虚拟机指令修改的Android应用加固系统及方法在审
申请号: | 201710928499.6 | 申请日: | 2017-10-09 |
公开(公告)号: | CN107729725A | 公开(公告)日: | 2018-02-23 |
发明(设计)人: | 吕小亮;刘苇;祁龙云;魏兴慎;宋子锋;韩勇;杨维永;黄益彬 | 申请(专利权)人: | 南京南瑞集团公司;南京南瑞信息通信科技有限公司 |
主分类号: | G06F21/14 | 分类号: | G06F21/14;G06F8/41;G06F8/53;G06F9/455 |
代理公司: | 南京纵横知识产权代理有限公司32224 | 代理人: | 董建林 |
地址: | 210003 *** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 虚拟机 指令 修改 android 应用 加固 系统 方法 | ||
技术领域
本发明涉及计算机软件安全技术领域,具体涉及一种基于虚拟机指令修改的Android应用加固系统,还涉及一种基于虚拟机指令修改的Android应用加固方法。
背景技术
移动互联网的快速发展促进了智能手机应用的繁荣,Android系统凭借其开源特性迅速成为市场份额最大的智能手机系统。然而Android应用被逆向篡改等现象不仅对用户隐私及资产造成困扰,更损害了开发者的合法权益。如何有效保护Android应用成为移动安全领域研究的热点。
传统Android应用加固技术有重打包检测、代码混淆、自我校验等,这些方法虽取得一定成效,却普遍面临原理固定、易被攻击者规避等问题。软件加壳作为一种可有效防止逆向的技术得到广泛关注,但是主流的基于类加载器和基于方法替换的加壳技术都己经出现了自动脱壳破解方案,因此必须寻求安全性更高的加固技术。
发明内容
本发明的目的在于克服现有技术中的不足,提供了一种基于虚拟机指令修改的Android应用加固系统及方法,经过虚拟机保护的关键代码将不再由Dalvik虚拟机执行,可以较好抵御依赖Dalvik字节码的静态逆向分析,即使通过动态内存DUMP出DEX文件也无法做出有价值的分析。
为解决上述技术问题,本发明提供了一种基于虚拟机指令修改的Android应用加固系统,其特征是,包括依次相连的应用解析模块、安全加固模块和重新编译模块;
应用解析模块,对待加固的Android应用程序APK反编译得到Smali文件,遍历Smali文件选取需要加固的方法名;
安全加固模块包括依次相连的指令抽取子模块、指令转换子模块和字节码解析子模块;
其中指令抽取子模块,根据应用解析模块中选取的需要加固的方法名,从DEX文件中抽取出与方法名对应的原始Dalvik指令,并用Native方法指令替换此原始Dalvik指令;
指令转换子模块,构造指令集转换规则,根据所述指令集转换规则将上述指令抽取子模块抽取的标准Dalvik指令转换为自定义的虚拟指令;
字节码解析子模块,构造独立于标准Dalvik虚拟机的自定义虚拟机执行引擎,执行上述转换后的自定义虚拟指令集。
重新编译模块,将原Android应用程序APK中的资源文件以及经过安全加固模块处理后的文件重新打包编译成新的应用程序安装包。
相应的,本发明还提供了一种基于虚拟机指令修改的Android应用加固方法,其特征是,包括以下步骤:
步骤S1,对待加固的Android应用程序APK进行反编译得到Smali文件,遍历Smali文件选取需要加固的方法名;
步骤S2,根据所选取的需要加固的方法名,从DEX方法文件中抽取出与方法名对应的原始Dalvik指令,并用Native方法指令替换此原始Dalvik指令;
步骤S3,构造指令集转换映射关系,将上述抽取的原始Dalvik指令按照上述指令集转换映射关系转换为自定义虚拟指令并保存到动态库中;
步骤S4,构造自定义虚拟机执行引擎执行上述转换后的自定义虚拟指令,并将该自定义虚拟机执行引擎保存到动态库中;
步骤S5,将原Android应用程序APK中的资源文件以及经过上述处理后的文件重新打包编译成新的Android应用程序APK。
进一步的,在步骤S1中,使用ApkTool对需要加固的APK利用静态分析技术反编译得到Smali文件。
进一步的,在步骤S2中,从DEX方法文件中抽取出与方法名对应的原始Dalvik指令具体过程如下:
1)根据上述选取的需要加固方法名逐个匹配DEX方法列表;
2)当匹配成功后,即在DEX中找到了与上述选取的方法名,将方法中所包含的原始Dalvik指令,将这部分原始Dalvik指令抽取出来;
3)清空上述选取的方法名所对应的原始Dalvik指令,并用Native方法指令替换。
进一步的,步骤S3中,自定义虚拟指令和标准Dalvik指令指令集转换映射关系如下:
1)定义字典DICT结构体,由key和value构成;key为操作数的个数,value为具体的指令;遍历标准Dalvik指令集中的每条指令,得到每条指令操作数的个数,将具有相同操作数个数的指令添加到所述DICT的同一个Key中;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京南瑞集团公司;南京南瑞信息通信科技有限公司,未经南京南瑞集团公司;南京南瑞信息通信科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710928499.6/2.html,转载请声明来源钻瓜专利网。