• / 10

基于ELF感染的Android本地层指令编译虚拟化加壳方法

关 键  词:
基于 ELF 感染 Android 本地 指令 编译 虚拟 化加壳 方法
资源描述:

《基于ELF感染的Android本地层指令编译虚拟化加壳方法》文档由会员分享,可在线阅读,更多相关《基于ELF感染的Android本地层指令编译虚拟化加壳方法(10页珍藏版)》请在白瓜网上搜索。

1、19)中华人民共和国国家知识产权局 (12)发明专利申请 (10)申请公布号 (43)申请公布日 (21)申请号 201710453423.2 (22)申请日 2017.06.15 (71)申请人 西北大学 地址 710069 陕西省西安市太白北路229号 (72)发明人 赵贝贝房鼎益汤战勇宋丽娜 陈晓江李振龚晓庆陈峰 (74)专利代理机构 西安恒泰知识产权代理事务 所 61216 代理人 李婷张明 (51)Int.Cl. G06F 21/12(2013.01) (54)发明名称 一种基于ELF感染的Android本地层指令编 译虚拟化加壳方法 (57)摘要 本发明公开了一种基于ELF感染的A。

2、ndroid 本地层指令编译虚拟化加壳方法, 该方法对待保 护的so文件进行Hex抽取和映射虚拟, 形成虚拟 机so文件, 并对so文件的关键代码段进行加密, 形成加密后的so文件; 利用虚拟机so文件对加密 后的so文件进行ELF感染, 形成感染后的so文件; 利用CydiaSubstrate框架对加密后so文件进行 Hook替换, 使虚拟机so文件中的虚拟指令码替换 加密后so文件中被加密的代码。 本发明中使用的 是编译时虚拟的思想, 这一思想不涉及不同ARM 平台版本的问题, 因此具有良好的兼容性, 能够 防止内存Dump分析同时增大了攻击者的攻击成 本。 权利要求书1页 说明书5页 附。

3、图3页 CN 107480476 A 2017.12.15 CN 107480476 A 1.一种基于ELF感染的Android本地层指令编译虚拟化加壳方法, 其特征在于, 包括以 下步骤: 查找so文件中需要进行保护的关键代码段, 对关键代码段进行指令Hex抽取和映射虚 拟, 形成虚拟机so文件; 对所述的需要保护的关键代码段进行加密处理, 得到关键代码段被 加密后的so文件; 利用虚拟机so文件对加密后的so文件进行ELF感染, 形成感染后的so文件; 利用Cydia Substrate框架对加密后so文件进行Hook替换, 使虚拟机so文件中的虚拟指令码替换加密 后so文件中被加密的代码。

4、。 2.如权利要求1所述的基于ELF感染的Android本地层指令编译虚拟化加壳方法, 其特 征在于, 所述的查找so文件中需要进行保护的关键代码段, 对关键代码段进行指令Hex抽取 和映射虚拟, 形成虚拟机so文件, 包括: 根据开发者提供的标签进行查找, 定位到关键代码段, 对关键代码段进行Hex抽取, 将 抽取后的结果使用自定义的映射规则进行映射变换, 使关键代码段中的每一个代码按照映 射规则对应一个虚拟指令码; 与此同时, 自定义用于指令读取以及解释所述虚拟指令码的 解释引擎, 该解释引擎根据虚拟指令码调用相应的处理函数以等同实现虚拟指令码对应的 关键代码段中代码的功能; 将虚拟指令码。

5、、 解释引擎加入到so文件中进行编译, 形成虚拟机 so文件。 3.如权利要求1所述的基于ELF感染的Android本地层指令编译虚拟化加壳方法, 其特 征在于, 利用虚拟机so文件对加密后的so文件进行ELF感染, 形成感染后的so文件, 包括: 对于加密后的so文件, 修改该so文件的字符串表, 添加所述的虚拟机so文件; 在so文件 的程序头表中添加程序加载时的内存映射信息; 修改so文件中程序段表和动态段, 使二者 指向虚拟机so文件。 4.如权利要求1所述的基于ELF感染的Android本地层指令编译虚拟化加壳方法, 其特 征在于, 利用Cydia Substrate框架对加密后的s。

