当前位置: 首页 > 专利查询>西北大学专利>正文

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

技术编号:16819414 阅读:32 留言:0更新日期:2017-12-16 12:57
本发明专利技术公开了一种基于ELF感染的Android本地层指令编译虚拟化加壳方法,该方法对待保护的so文件进行Hex抽取和映射虚拟,形成虚拟机so文件,并对so文件的关键代码段进行加密,形成加密后的so文件;利用虚拟机so文件对加密后的so文件进行ELF感染,形成感染后的so文件;利用Cydia Substrate框架对加密后so文件进行Hook替换,使虚拟机so文件中的虚拟指令码替换加密后so文件中被加密的代码。本发明专利技术中使用的是编译时虚拟的思想,这一思想不涉及不同ARM平台版本的问题,因此具有良好的兼容性,能够防止内存Dump分析同时增大了攻击者的攻击成本。

A method of compiling the virtual packers Android local layer instruction based on ELF infection

The invention discloses a method of compiling the virtual shell Android local layer instruction based on ELF infection, the method to protect so files for Hex extraction and mapping of virtual, virtual machine to form the so file, and the key code of the so file section is encrypted, the encrypted form so for encrypted so; the file of ELF infection using virtual machine so file, the formation of infected so files; the encrypted so file using Cydia Hook to replace the Substrate framework, encrypted virtual virtual machine instruction in the so file encryption code to replace the code in the so file. The idea of compile time virtual is used in this invention. This idea does not relate to different versions of ARM platform, so it has good compatibility. It can prevent memory Dump analysis and increase attacker's attack cost.

