[App逆向]脱壳实战

[App逆向]脱壳实战

基础概念

  1. 加壳(加固):为了保护App代码不被轻易看懂,开发者会用"外壳"把真正的代码加密藏起来。运行时先运行壳代码,壳再把真实代码解密到内存中执行。

常见加固厂商:360加固、腾讯乐固、梆梆加固、爱加密等。

  1. 脱壳:就是把内存中解密后的真实代码(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 证书绕过

安装参考:

  1. [App逆向]环境搭建上篇------抓取apk https包_超级抓包apk-CSDN博客
  2. [App逆向]环境搭建下篇 --- --- 逆向源码+hook实战-CSDN博客

2. 查壳工具安装

除了用下面的工具,我们也可以通过其他特征自己初步判断

  • 用MT管理器打开APK → 看classes.dex大小。如果只有几KB(几十KB),而App本身很大,基本就是加壳了。
  • 解压APK,查看lib/目录下是否有类似libsecexe.so、libprotectClass.so等加固特征so文件。

作用:判断是否加壳、加壳厂商是哪个等

  1. 安装
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
  1. 使用:
bash 复制代码
# 运行jar包
java -jar ApkScan-PKID.jar

# 将apk拖入页面即可

PS:也可以通过MT工具安装查询

  1. 介绍:MT管理器app是一款专为Android系统设计的全能文件管理与APK逆向神器,同时被誉为APK逆向修改神器。支持Dex反编译、脚本执行等多种功能。

  2. 下载:直接通过官网下载正式版即可:https://mt2.cn/download/

  3. 使用: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等,一般无通用工具

环境安装

  1. 首先下载加固后的实验apk

下载地址:https://pan.baidu.com/s/15AZHXxFSUC-VMHSlu1vNZg?pwd=b9f4

下载后拖动以安装到目标Android手机

bash 复制代码
# 如果发现手动安装失败,可通过下面命令安装
adb install --bypass-low-target-sdk-block /Users/ziyi/Downloads/腾讯加固样本.apk
  1. 拖入jadx中分析,尝试反编译出源码

可以看到反编译出基本看不到apk源码,只能看到"壳"代码。同时tencent StubShell也证明是由某讯提供的加固服务。

方式一:手动分析

"手动脱壳"主要借助 Xposed/LSPosed 模块(如反射大师)在运行时 dump 内存中的 dex。

反射大师直接从内存中"抓取"DEX,这种粗暴的复制可能会破坏DEX文件结构,最常见的问题就是让DEX文件的魔法头(文件头部)出现异常。因此脱出来的dex通常需要修复,然后再给jadx分析。

大致步骤为:

  1. 在已 Root 的手机中安装 LSPosed 框架,并激活 反射大师 模块。
  2. 打开目标 App,等待完全启动。
  3. 通过反射大师悬浮窗,找到当前 Activity,选择"dump dex"。
  4. 用MT管理器或其他工具对脱出的.dex文件执行"DEX修复"
  5. 将 修复的dex 文件复制到电脑,用 jadx 分析。

整体操作较为繁琐,此处不再演示。

方式二:工具一键脱壳

脱壳的工具,市场上层出不穷,比如frida-dexdump、BlackDex、反射大师等等。我这里主要演示frida-dexdump,大家对其他工具感兴趣的可自行了解。

首先手机已通过 USB 连接到电脑,并且开启了 USB 调试。

  1. Android手机打开需要脱壳的目标应用
  2. 启动Frida-server(如已打开则忽略)
bash 复制代码
adb shell "su -c 'killall frida-server'"
adb shell "su -c '/data/local/tmp/fs &'"
  1. Frida查看应用名/PID等
bash 复制代码
frida-ps -Ua
  1. 通过下面任意方式进行脱壳
bash 复制代码
# 方式一:指定App的应用名称
frida-dexdump -U -n MyApp3

# 方式二:指定App的应用进程ID
frida-dexdump -U -p 4145

# 方式三:指定App的应用包名
frida-dexdump -U -f com.mycompany.myapp3
  1. 脱壳后会出现脱出的dex列表

  2. 将脱出的dex列表一起拖到jadx中分析即可

从下面可以看到StubShell这个壳就被我们脱掉了,Android程序的源码也被我们逆向出来了。

方式三:AI 辅助脱壳

目前已有一些基于大语言模型的自动化脱壳工具,例如:rev-dex-dumper(Claude Code 技能)

介绍 :连接已 Root 的 Android 设备后,只需对 AI 说"帮我脱壳",AI 就会自动完成环境检测、内存搜索、DEX 拉取等全流程,十几秒即可得到脱壳后的文件。
官方文档https://github.com/P4nda0s/reverse-skills

1.安装:

bash 复制代码
# 安装技能
npx skills add P4nda0s/reverse-skills

2.验证:在 Claude Code 中询问:"你能帮我脱壳吗?" 如果 AI 回应并提到 rev-dex-dumper,即表示安装成功

3.使用:

bash 复制代码
帮我脱 com.xxx.targetapp 的壳
相关推荐
木易 士心1 小时前
别再只会用 drawCircle 了!一文搞懂 Android Canvas 底层机制
android
AtOR CUES2 小时前
MySQL——表操作及查询
android·mysql·adb
怣疯knight4 小时前
安卓App无法增加自定义图片作为图标功能
android
jinanwuhuaguo5 小时前
OpenClaw联邦之心——从孤岛记忆到硅基集体潜意识的拓扑学革命(第二十三篇)
android·人工智能·kotlin·拓扑学·openclaw
Gary Studio7 小时前
安卓HAL C++基础-命名域
android
诸神黄昏EX7 小时前
Android Google XTS
android
eSsO KERF7 小时前
MySQL Workbench菜单汉化为中文
android·数据库·mysql
其实防守也摸鱼9 小时前
CSDN博客写什么?从0到1打造你的技术影响力
笔记·测试用例·博客·教程·ai写作·ai辅助·高质量
pengyu10 小时前
【Kotlin 协程修仙录 · 筑基境 · 后阶】 | 调度器的艺术:Dispatchers 四大护法与 withContext 性能密码
android·kotlin