The invention discloses a general automatic shelling method and device for Android strengthening application program. This method is as follows: 1) Create a virtual machine for each loaded reinforcement application; Dex file location unit in virtual machine continuously monitors the loaded reinforcement application. When the new Dex file is loaded, Dex file location unit records DexOrJar structure and sends it to class loader verification unit; 2) ClassLox file matching unit of class loader finds the corresponding class loader ClassLo Lo for each Dex file. Adr, and form association records; 3) Simulate the loading and parsing process of system classes according to Association records to obtain the decrypted data content of corresponding Dex files; 4) Create Dex file template according to Dex file standard specification, fill the decrypted data content into the corresponding Dex file template, and get the Dex file containing decrypted data after the application is shelled.
【技术实现步骤摘要】
一种Android加固应用程序通用自动化脱壳方法和装置
本专利技术涉及一种Android加固应用程序通用自动化脱壳方法和装置,属于计算机应用安全
技术介绍
目前Android操作系统已经成为全球市场上所占份额最高的移动终端系统,基于Android操作系统的应用程序数量也逐年增多。由于Android平台的开放性,应用程序能够较容易的被逆向分析、修改破解、重新打包。针对Android应用程序的攻击行为层出不穷,攻击者利用程序中因设计疏忽或逻辑错误产生的漏洞,攻击运行Android系统的智能设备,对用户的隐私和安全产生了极大的威胁。为了防止软件被恶意攻击利用,许多开发者采取了应用加固的方式,对程序关键代码进行混淆、加密、隐藏,极大的增加了逆向分析的难度,从而达到对程序进行保护的效果。应用加固逐渐成为增加应用分析破解门槛,保障应用不被恶意篡改的重要手段。与此同时,以Android平台为目标的恶意软件也利用了加固技术的特性,用于躲避杀毒引擎的检测和安全研究人员的分析。从安全研究的角度而言,对加固应用脱壳,还原出程序代码,能够辅助静态分析工具对程序进行更加深入的分析,有利于增强对恶意行为的检测。在早期的加固方案中,Dex文件被整体加密,并存放于Android应用程序APK文件之中。在程序运行时,壳代码首先将Dex文件进行解密,然后回写至文件系统,并最终利用系统的类加载器ClassLoader进行加载执行。虽然可以在Dex文件被加载后,将其从文件系统删除,但仍然不能防止脱壳进程拦截对应函数,并获得完整Dex文件。随后的加固技术对Dex文件的加载过程进行了改进, ...
【技术保护点】
1.一种Android加固应用程序通用自动化脱壳方法,其步骤包括:1)为每一加载的加固应用创建一虚拟机;虚拟机中的Dex文件定位单元持续化监测加载的加固应用,当监测到虚拟机加载新的Dex文件时,Dex文件定位单元记录虚拟机内部用于表示内存中Dex文件信息的DexOrJar结构,并发送给类加载器验证单元;2)类加载器验证单元对每一项Dex文件匹配查找相应的类加载器ClassLoader,并形成关联记录;3)根据所述关联记录,模拟系统类加载和数据解析过程,获取对应Dex文件的解密后的数据内容;4)根据Dex文件标准规范创建Dex文件模板,将解密后的数据内容填充至对应Dex文件模板中,得到加固应用脱壳后包含解密数据的Dex文件。
【技术特征摘要】
1.一种Android加固应用程序通用自动化脱壳方法,其步骤包括:1)为每一加载的加固应用创建一虚拟机;虚拟机中的Dex文件定位单元持续化监测加载的加固应用,当监测到虚拟机加载新的Dex文件时,Dex文件定位单元记录虚拟机内部用于表示内存中Dex文件信息的DexOrJar结构,并发送给类加载器验证单元;2)类加载器验证单元对每一项Dex文件匹配查找相应的类加载器ClassLoader,并形成关联记录;3)根据所述关联记录,模拟系统类加载和数据解析过程,获取对应Dex文件的解密后的数据内容;4)根据Dex文件标准规范创建Dex文件模板,将解密后的数据内容填充至对应Dex文件模板中,得到加固应用脱壳后包含解密数据的Dex文件。2.如权利要求1所述的方法,其特征在于,形成所述关联记录的方法为:首先获取虚拟机中所有已加载类的信息,每一个类对应一个ClassObject结构,其中ClassObject结构中的pDvmDex成员代表当前类所对应的Dex文件,ClassObject结构中的classLoader成员保存了加载此类的类加载器的值,ClassObject结构中pDvmDex与classLoader具有对应关系;然后对于每一项Dex文件对应的DexOrJar结构,先取得其成员DvmDex的值,若所有ClassObject结构中的pDvmDex成员均没有指向该DvmDex,则说明当前Dex文件中并没有任何类被加载;反之,则获取classLoader值并与对应的Dex文件形成关联记录。3.如权利要求1或2所述的方法,其特征在于,获取对应Dex文件的解密后的数据内容的方法为:首先根据Dex文件与类加载器ClassLoader的关联记录,使用类加载器ClassLoader加载对应Dex文件中所有的类;然后根据关联记录中,代表了该Dex文件对应的DexOrJar结构,解析该Dex文件不同组成部分中的内容,若获取到的内容是指向其它内存区域的指针,则进行递归获取,若获取到的内容是数据,则将其复制保存至临时的内存空间中,最终得到该Dex文件的解密后的数据内容。4.如权利要求1所述的方法,其特征在于,所述Dex文件模板包含的结构有Dex文件头、数据索引结构区、数据区和静态链接数据区。5.如权利要求1所述的方法,其特征在于,将解密后的数据内容填充至对应Dex文件模板中,得到加固应用脱壳后包含解密数据的Dex文件的方法为:将获取的解密后的数据内容按照Dex文件标准规范依次填充至对应的Dex文件模板;判断填充数据的有效性,若填充数据无效,则判断填充数据的冗余性,若填充数据是冗余的,则自动计算该填充数据的内容,否则清空Dex文件中该填充数据对应的结构。6.一种Android加固应用程序通用自动化脱壳装置,其特...
【专利技术属性】
技术研发人员:韩心慧,简容,黎桐辛,武新逢,
申请(专利权)人:北京大学,
类型:发明
国别省市:北京,11
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。