【技术实现步骤摘要】
一种基于ELF感染的Android本地层指令编译虚拟化加壳方法
本专利技术属于Android应用程序加固
,具体涉及一种基于ELF感染的本地层so文件的编译时虚拟化加壳保护,并结合CydiaSubstrate框架进行hook实现核心功能正常调用的保护技术。
技术介绍
近年来,随着手机应用的蓬勃发展,每年的产量呈指数式的增长,据统计,目前我国主要的应用商店的APP已累计超过1000万。APP在给人们生活带来方便的同时,也给不法分子造就了可乘之机,严重影响APP产业的健康发展。对于APP的保护由最初的dex的简单加固到目前对dex的抽取加固,保护的对象也由dex层转移到了本地层,同时开发者将APP很多的核心算法写到了本地层,从而保护本地层成为了AndroidAPP代码保护的重要趋势。现有的对于本地层文件的保护主要有UPX加壳、ELF文件Section段加密和OLLVM混淆,这些Android本地层保护方法只是能够从表面上起到阻止静态分析的作用,但都不能从本质上来应对动态分析和有经验的逆向攻击者。有经验的逆向攻击者进行动态分析调试,选择合适的时机对在内存中还原的so进行Dump;除此之外,现有的OLLVM混淆主要是针对源码级别的代码编译混淆,虽然保护力度大,但是可操作性弱。因此以上方法在Android本地层so保护时都存在一定的局限性,而Android本地层的so文件又通常是整个AndroidApp中核心逻辑代码的重要实现部分,所以亟待一种既能够防止内存Dump分析同时又能够兼顾以上保护优点的方法。
技术实现思路
针对上述现有技术中存在的问题,本专利技术的目的在于,提供一种将ARM指令在编译时就进行虚拟化,以使得在增加逻辑复杂性的同时,也能够在编译的时候增加编译混淆方法。为了实现上述任务,本专利技术采用以下技术方案:一种基于ELF感染的Android本地层指令编译虚拟化加壳方法,包括以下步骤:查找so文件中需要进行保护的关键代码段,对关键代码段进行指令Hex抽取和映射虚拟,形成虚拟机so文件;对所述的需要保护的关键代码段进行加密处理,得到关键代码段被加密后的so文件;利用虚拟机so文件对加密后的so文件进行ELF感染,形成感染后的so文件;利用CydiaSubstrate框架对加密后so文件进行Hook替换,使虚拟机so文件中的虚拟指令码替换加密后so文件中被加密的代码。进一步地,所述的查找so文件中需要进行保护的关键代码段,对关键代码段进行指令Hex抽取和映射虚拟,形成虚拟机so文件,包括:根据开发者提供的标签进行查找,定位到关键代码段,对关键代码段进行Hex抽取,将抽取后的结果使用自定义的映射规则进行映射变换,使关键代码段中的每一个代码按照映射规则对应一个虚拟指令码;与此同时,自定义用于指令读取以及解释所述虚拟指令码的解释引擎,该解释引擎根据虚拟指令码调用相应的处理函数以等同实现虚拟指令码对应的关键代码段中代码的功能;将虚拟指令码、解释引擎加入到so文件中进行编译,形成虚拟机so文件。进一步地,利用虚拟机so文件对加密后的so文件进行ELF感染,形成感染后的so文件,包括:对于加密后的so文件,修改该so文件的字符串表,添加所述的虚拟机so文件;在so文件的程序头表中添加程序加载时的内存映射信息;修改so文件中程序段表和动态段,使二者指向虚拟机so文件。进一步地,利用CydiaSubstrate框架对加密后的so文件进行Hook替换,使虚拟机so文件中的虚拟指令码替换加密后so文件中被加密的代码,包括:在CydiaSubstrate框架下,加载感染后的so文件,对该so文件中加密过的关键代码的方法名进行查找;利用框架提供的内联Hook机制,根据关键代码的方法的符号地址,在原so文件加载到内存中之后,在关键代码段的开始处完成跳转替换,跳转到虚拟机so文件中的虚拟指令码处;当执行完虚拟机so文件中虚拟指令码之后,跳回到原so文件。本专利技术与现有技术相比具有以下技术特点:1.本专利技术极大地增加了攻击者的攻击成本以及保护程序的复杂性;2.由于对本地层so中的关键代码进行了加密操作,并且之后并没有内存中还原,故而本专利技术可以防止攻击者通过动态调试分析dump出还原后的so文件;于此同时,动态Hook修复,使得目标so利用dump永远是不可能正确的;3.本专利技术中使用的是编译时虚拟的思想,这一思想不涉及不同ARM平台版本的问题,因此具有良好的兼容性,同时,其性能也明显优于其他方法。附图说明图1为本专利技术方法的流程图;图2为实施例中libnative.so文件的保护过程;图3为代码的原始指令到虚拟指令码的映射规则图;图4中(a)和(b)分别是对待保护的so文件中的关键代码段加密前后的文件对比图;图5为虚拟机so文件被注入后运行时优先加载虚拟机so文件的示意图;图6是Hook修复的示意图;具体实施方式本专利技术提出了一种基于ELF感染的Android本地层指令编译虚拟化加壳方法,包括以下步骤:步骤1,输入待保护的Android本地层动态链接库文件,通常为.so文件格式,称为so文件;查找so文件中需要进行保护的关键代码段,对关键代码段进行指令Hex抽取和映射虚拟,形成虚拟机so文件;如图2所示,本实施例中,libnative.so为待保护的so文件,本专利技术首先根据开发者提供的标签进行查找定位到关键代码段,如图中虚线区域所示,对该部分代码进行HEX抽取,将抽取之后的结果使用自定义的映射规则进行映射变换。所谓的自定义映射规则,指的是自行设置一套映射规则,使得能够对待保护的关键代码段中的每一条代码的原始arm指令都根据这一映射规则生成相应的虚拟指令码VCode。如图3所示,为一段关键代码映射为一段虚拟指令集的过程:首先抽取出关键的ARM指令的HEX码,根据字节码的语义,E3A0对应着A000;0001对应着1000,最后真实的字节码E3A00001对应着虚拟字节码A0001000;其他的类似,最后就会生成对应的虚拟字节码。与此同时,自定义用于指令读取以及解释所述的虚拟指令码VCode的解释引擎,该解释引擎就类似于一个CPU,是一个能够自动完成指令读取以及指令解释执行的调度器,其调度的过程具体如下:首先读取虚拟指令码VCode,根据VCode去调用相应的处理函数进行关键代码段中原代码的等同执行。在此之后,将包含有VCode,解释引擎等的虚拟新节加入原so文件中进行编译,生成虚拟机so文件libvm.so。本专利技术是要对Androidso文件中的关键代码进行指令虚拟化,因此需要自定义一套字节码,然后使用一个解释引擎完成指令的读取以及运行。前面提到的关键代码段中的代码与虚拟指令码之间的映射规则的建立方法是多样的,不同的本领域技术人员完全可以自定义不同的映射规则;为了保证映射规则的健壮性,专利技术人提供了一种具体的映射规则以供参考:(1-1)先将arm架构上的汇编指令进行分类,主要分为数据传送指令、算数指令、控制转移指令等;(1-2)对于每一类指令分别建立如下映射规则,仅以几条关键指令为例:a.数据传送指令:mov->0xa0b.算数指令:add->0xa1c.控制转移指令:return->0xa2即,将每一类指令指定一个与其对应本文档来自技高网...
一种基于ELF感染的Android本地层指令编译虚拟化加壳方法

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

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

【专利技术属性】
技术研发人员:赵贝贝房鼎益汤战勇宋丽娜陈晓江李振龚晓庆陈峰
申请(专利权)人:西北大学
类型:发明
国别省市:陕西,61

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1