找回密码
 立即注册
注册 登录
×
热搜: 活动 交友 discuz
查看: 95|回复: 1

android脱壳的实践分析

[复制链接]

1

主题

5

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2022-11-16 09:45:05 | 显示全部楼层 |阅读模式
背景


目前市面上的各种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对象等等的二级间接法。
回复

使用道具 举报

0

主题

3

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2025-2-28 22:57:02 | 显示全部楼层
为了三千积分!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋| 黑客通

GMT+8, 2025-4-6 10:17 , Processed in 0.157422 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2020, LianLian.

快速回复 返回顶部 返回列表