附录B:工具与资源
声明:本文中的公司名称、包名、API地址、密钥等均已脱敏处理,使用虚构名称替代。本文仅用于安全研究和技术教学目的。
目录
1. 逆向分析工具
1.1 APK反编译工具
apktool
APK反编译和重打包的标准工具。
| 属性 | 说明 |
|---|---|
| 官网 | ibotpeaches.github.io/Apktool/ |
| 功能 | 反编译APK、提取资源、重打包 |
| 输出 | smali代码、资源文件、AndroidManifest.xml |
# 安装
brew install apktool # macOS
apt install apktool # Ubuntu
# 反编译
apktool d app.apk -o output_dir
# 重打包
apktool b output_dir -o new_app.apk
jadx
将DEX/APK反编译为Java源码的工具。
| 属性 | 说明 |
|---|---|
| 官网 | github.com/skylot/jadx |
| 功能 | DEX转Java、GUI界面、搜索功能 |
| 优点 | 代码可读性好、支持导出Gradle项目 |
# 安装
brew install jadx # macOS
# 命令行使用
jadx -d output_dir app.apk
# GUI界面
jadx-gui app.apk
JEB Decompiler
商业级Android逆向工具。
| 属性 | 说明 |
|---|---|
| 官网 | www.pnfsoftware.com/ |
| 功能 | 高级反编译、动态调试、脚本支持 |
| 价格 | 商业授权,有试用版 |
| 优点 | 反混淆能力强、支持Native分析 |
1.2 Native层分析工具
IDA Pro
业界标准的二进制分析工具。
| 属性 | 说明 |
|---|---|
| 官网 | hex-rays.com/ida-pro/ |
| 功能 | 反汇编、反编译、调试 |
| 支持 | ARM、ARM64、x86、x64等 |
| 价格 | 商业授权,有免费版(IDA Free) |
常用快捷键:
- G: 跳转到地址
- N: 重命名
- X: 交叉引用
- F5: 反编译(需要Hex-Rays插件)
- Tab: 切换汇编/伪代码视图
Ghidra
NSA开源的逆向工程框架。
| 属性 | 说明 |
|---|---|
| 官网 | ghidra-sre.org/ |
| 功能 | 反汇编、反编译、脚本支持 |
| 优点 | 免费开源、功能强大 |
| 缺点 | 界面相对复杂 |
# 安装(需要JDK 11+)
# 下载后解压即可使用
./ghidraRun
Hopper Disassembler
macOS/Linux平台的反汇编工具。
| 属性 | 说明 |
|---|---|
| 官网 | www.hopperapp.com/ |
| 功能 | 反汇编、反编译、脚本 |
| 优点 | 界面友好、价格适中 |
1.3 辅助分析工具
dex2jar
将DEX转换为JAR的工具。
# 安装
brew install dex2jar
# 使用
d2j-dex2jar app.apk -o app.jar
smali/baksmali
smali汇编/反汇编工具。
# 反汇编
baksmali d classes.dex -o smali_output
# 汇编
smali a smali_output -o classes.dex
objection
基于Frida的运行时探索工具。
# 安装
pip install objection
# 使用
objection -g com.dreamworld.app explore
2. 动态调试工具
2.1 Frida
动态插桩框架,支持多平台。
| 属性 | 说明 |
|---|---|
| 官网 | frida.re/ |
| 功能 | Hook、追踪、修改运行时行为 |
| 语言 | JavaScript/Python |
# 安装
pip install frida-tools
# 基本使用
frida -U -f com.dreamworld.app -l hook.js
# 列出进程
frida-ps -U
常用Hook脚本示例:
// hook_example.js
Java.perform(function() {
// Hook Java方法
var MainActivity = Java.use("com.dreamworld.app.MainActivity");
MainActivity.onCreate.implementation = function(bundle) {
console.log("onCreate called");
this.onCreate(bundle);
};
// Hook Native函数
var libSecurity = Module.findBaseAddress("libSecurityCore.so");
Interceptor.attach(libSecurity.add(0x1234), {
onEnter: function(args) {
console.log("Native function called");
},
onLeave: function(retval) {
console.log("Return value: " + retval);
}
});
});
2.2 Xposed Framework
Android系统级Hook框架。
| 属性 | 说明 |
|---|---|
| 官网 | repo.xposed.info/ |
| 功能 | 系统级Hook、模块化 |
| 要求 | 需要Root权限 |
| 替代 | LSPosed (Android 8.0+) |
// Xposed模块示例
public class HookModule implements IXposedHookLoadPackage {
@Override
public void handleLoadPackage(LoadPackageParam lpparam) {
if (!lpparam.packageName.equals("com.dreamworld.app")) {
return;
}
XposedHelpers.findAndHookMethod(
"com.dreamworld.security.SecurityCore",
lpparam.classLoader,
"generateSignature",
String.class, long.class, String.class,
new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) {
XposedBridge.log("generateSignature called");
}
}
);
}
}
2.3 Android Studio调试
使用Android Studio进行应用调试。
调试步骤:
1. 开启USB调试
2. 使用可调试版本APK或修改AndroidManifest.xml
3. Android Studio -> Attach Debugger to Android Process
4. 设置断点进行调试
2.4 LLDB/GDB
Native层调试器。
# 使用LLDB调试
lldb
(lldb) platform select remote-android
(lldb) platform connect connect://localhost:5039
(lldb) attach -p <pid>
# 设置断点
(lldb) b 0x12345678
(lldb) c
3. 模拟执行工具
3.1 Unidbg
轻量级Android Native模拟执行框架。
| 属性 | 说明 |
|---|---|
| 官网 | github.com/zhkl0228/un… |
| 功能 | 模拟执行ARM/ARM64代码 |
| 优点 | 无需真机、可脱离Android环境 |
| 语言 | Java |
<!-- Maven依赖 -->
<dependency>
<groupId>com.github.zhkl0228</groupId>
<artifactId>unidbg-android</artifactId>
<version>0.9.7</version>
</dependency>
// 基本使用
AndroidEmulator emulator = AndroidEmulatorBuilder
.for64Bit()
.setProcessName("com.dreamworld.app")
.build();
Memory memory = emulator.getMemory();
memory.setLibraryResolver(new AndroidResolver(23));
VM vm = emulator.createDalvikVM(new File("app.apk"));
vm.setJni(this);
vm.setVerbose(true);
DalvikModule dm = vm.loadLibrary(new File("libSecurityCore.so"), false);
dm.callJNI_OnLoad(emulator);
3.2 Unicorn Engine
轻量级CPU模拟器框架。
| 属性 | 说明 |
|---|---|
| 官网 | www.unicorn-engine.org/ |
| 功能 | 纯CPU模拟、多架构支持 |
| 语言 | C/Python/Java等 |
# Python示例
from unicorn import *
from unicorn.arm64_const import *
# 初始化模拟器
mu = Uc(UC_ARCH_ARM64, UC_MODE_ARM)
# 映射内存
mu.mem_map(0x10000, 0x10000)
# 写入代码
mu.mem_write(0x10000, code)
# 执行
mu.emu_start(0x10000, 0x10000 + len(code))
3.3 QEMU
全系统模拟器。
# 运行Android模拟器
qemu-system-aarch64 \
-machine virt \
-cpu cortex-a57 \
-m 2048 \
-kernel Image \
-append "console=ttyAMA0" \
-nographic
4. 网络分析工具
4.1 抓包工具
Charles Proxy
跨平台HTTP代理工具。
| 属性 | 说明 |
|---|---|
| 官网 | www.charlesproxy.com/ |
| 功能 | HTTP/HTTPS抓包、修改请求 |
| 价格 | 商业软件,有试用期 |
mitmproxy
开源的交互式HTTPS代理。
# 安装
pip install mitmproxy
# 启动
mitmproxy -p 8080
# 脚本模式
mitmdump -s script.py
# mitmproxy脚本示例
def request(flow):
if "dreamworld.com" in flow.request.host:
print(f"Request: {flow.request.url}")
print(f"Headers: {flow.request.headers}")
def response(flow):
if "dreamworld.com" in flow.request.host:
print(f"Response: {flow.response.status_code}")
Wireshark
网络协议分析器。
# 安装
brew install wireshark # macOS
apt install wireshark # Ubuntu
# 过滤器示例
http.host contains "dreamworld"
tcp.port == 443
4.2 SSL Pinning绕过
Frida脚本
// ssl_pinning_bypass.js
Java.perform(function() {
// 绕过OkHttp3
try {
var CertificatePinner = Java.use('okhttp3.CertificatePinner');
CertificatePinner.check.overload('java.lang.String', 'java.util.List')
.implementation = function(hostname, peerCertificates) {
console.log('[+] OkHttp3 SSL Pinning bypassed for: ' + hostname);
};
} catch (e) {}
// 绕过TrustManager
try {
var TrustManagerImpl = Java.use('com.android.org.conscrypt.TrustManagerImpl');
TrustManagerImpl.verifyChain.implementation = function() {
console.log('[+] TrustManager bypassed');
return arguments[0];
};
} catch (e) {}
});
objection自动绕过
objection -g com.dreamworld.app explore
# 在objection中执行
android sslpinning disable
5. 开发环境
5.1 Java开发环境
# JDK安装
brew install openjdk@11
# Maven安装
brew install maven
# 环境变量
export JAVA_HOME=/usr/local/opt/openjdk@11
export PATH=$JAVA_HOME/bin:$PATH
5.2 Python开发环境
# Python安装
brew install python@3.11
# 虚拟环境
python -m venv venv
source venv/bin/activate
# 常用包
pip install frida-tools
pip install mitmproxy
pip install requests
pip install pycryptodome
5.3 Android开发环境
# Android SDK
# 下载Android Studio或单独安装SDK
# 环境变量
export ANDROID_HOME=$HOME/Library/Android/sdk
export PATH=$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$PATH
# ADB常用命令
adb devices # 列出设备
adb shell # 进入shell
adb push local remote # 上传文件
adb pull remote local # 下载文件
adb logcat # 查看日志
adb install app.apk # 安装应用
5.4 IDE推荐
| IDE | 用途 | 说明 |
|---|---|---|
| IntelliJ IDEA | Java开发 | Unidbg项目开发 |
| Android Studio | Android开发 | APK分析、调试 |
| VS Code | 多语言 | 脚本编写、轻量编辑 |
| PyCharm | Python开发 | Frida脚本开发 |
6. 学习资源
6.1 书籍推荐
| 书名 | 作者 | 说明 |
|---|---|---|
| 《Android软件安全与逆向分析》 | 丰生强 | Android逆向入门经典 |
| 《Android安全攻防权威指南》 | Joshua J. Drake等 | 系统安全深度分析 |
| 《加密与解密》 | 段钢 | 逆向工程经典教材 |
| 《IDA Pro权威指南》 | Chris Eagle | IDA使用详解 |
| 《逆向工程核心原理》 | 李承远 | 逆向基础知识 |
6.2 在线课程
| 平台 | 课程 | 说明 |
|---|---|---|
| 看雪学院 | Android安全系列 | 国内顶级安全社区 |
| 吾爱破解 | 逆向入门教程 | 实战案例丰富 |
| Udemy | Android Hacking | 英文课程 |
| Coursera | 软件安全 | 学术背景 |
6.3 技术博客
| 博客 | 地址 | 说明 |
|---|---|---|
| 看雪论坛 | bbs.kanxue.com/ | 国内最大安全社区 |
| 吾爱破解 | www.52pojie.cn/ | 逆向技术交流 |
| FreeBuf | www.freebuf.com/ | 安全资讯 |
| 安全客 | www.anquanke.com/ | 安全技术文章 |
6.4 GitHub项目
| 项目 | 地址 | 说明 |
|---|---|---|
| Unidbg | github.com/zhkl0228/unidbg | Native模拟执行 |
| Frida | github.com/frida/frida | 动态插桩框架 |
| jadx | github.com/skylot/jadx | DEX反编译 |
| Ghidra | github.com/NationalSecurityAgency/ghidra | 逆向工程框架 |
| r2frida | github.com/nowsecure/r2frida | radare2+Frida |
7. 社区与论坛
7.1 国内社区
| 社区 | 特点 | 推荐指数 |
|---|---|---|
| 看雪论坛 | 技术深度高、大牛云集 | ⭐⭐⭐⭐⭐ |
| 吾爱破解 | 资源丰富、入门友好 | ⭐⭐⭐⭐⭐ |
| 安全客 | 技术文章、漏洞分析 | ⭐⭐⭐⭐ |
| FreeBuf | 安全资讯、技术分享 | ⭐⭐⭐⭐ |
| V2EX | 技术讨论、问答 | ⭐⭐⭐ |
7.2 国际社区
| 社区 | 特点 | 推荐指数 |
|---|---|---|
| XDA Developers | Android开发、ROM | ⭐⭐⭐⭐⭐ |
| Reddit r/ReverseEngineering | 逆向技术讨论 | ⭐⭐⭐⭐ |
| Stack Overflow | 技术问答 | ⭐⭐⭐⭐ |
| Hack Forums | 安全技术交流 | ⭐⭐⭐ |
7.3 CTF平台
| 平台 | 地址 | 说明 |
|---|---|---|
| CTFtime | ctftime.org | CTF赛事汇总 |
| 攻防世界 | adworld.xctf.org.cn | 国内CTF平台 |
| Hack The Box | hackthebox.com | 渗透测试练习 |
| PicoCTF | picoctf.org | 入门级CTF |
工具选择建议
初学者路线
- 静态分析:jadx + apktool
- 动态调试:Frida + objection
- 抓包工具:Charles或mitmproxy
- 学习资源:看雪论坛 + 吾爱破解
进阶路线
- 静态分析:IDA Pro或Ghidra
- 动态调试:Frida + 自定义脚本
- 模拟执行:Unidbg
- 深入学习:ARM汇编、Android系统原理
专业路线
- 全套工具:IDA Pro + Ghidra + JEB
- 自动化:自研工具、脚本框架
- 研究方向:漏洞挖掘、安全防护
- 持续学习:论文阅读、会议参与
法律声明
使用本文提到的工具进行安全研究时,请务必:
- 获得授权:只对自己拥有或获得授权的应用进行分析
- 遵守法律:不进行任何违法活动
- 负责任披露:发现漏洞时遵循负责任披露原则
- 尊重版权:不传播破解软件或绕过付费机制