[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 的壳
相关推荐
晓梦林11 小时前
cp520靶场学习笔记
android·笔记·学习
有味道的男人13 小时前
Open Claw对接1688平台
android·rxjava
_李小白14 小时前
【android opencv学习笔记】Day 17: 目标追踪(MeanShift)
android·opencv·学习
用户860225046747215 小时前
AI 分析头部APP系统优化框架
android
用户860225046747215 小时前
AI分析头部APP优化框架
android
浩浩测试一下16 小时前
汇编 标志位寄存器 (逆向分析 )
c语言·汇编·逆向·windows编程·标志寄存器
浩浩测试一下17 小时前
汇编 数组与串指令(逆向分析)
汇编·逆向·二进制·免杀·串指令·汇编数组
2501_9160074718 小时前
iOS开发中抓取HTTPS请求的完整解决方法与步骤详解
android·网络协议·ios·小程序·https·uni-app·iphone
程序00719 小时前
.NET玩转爬虫 遇到反爬 jsl cookie
逆向
lvronglee20 小时前
【数字图传第四步】Android App查看图传视频
android·音视频