[App逆向]脱壳实战
基础概念
加壳(加固):为了保护App代码不被轻易看懂,开发者会用“外壳”把真正的代码加密藏起来。运行时先运行壳代码,壳再把真实代码解密到内存中执行。
常见加固厂商:360加固、腾讯乐固、梆梆加固、爱加密等。
脱壳:就是把内存中解密后的真实代码(DEX文件)提取出来,这样才能用jadx等工具反编译分析。
脱壳核心原理:不管怎么加密,最终ART虚拟机执行时,真实的DEX一定会在内存中完整存在。脱壳就是抓住这个时机,把内存里的DEX dump下来。
环境要求
1. 逆向工具安装
操作系统:Windows / macOS / Linux Python 3.7+(用于安装 Frida 工具链) Node.js(部分辅助工具需要) Java 环境(JRE 或 JDK 8+,用于运行 jadx 和查壳工具)
安装参考:
[App逆向]环境搭建上篇——抓取apk https包:https://mp.weixin.qq.com/s/5lPVkF3jNc3hK6KFl1qR1w [App逆向]环境搭建下篇 — — 逆向源码+hook实战:https://mp.weixin.qq.com/s/uW8qivcHCfSSFJYyHJlT-g
2. 查壳工具安装
除了用下面的工具,我们也可以通过其他特征自己初步判断
用MT管理器打开APK → 看classes.dex大小。如果只有几KB(几十KB),而App本身很大,基本就是加壳了。 解压APK,查看lib/目录下是否有类似libsecexe.so、libprotectClass.so等加固特征so文件。
作用:判断是否加壳、加壳厂商是哪个等
安装
# 访问Github下载jar包,然后启动# 或者可以通过以下百度网盘下载:https://pan.baidu.com/s/1rDfsEvqQwhUmep1UBLUwSQ?login_type=weixin&pwd=wefd&_at_=1777347481764java -jar ApkScan-PKID.jar
使用:
# 运行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,大家对其他工具感兴趣的可自行了解。
# 安装工具pip install frida-tools frida-dexdump
实战脱壳
脱壳与加壳也是在不断对抗和演化中,这里主要给大家讲简单入门的脱壳,让大家知道脱壳的流程是怎样的。
环境安装
首先下载加固后的实验apk
下载地址:https://pan.baidu.com/s/15AZHXxFSUC-VMHSlu1vNZg?pwd=b9f4 下载后拖动以安装到目标Android手机
# 如果发现手动安装失败,可通过下面命令安装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(如已打开则忽略)
adb shell "su -c 'killall frida-server'"adb shell "su -c '/data/local/tmp/fs &'"
Frida查看应用名/PID等
frida-ps -Ua
4. 通过下面任意方式进行脱壳
# 方式一:指定App的应用名称frida-dexdump -U -n MyApp3# 方式二:指定App的应用进程IDfrida-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.安装:
# 安装技能npx skills add P4nda0s/reverse-skills
2.验证:在 Claude Code 中询问:“你能帮我脱壳吗?” 如果 AI 回应并提到 rev-dex-dumper,即表示安装成功
3.使用:
帮我脱 com.xxx.targetapp 的壳
夜雨聆风