[App逆向]脱壳实战
基础概念
- 加壳(加固):为了保护App代码不被轻易看懂,开发者会用"外壳"把真正的代码加密藏起来。运行时先运行壳代码,壳再把真实代码解密到内存中执行。
常见加固厂商:360加固、腾讯乐固、梆梆加固、爱加密等。
- 脱壳:就是把内存中解密后的真实代码(DEX文件)提取出来,这样才能用jadx等工具反编译分析。
脱壳核心原理:不管怎么加密,最终ART虚拟机执行时,真实的DEX一定会在内存中完整存在。脱壳就是抓住这个时机,把内存里的DEX dump下来。
环境要求
1. 逆向工具安装
- 操作系统:Windows / macOS / Linux
- Python 3.7+(用于安装 Frida 工具链)
- Node.js(部分辅助工具需要)
- Java 环境(JRE 或 JDK 8+,用于运行 jadx 和查壳工具)
| 工具 | 用途 |
|---|---|
| AVD 模拟器(Android Studio 自带) | 运行目标 App |
| jadx | 反编译 DEX 为 Java 源码 |
| Frida | 动态 Hook 框架 |
| Magisk + MoveCertificate(Magisk 模块) | 模拟器 root + SSL 证书绕过 |
安装参考:
2. 查壳工具安装
除了用下面的工具,我们也可以通过其他特征自己初步判断
- 用MT管理器打开APK → 看classes.dex大小。如果只有几KB(几十KB),而App本身很大,基本就是加壳了。
- 解压APK,查看lib/目录下是否有类似libsecexe.so、libprotectClass.so等加固特征so文件。
作用:判断是否加壳、加壳厂商是哪个等
- 安装
bash
# 访问Github下载jar包,然后启动
# 或者可以通过以下百度网盘下载:https://pan.baidu.com/s/1rDfsEvqQwhUmep1UBLUwSQ?login_type=weixin&pwd=wefd&_at_=1777347481764
java -jar ApkScan-PKID.jar
| 加固厂商 | 特征(包名/so文件) |
|---|---|
| 360加固 | libjiagu.so, libprotectClass.so |
| 腾讯乐固 | libshell.so, tmsdk相关 |
| 梆梆加固 | libsecexe.so, libsecmain.so |
| 爱加密 | libexec.so, libexecmain.so |
| 阿里聚安全 | libsgmain.so, libsgsecuritybody.so |
- 使用:
bash
# 运行jar包
java -jar ApkScan-PKID.jar
# 将apk拖入页面即可
PS:也可以通过MT工具安装查询
介绍:MT管理器app是一款专为Android系统设计的全能文件管理与APK逆向神器,同时被誉为APK逆向修改神器。支持Dex反编译、脚本执行等多种功能。
下载:直接通过官网下载正式版即可:https://mt2.cn/download/
使用:MT-安装包提取-选择对应apk即可

3. 脱壳工具安装
脱壳的工具,市场上层出不穷,比如frida-dexdump、BlackDex、反射大师等等。我这里主要演示frida-dexdump,大家对其他工具感兴趣的可自行了解。
bash
# 安装工具
pip install frida-tools frida-dexdump
实战脱壳
脱壳与加壳也是在不断对抗和演化中,这里主要给大家讲简单入门的脱壳,让大家知道脱壳的流程是怎样的。
| 核心特征 | 脱壳思路 | 代表工具 | |
|---|---|---|---|
| 第一代:整体 DEX 加密 | 整体加密,落地加载 | 内存 dump 完整 DEX | frida-dexdump, BlackDex |
| 第二代:不落地加载 + 代码抽取 | 不落地加载 + 方法体抽取 | 主动调用触发解密 | FART, Youpk, frida_fart |
| 第三代:VMP(虚拟机保护) | 自定义虚拟机指令 | 分析解释器,手动还原 | VMPUnpacker等,一般无通用工具 |
环境安装
- 首先下载加固后的实验apk
下载地址:https://pan.baidu.com/s/15AZHXxFSUC-VMHSlu1vNZg?pwd=b9f4
下载后拖动以安装到目标Android手机
bash
# 如果发现手动安装失败,可通过下面命令安装
adb install --bypass-low-target-sdk-block /Users/ziyi/Downloads/腾讯加固样本.apk
- 拖入jadx中分析,尝试反编译出源码
可以看到反编译出基本看不到apk源码,只能看到"壳"代码。同时tencent StubShell也证明是由某讯提供的加固服务。

方式一:手动分析
"手动脱壳"主要借助 Xposed/LSPosed 模块(如反射大师)在运行时 dump 内存中的 dex。
反射大师直接从内存中"抓取"DEX,这种粗暴的复制可能会破坏DEX文件结构,最常见的问题就是让DEX文件的魔法头(文件头部)出现异常。因此脱出来的dex通常需要修复,然后再给jadx分析。
大致步骤为:
- 在已 Root 的手机中安装 LSPosed 框架,并激活 反射大师 模块。
- 打开目标 App,等待完全启动。
- 通过反射大师悬浮窗,找到当前 Activity,选择"dump dex"。
- 用MT管理器或其他工具对脱出的.dex文件执行"DEX修复"
- 将 修复的dex 文件复制到电脑,用 jadx 分析。
整体操作较为繁琐,此处不再演示。
方式二:工具一键脱壳
脱壳的工具,市场上层出不穷,比如frida-dexdump、BlackDex、反射大师等等。我这里主要演示frida-dexdump,大家对其他工具感兴趣的可自行了解。
首先手机已通过 USB 连接到电脑,并且开启了 USB 调试。
- Android手机打开需要脱壳的目标应用
- 启动Frida-server(如已打开则忽略)
bash
adb shell "su -c 'killall frida-server'"
adb shell "su -c '/data/local/tmp/fs &'"
- Frida查看应用名/PID等
bash
frida-ps -Ua

- 通过下面任意方式进行脱壳
bash
# 方式一:指定App的应用名称
frida-dexdump -U -n MyApp3
# 方式二:指定App的应用进程ID
frida-dexdump -U -p 4145
# 方式三:指定App的应用包名
frida-dexdump -U -f com.mycompany.myapp3

-
脱壳后会出现脱出的dex列表

-
将脱出的dex列表一起拖到jadx中分析即可
从下面可以看到StubShell这个壳就被我们脱掉了,Android程序的源码也被我们逆向出来了。

方式三:AI 辅助脱壳
目前已有一些基于大语言模型的自动化脱壳工具,例如:rev-dex-dumper(Claude Code 技能)
介绍 :连接已 Root 的 Android 设备后,只需对 AI 说"帮我脱壳",AI 就会自动完成环境检测、内存搜索、DEX 拉取等全流程,十几秒即可得到脱壳后的文件。
官方文档:https://github.com/P4nda0s/reverse-skills
- 大家对AI Skills/技能感兴趣的可以看看这篇文章:从零到一:理解并上线你的第一个Skill
1.安装:
bash
# 安装技能
npx skills add P4nda0s/reverse-skills
2.验证:在 Claude Code 中询问:"你能帮我脱壳吗?" 如果 AI 回应并提到 rev-dex-dumper,即表示安装成功
3.使用:
bash
帮我脱 com.xxx.targetapp 的壳