Android 代码逆向
逆向工具分析
在 Ubuntu 上有不少不错的软件/工具可以用来 反编译 ANDROID APK 并阅读反编译后的代码。具体优缺点如下
✅ 推荐工具
| 工具 | 功能 | 优点 | 缺点 |
|---|---|---|---|
| JADX(含 jadx-gui) | 将 APK/DEX 反编译成 Java 源 + 支持 GUI 浏览 | 界面友好、支持全文搜索、跳转、代码高亮。很多逆向教程推荐。 CSDN博主+1 | 对于混淆严重/内联严重的代码,反编译可能不完全;大包反编译时间会较长。 |
| Apktool | 解包 APK,生成 smali 代码、资源、清单;适合深入修改或查看 smali/资源层级 | 支持资源还原、smali 级别查看,逆向者常用。 apktool.org+1 | 主要输出 smali,不是直接 Java;阅读体验稍差一些。 |
| JD‑GUI | 用于查看 jar 包(dex2jar 转换后)里面的 Java 源 | 操作简单、直观,是经典的 Java 源查看工具。 cnblogs.com+1 | 先需要做 dex2jar 转换,流程稍多;对于最新 Android 特性可能支持弱。 |
| JEB | 商业级反编译工具,支持 Dalvik/native 等更多类型 | 功能强大、交互性好。 维基百科 | 收费/授权限制;如果只做简单查看可能“过重”。 |
🔧 如何安装与快速使用(Ubuntu 环境)
安装示例
-
# 假设你下载了 release 包 wget https://github.com/skylot/jadx/releases/download/v<version>/jadx-<version>.zip unzip jadx-<version>.zip -d ~/tools/jadx export PATH=~/tools/jadx/bin:$PATH -
安装 Apktool:
sudo apt update sudo apt install -y apktool
快速使用流程(阅读反编译代码):
-
用 JADX:
jadx -d out_jadx path/to/app.apk然后打开
out_jadx目录,用你喜欢的编辑器/IDE 阅读,或使用jadx-gui path/to/app.apk直接图形浏览。GUI界面如图,支持类间跳转还是很好用的

-
如果没有找到你要的方法或者代码被混淆严重,用 Apktool:
apktool d -f path/to/app.apk -o out_apktool然后在
out_apktool/smali/...目录查找.smali文件。
JADX反编译常见问题
一、环境配置类问题:启动失败与依赖缺失
1.1 “Java版本过低”错误
症状:启动jadx-gui时弹出UnsupportedClassVersionError,或命令行执行jadx提示”requires Java 11+”。 解决方案:
检查当前Java版本:
java -version- 安装Java 11+(推荐Adoptium Temurin),配置环境变量后重启终端。
- 验证安装:java -version输出应包含”11.0”或更高版本号。
1.2 图形界面无法启动(Linux/macOS)
症状:命令行执行jadx-gui无反应,或报”无法初始化GTK”错误。 解决方案:
安装图形界面依赖:
# Ubuntu/Debian
sudo apt install libxrender1 libxtst6 libxi6
# Fedora/RHEL
sudo dnf install libXrender libXtst libXi使用纯命令行模式反编译:
jadx -d output_dir app.apk二、反编译效果类问题:代码可读性优化 2.1 变量名混乱(如a/b/c/d) 症状:反编译后的代码充斥var1、f$0等无意义名称,难以理解逻辑。 解决方案:启用高级反混淆功能
在GUI中打开设置(File > Preferences)
勾选以下选项:
Deobfuscation > 启用"Activate deobfuscation"
Rename options > 设置"Minimum name length"为3
Kotlin metadata > 勾选"Rename function arguments"
命令行参数示例:
jadx --deobf --deobf-min 3 --use-kotlin-methods-for-var-names apply app.apk文档参考
https://blog.csdn.net/gitblog_09467/article/details/151561643