6、o文件进行Hook替换, 使虚拟机so文件中的 虚拟指令码替换加密后so文件中被加密的代码, 包括: 在Cydia Substrate框架下, 加载感染后的so文件, 对该so文件中加密过的关键代码的 方法名进行查找; 利用框架提供的内联Hook机制, 根据关键代码的方法的符号地址, 在原so 文件加载到内存中之后, 在关键代码段的开始处完成跳转替换, 跳转到虚拟机so文件中的 虚拟指令码处; 当执行完虚拟机so文件中虚拟指令码之后, 跳回到原so文件。 权利要求书 1/1 页 2 CN 107480476 A 2 一种基于ELF感染的Android本地层指令编译虚拟化加壳方法 技术领域 00。

7、01 本发明属于Android应用程序加固技术领域, 具体涉及一种基于ELF感染的本地层 so文件的编译时虚拟化加壳保护, 并结合Cydia Substrate框架进行hook实现核心功能正 常调用的保护技术。 背景技术 0002 近年来, 随着手机应用的蓬勃发展, 每年的产量呈指数式的增长, 据统计, 目前我 国主要的应用商店的APP已累计超过1000万。 APP在给人们生活带来方便的同时, 也给不法 分子造就了可乘之机, 严重影响APP产业的健康发展。 0003 对于APP的保护由最初的dex的简单加固到目前对dex的抽取加固, 保护的对象也 由dex层转移到了本地层, 同时开发者将APP。

8、很多的核心算法写到了本地层, 从而保护本地 层成为了Android APP代码保护的重要趋势。 0004 现有的对于本地层文件的保护主要有UPX加壳、 ELF文件Section段加密和OLLVM混 淆, 这些Android本地层保护方法只是能够从表面上起到阻止静态分析的作用, 但都不能从 本质上来应对动态分析和有经验的逆向攻击者。 有经验的逆向攻击者进行动态分析调试, 选择合适的时机对在内存中还原的so进行Dump; 除此之外, 现有的OLLVM混淆主要是针对源 码级别的代码编译混淆, 虽然保护力度大, 但是可操作性弱。 因此以上方法在Android本地 层so保护时都存在一定的局限性, 而A。

9、ndroid本地层的so文件又通常是整个Android App中 核心逻辑代码的重要实现部分, 所以亟待一种既能够防止内存Dump分析同时又能够兼顾以 上保护优点的方法。 发明内容 0005 针对上述现有技术中存在的问题, 本发明的目的在于, 提供一种将ARM指令在编译 时就进行虚拟化, 以使得在增加逻辑复杂性的同时, 也能够在编译的时候增加编译混淆方 法。 0006 为了实现上述任务, 本发明采用以下技术方案: 0007 一种基于ELF感染的Android本地层指令编译虚拟化加壳方法, 包括以下步骤: 0008 查找so文件中需要进行保护的关键代码段, 对关键代码段进行指令Hex抽取和映 射。

10、虚拟, 形成虚拟机so文件; 对所述的需要保护的关键代码段进行加密处理, 得到关键代码 段被加密后的so文件; 0009 利用虚拟机so文件对加密后的so文件进行ELF感染, 形成感染后的so文件; 利用 Cydia Substrate框架对加密后so文件进行Hook替换, 使虚拟机so文件中的虚拟指令码替 换加密后so文件中被加密的代码。 0010 进一步地, 所述的查找so文件中需要进行保护的关键代码段, 对关键代码段进行 指令Hex抽取和映射虚拟, 形成虚拟机so文件, 包括: 0011 根据开发者提供的标签进行查找, 定位到关键代码段, 对关键代码段进行Hex抽 说明书 1/5 页 3。

11、 CN 107480476 A 3 取, 将抽取后的结果使用自定义的映射规则进行映射变换, 使关键代码段中的每一个代码 按照映射规则对应一个虚拟指令码; 与此同时, 自定义用于指令读取以及解释所述虚拟指 令码的解释引擎, 该解释引擎根据虚拟指令码调用相应的处理函数以等同实现虚拟指令码 对应的关键代码段中代码的功能; 将虚拟指令码、 解释引擎加入到so文件中进行编译, 形成 虚拟机so文件。 0012 进一步地, 利用虚拟机so文件对加密后的so文件进行ELF感染, 形成感染后的so文 件, 包括: 0013 对于加密后的so文件, 修改该so文件的字符串表, 添加所述的虚拟机so文件; 在so。

