文章总结: 本文系统分析AndroidAPP脱壳技术,指出脱壳本质是dump内存中解密状态的dex文件,关键在于定位dex起始地址与大小及选择正确脱壳时机。详细对比Dalvik与ART虚拟机的脱壳方法:Dalvik可通过hookdvmDexFileOpenPartial等函数,ART则通过DexFile类间接定位内存数据。文章还提供多级间接定位技巧及参考资源,对移动安全研究具有实操指导价值。 综合评分: 82 文章分类: 移动安全,逆向分析,二进制安全,安全工具,APP安全
APP脱壳的分析
哆啦安全
2022年3月18日 07:20
在小说阅读器读本章
去阅读
以下文章来源于编码安全 ,作者编码安全
编码安全 .
移动安全、鸿蒙安全、app逆向、js逆向、android漏洞、编码安全、安全攻防的分享。
背景
目前市面上的各种APP安全加固厂商非常多,也是由于它们的加固产品的技术不断被攻破,从而推动它们加固技术的不断迭代更新。加固和脱壳永远是对立面的。脱壳更多的需要涉及到对APP内存的dump。
android目前有dalvik虚拟机和ART虚拟机,其中dalvik虚拟机是android 4.4以前使用的,而art虚拟机是android 4.4之后使用的。由于ART的预先加载代替用时查找以此提升APP应用的性能,所以目前的主流的虚拟机都是跑ART虚拟机。但是在加固过程中都需要对这两种虚拟机进行兼容,因此脱壳上也是有不一样的脱壳方法。
脱壳本质
Android中的APP脱壳本质是对内存中处于解密状态的dex进行dump。脱壳就是对加固的app中保护的dex的整体dump,不管是函数抽取、dex2c还是vmp虚拟机壳,都是要对整体的dex进行dump,然后再对脱壳下来的dex文件进行修复。同时要实现对app进行脱壳,那么就需要准确的定位 内存中解密后的dex文件的起始位置和大小。
同时要实现脱壳成功需要两个关键因素:1.内存中dex的起始地址和大小。2.脱壳的时机,只有在dex解密后进行脱壳,这样才能dump出明文状态的dex。
基于hook函数
在dalvik虚拟机下可以通过hook系统关键函数进行dump内存数据也就是脱壳,例如dvmDexFileOpenPartial、DexFileParse等函数
其中DexFileParse该函数主要就是对内存中的dex内容进行解析,最终返回一个DexFile结构体供虚拟机使用,函数的参数部分包含了内存中的dex文件的起始地址和大小,因此可以利用这个函数进行脱壳。
其中dvmDexFileOpenPartial该函数里最后调用了dexFileParse函数来得到解析后的DexFile结构体,函数的参数部分也包含了内存中dex的起始地址和大小,因此也可以利用这个函数进行脱壳。
在ART虚拟机种可以通过hook系统函数openMemory、OpenAndReadMagic、DexFile::DexFile()函数进行dump内存数据也就是脱壳。
从上图中可以看到OpenMemory函数的参数中包含了内存中dex的起始位置和大小,因此可以通过该函数进行脱壳。
基于ART的脱壳
在ART虚拟机下影响脱壳的关键的一个类就是DexFile。
1、那么可以直接查找法就是指以DexFile为关键字,在庞大的源码库中检索定位可能的脱壳点。如参数中出现DexFile类型的、返回值为DexFile类型的、函数流程中出现DexFile类型的源码位置。在获取到DexFile对象以后,然后再通过该对象的Begin()和Size()函数获取到该DexFile对象对应的内存中的dex的起始地址和大小即可进行dex的dump。
2、通过以DexFile为出发点,寻找能够间接获取到DexFile对象的。如通过ArtMethod对象的getDexFile()获取到ArtMethod所属的DexFile对象的这种一级间接法等;然后再在海量源码中以ArtMethod为关键字进行检索,检索那些参数中出现ArtMethod类型的、返回值为ArtMethod类型的、函数流程中出现ArtMethod类型的源码位置;
再比如通过Thread的getCurrentMethod()函数首先获取到ArtMethod或者通过ShadowFrame的getMethod获取到ArtMethod对象,然后再通过getDexFile获取到ArtMethod对象所属的DexFile的二级间接法以及通过ShadowFrame对象的GetMethod()函数获取到当前栈中执行的ArtMethod对象,然后再获取DexFile对象等等的二级间接法。
参考借鉴文章https://bbs.pediy.com/thread-254555.htm
【推荐阅读】
APP加固和脱壳方案总结
Android加固和脱壳原理探索
Android安全之定制ROM脱壳机浅析
移动端过检测抓包最全解决方案
burpsuite在各场景下的抓包方法(建议收藏)
2022年岗位招聘第1期
Android Framework/驱动/内核中高级工程师
移动端安全开发、移动端安全、网络安全视频课程
(1).移动安全App安全检测、渗透测试、风控、隐私合规、加固防护、病毒逆向的视频课程
(2).Android系统Framework、驱动、内核等模块的定制开发和Android APP开发以及鸿蒙APP开发的视频课程
(3).网络安全漏洞挖掘、Web安全、渗透测试、病毒逆向、溯源反制等系列视频课程
以上视频课程会在近期发布,欢迎各位扫码关注”哆啦安全”公众号、视频号
【关注、点赞、分享是最大动力】
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:哆啦安全 《APP脱壳的分析》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论