咨询发布 发表于 2026-1-7 03:08:45

安卓脱壳实战:用FRIDA-DEXDump从内存dump原始DEX

逆向遇到加壳的 App 怎么办?这篇讲安卓脱壳。

一、什么是加壳
壳是一层保护代码。App 编译好之后,用工具把 DEX 文件加密,运行时再解密到内存。你用 apktool 反编译加壳的 APK,看到的不是原始代码,而是壳的代码。要看真正的逻辑,必须把壳剥掉。

二、常见壳类型

[*]梆梆加固:企业级,反调试强,脱壳难度高
[*]爱加密:跟梆梆类似,反调试做得比较全
[*]360 加固:免费版常见,脱壳相对容易
[*]腾讯乐固:腾讯系 App 常用,中等难度
[*]DexProtector:国外商用壳,代码混淆 + DEX 加密


三、脱壳思路
壳在运行时会把 DEX 解密到内存。脱壳的核心思路:在 App 运行时把内存里的 DEX dump 出来。

四、工具推荐


[*]FRIDA-DEXDump:用 Frida 在运行时扫描内存,找到 DEX 结构并导出。最常用
[*]BlackDex:独立工具,不需要 root,通过自定义 ClassLoader 触发加载再 dump
[*]DexHunter:修改 Android 系统源码,在系统层 dump。适合深度分析
[*]Fart:基于 Xposed 的主动脱壳工具,利用 ART 运行时的机制导出 DEX


五、实操:用 FRIDA-DEXDump 脱壳

步骤:
# 1. 手机上启动 frida-server
adb shell "su -c '/data/local/tmp/frida-server &'"

# 2. 安装 FRIDA-DEXDump
pip3 install frida-dexdump

# 3. 启动目标 App(先运行起来让壳解密)
adb shell am start -n com.target.app/.MainActivity

# 4. 运行脱壳
frida-dexdump -U -f com.target.app

# 5. 等待完成,DEX 文件会输出到当前目录的 com.target.app/ 文件夹

六、注意事项

[*]脱壳前先确认壳的类型。用 ApkScan 或者直接看 lib 目录下的 so 文件名判断
[*]有些壳有反调试,脱壳前需要先绕过。常见方法:hook ptrace 返回 0、hook Debug.isDebuggerConnected 返回 false
[*]脱出来的 DEX 可能有多个,取最大的那个(主 DEX)。小的可能是壳自己的
[*]脱出来的 DEX 用 jadx 打开看代码,如果能看到原始类名和方法,说明脱成功了
[*]有些壳用了 VMP(虚拟机保护),关键方法被翻译成虚拟指令,脱出来的 DEX 里这些方法体是空的。VMP 目前没有通用脱壳方案,只能动态分析


七、脱壳之后
拿到原始 DEX 后用 jadx 反编译看 Java 代码,或者用 IDA 分析 native 层 so 库。脱壳是逆向的第一步——拿到明文代码才能开始分析。

https://www.metk.cn/img/posts/reverse_unshell.jpg

脱壳的本质:壳必须在运行时解密才能执行,所以在运行时一定能拿到明文。区别只是怎么拿到、拿得全不全。FRIDA-DEXDump 目前是最通用的方案,建议先试它。

南山 发表于 2026-1-8 13:47:46

这篇质量很高,建议加精。

橙子64 发表于 2026-1-8 20:11:36

这个思路让我想到另一个场景,回头试试能不能套用。

听风98 发表于 2026-1-9 08:59:17

这个流程我在真机上验证过,确实可行,注意备份就行。

陆离 发表于 2026-1-10 04:10:49

同意楼主的判断,现在加固手段越来越多,纯手工成本太高了。

一叶林间 发表于 2026-1-11 05:46:11

照着试了一下,第一遍没成功,发现是权限问题,建议楼主补充个提示。

清风34 发表于 2026-1-12 13:45:24

实战出来的经验和文档里写的完全是两码事,楼主这个很真实。

沉默长夏 发表于 2026-1-14 04:08:28

同求后续,想知道绕过之后怎么稳定保持,重签名这块一直搞不定。

流浪铺子 发表于 2026-1-16 00:55:23

楼主有没有遇到过反调试?我这边一挂调试器就直接退出。

长夏林间 发表于 2026-1-18 04:06:08

试了下你说的第二种方法,成功率更高,推荐。
页: [1] 2 3 4 5
查看完整版本: 安卓脱壳实战:用FRIDA-DEXDump从内存dump原始DEX