工欲善其事,必先利其器。在正式动手之前,先把工具链和整体思路搭清楚。
一、什么是安卓逆向?
安卓逆向工程,是指在没有源代码的情况下,通过分析 APK 文件、内存数据、网络流量等,还原 App 的业务逻辑、通信协议、加密算法的过程。
合法使用场景:
安全研究与漏洞挖掘(授权范围内)
恶意软件分析
CTF 竞赛
自有 App 的安全自检
兼容性与互操作性研究
⚠️ 法律红线: 对未授权的 App 进行逆向分析可能违反《网络安全法》及相关软件许可协议,本系列内容仅供授权安全研究使用。
二、逆向的三大场景
| 场景 | 目标 | 核心技术 |
|---|
| 安全漏洞挖掘 | 找到认证绕过、数据泄露等漏洞 | 静态分析 + 动态 Hook |
| 协议还原 | 分析加密通信协议,复现 API | 抓包 + 签名算法逆向 |
| 恶意样本分析 | 理解恶意代码行为 | 沙盒动态分析 + 反混淆 |
三、完整工具链
静态分析工具
| 工具 | 用途 | 获取方式 |
|---|
| jadx | APK 反编译为 Java,最常用 | github.com/skylot/jadx |
| apktool | 解包/重打包 APK,查看 smali | apktool.org |
| dex2jar | DEX 转 JAR,配合 JD-GUI | github.com/pxb1988/dex2jar |
| APKiD | 识别加固/混淆类型 | pip install apkid |
| JEB Pro | 商业级反编译,支持 Native | pnfsoftware.com |
动态分析工具
| 工具 | 用途 | 获取方式 |
|---|
| Frida | 动态 Hook,最核心工具 | frida.re |
| Objection | 基于 Frida 的自动化框架 | pip install objection |
| LSPosed | Xposed 现代实现,模块化 Hook | github.com/LSPosed |
| Android Studio | 官方 IDE,调试器 | developer.android.com |
| GDB / LLDB | Native 层调试 | 随 NDK 附带 |
抓包工具
| 工具 | 特点 | 适用场景 |
|---|
| Burp Suite | 功能最全,支持改包重放 | HTTPS 协议分析 |
| Charles | 界面友好,macOS 首选 | 快速抓包查看 |
| mitmproxy | 命令行,可编程 | 自动化改包 |
| r0capture | 基于 Frida,绕过 SSL Pinning | 证书固定的 App |
| Wireshark | 底层网络分析 | 非 HTTP 协议 |
环境基础
| 组件 | 版本要求 | 用途 |
|---|
| JDK | ≥ 11 | 运行 jadx / apktool |
| Python | ≥ 3.8 | 运行 Frida 脚本 |
| ADB | 最新版 | 与手机通信 |
| Root 权限 | Magisk ≥ 25 | 运行 frida-server |
| Android 手机 | Android 8-14 | 测试设备 |
四、环境搭建步骤
1. 安装 JDK
# macOSbrew install openjdk@17# Ubuntu/Debiansudo apt install openjdk-17-jdk# Windows:下载 Adoptium JDK 安装包
2. 安装 jadx
# 下载最新 release# https://github.com/skylot/jadx/releases# 解压后运行:./jadx-gui # 图形界面./jadx # 命令行
3. 安装 Frida
pip install frida-tools objection# 验证安装frida --version
4. 手机端配置 frida-server
# 查看手机架构adb shell getprop ro.product.cpu.abi# 输出:arm64-v8a# 下载对应版本 frida-server# https://github.com/frida/frida/releases# 推送并启动adb push frida-server /data/local/tmp/adb shell "chmod 755 /data/local/tmp/frida-server"adb shell "/data/local/tmp/frida-server &"# 验证连接frida-ps -U
5. 安装 ADB
# macOSbrew install android-platform-tools# Ubuntusudo apt install adb# 验证adb devices
五、逆向整体流程(5步)
① 获取 APK → ② 识别加固 → ③ 静态分析 → ④ 动态 Hook → ⑤ 还原逻辑
① 获取 APK
② 识别加固类型
apkid target.apk# 输出:360加固 / 腾讯乐固 / 未加固
③ 静态分析
④ 动态 Hook
Frida 挂载进程,实时打印函数参数
验证静态分析的推断
⑤ 还原逻辑
六、常见误区
| 误区 | 真相 |
|---|
| 混淆就无法逆向 | 混淆增加难度,但动态 Hook 可直接拿到运行时数据 |
| 无 Root 无法分析 | BlackDex / gadget 模式可免 Root |
| Native 层看不懂汇编 | Frida 可以不懂汇编直接 Hook 导出函数 |
| VPN 就能抓到所有包 | SSL Pinning 会拦截非信任证书 |
七、本系列导航
| 篇号 | 主题 |
|---|
| 01 | 工具链与整体流程(本篇) |
| 02 | jadx 实战:反混淆与代码阅读 |
| 03 | Frida 从零搭建到第一个 Hook |
| 04 | Frida Java 层 Hook 实战 |
| 05 | Frida Native 层 Hook 实战 |
| 06 | 砸壳全攻略 |
| 07 | SSL Pinning 绕过与抓包 |
| 08 | 加密算法逆向与签名还原 |
| 09 | Frida 反检测与对抗 |
| 10 | 实战综合:某 App 全流程逆向 |
本系列持续更新,仅供安全研究与授权测试使用。