12、 文件的程序头表中添加程序加载时的内存映射信息; 修改so文件中程序段表和动态段, 使 二者指向虚拟机so文件。 0014 进一步地, 利用Cydia Substrate框架对加密后的so文件进行Hook替换, 使虚拟机 so文件中的虚拟指令码替换加密后so文件中被加密的代码, 包括: 0015 在Cydia Substrate框架下, 加载感染后的so文件, 对该so文件中加密过的关键代 码的方法名进行查找; 利用框架提供的内联Hook机制, 根据关键代码的方法的符号地址, 在 原so文件加载到内存中之后, 在关键代码段的开始处完成跳转替换, 跳转到虚拟机so文件 中的虚拟指令码处; 当执行。

13、完虚拟机so文件中虚拟指令码之后, 跳回到原so文件。 0016 本发明与现有技术相比具有以下技术特点: 0017 1.本发明极大地增加了攻击者的攻击成本以及保护程序的复杂性; 0018 2.由于对本地层so中的关键代码进行了加密操作, 并且之后并没有内存中还原, 故而本发明可以防止攻击者通过动态调试分析dump出还原后的so文件; 于此同时, 动态 Hook修复, 使得目标so利用dump永远是不可能正确的; 0019 3.本发明中使用的是编译时虚拟的思想, 这一思想不涉及不同ARM平台版本的问 题, 因此具有良好的兼容性, 同时, 其性能也明显优于其他方法。 附图说明 0020 图1为本发。

14、明方法的流程图; 0021 图2为实施例中libnative.so文件的保护过程; 0022 图3为代码的原始指令到虚拟指令码的映射规则图; 0023 图4中(a)和(b)分别是对待保护的so文件中的关键代码段加密前后的文件对比 图; 0024 图5为虚拟机so文件被注入后运行时优先加载虚拟机so文件的示意图; 0025 图6是Hook修复的示意图; 具体实施方式 0026 本发明提出了一种基于ELF感染的Android本地层指令编译虚拟化加壳方法, 包括 以下步骤: 0027 步骤1, 输入待保护的Android本地层动态链接库文件, 通常为.so文件格式, 称为 so文件; 查找so文件中。

15、需要进行保护的关键代码段, 对关键代码段进行指令Hex抽取和映射 虚拟, 形成虚拟机so文件; 说明书 2/5 页 4 CN 107480476 A 4 0028 如图2所示, 本实施例中, libnative.so为待保护的so文件, 本发明首先根据开发 者提供的标签进行查找定位到关键代码段, 如图中虚线区域所示, 对该部分代码进行HEX抽 取, 将抽取之后的结果使用自定义的映射规则进行映射变换。 0029 所谓的自定义映射规则, 指的是自行设置一套映射规则, 使得能够对待保护的关 键代码段中的每一条代码的原始arm指令都根据这一映射规则生成相应的虚拟指令码 VCode。 如图3所示, 为一。

16、段关键代码映射为一段虚拟指令集的过程: 0030 首先抽取出关键的ARM指令的HEX码, 根据字节码的语义, E3 A0对应着A0 00; 00 01对应着10 00, 最后真实的字节码E3 A0 00 01对应着虚拟字节码A0 00 10 00; 其他的类 似, 最后就会生成对应的虚拟字节码。 0031 与此同时, 自定义用于指令读取以及解释所述的虚拟指令码VCode的解释引擎, 该 解释引擎就类似于一个CPU, 是一个能够自动完成指令读取以及指令解释执行的调度器, 其 调度的过程具体如下: 首先读取虚拟指令码VCode, 根据VCode去调用相应的处理函数进行 关键代码段中原代码的等同执行。 在此之后, 将包含有VCode, 解释引擎等的虚拟新节加入 原so文件中进行编译, 生成虚拟机so文件libvm.so。 0032 本发明是要对Android so文件中的关键代码进行指令虚拟化, 因此需要自定义一 套字节码, 然后使用一个解释引擎完成指令的读取以及运行。 0033 前面提到的关键代码段中的代码与虚拟指令码之间的映射规则的建立方法是多 样的, 不同的本领域技术人员完全可以自定。

展开阅读全文
  白瓜网所有资源均用户上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
0条评论

还可以输入200字符

暂无评论,赶快抢占沙发吧。

关于本文
本文标题:基于ELF感染的Android本地层指令编译虚拟化加壳方法
链接地址:https://www.baigua.net/doc/836589.html
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 20018-2021 白瓜网版权所有

经营许可证编号:粤ICP备20005300号-1