附录B:工具与资源

5 阅读7分钟

附录B:工具与资源

声明:本文中的公司名称、包名、API地址、密钥等均已脱敏处理,使用虚构名称替代。本文仅用于安全研究和技术教学目的。


目录

  1. 逆向分析工具
  2. 动态调试工具
  3. 模拟执行工具
  4. 网络分析工具
  5. 开发环境
  6. 学习资源
  7. 社区与论坛

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 IDEAJava开发Unidbg项目开发
Android StudioAndroid开发APK分析、调试
VS Code多语言脚本编写、轻量编辑
PyCharmPython开发Frida脚本开发

6. 学习资源

6.1 书籍推荐

书名作者说明
《Android软件安全与逆向分析》丰生强Android逆向入门经典
《Android安全攻防权威指南》Joshua J. Drake等系统安全深度分析
《加密与解密》段钢逆向工程经典教材
《IDA Pro权威指南》Chris EagleIDA使用详解
《逆向工程核心原理》李承远逆向基础知识

6.2 在线课程

平台课程说明
看雪学院Android安全系列国内顶级安全社区
吾爱破解逆向入门教程实战案例丰富
UdemyAndroid Hacking英文课程
Coursera软件安全学术背景

6.3 技术博客

博客地址说明
看雪论坛bbs.kanxue.com/国内最大安全社区
吾爱破解www.52pojie.cn/逆向技术交流
FreeBufwww.freebuf.com/安全资讯
安全客www.anquanke.com/安全技术文章

6.4 GitHub项目

项目地址说明
Unidbggithub.com/zhkl0228/unidbgNative模拟执行
Fridagithub.com/frida/frida动态插桩框架
jadxgithub.com/skylot/jadxDEX反编译
Ghidragithub.com/NationalSecurityAgency/ghidra逆向工程框架
r2fridagithub.com/nowsecure/r2fridaradare2+Frida

7. 社区与论坛

7.1 国内社区

社区特点推荐指数
看雪论坛技术深度高、大牛云集⭐⭐⭐⭐⭐
吾爱破解资源丰富、入门友好⭐⭐⭐⭐⭐
安全客技术文章、漏洞分析⭐⭐⭐⭐
FreeBuf安全资讯、技术分享⭐⭐⭐⭐
V2EX技术讨论、问答⭐⭐⭐

7.2 国际社区

社区特点推荐指数
XDA DevelopersAndroid开发、ROM⭐⭐⭐⭐⭐
Reddit r/ReverseEngineering逆向技术讨论⭐⭐⭐⭐
Stack Overflow技术问答⭐⭐⭐⭐
Hack Forums安全技术交流⭐⭐⭐

7.3 CTF平台

平台地址说明
CTFtimectftime.orgCTF赛事汇总
攻防世界adworld.xctf.org.cn国内CTF平台
Hack The Boxhackthebox.com渗透测试练习
PicoCTFpicoctf.org入门级CTF

工具选择建议

初学者路线

  1. 静态分析:jadx + apktool
  2. 动态调试:Frida + objection
  3. 抓包工具:Charles或mitmproxy
  4. 学习资源:看雪论坛 + 吾爱破解

进阶路线

  1. 静态分析:IDA Pro或Ghidra
  2. 动态调试:Frida + 自定义脚本
  3. 模拟执行:Unidbg
  4. 深入学习:ARM汇编、Android系统原理

专业路线

  1. 全套工具:IDA Pro + Ghidra + JEB
  2. 自动化:自研工具、脚本框架
  3. 研究方向:漏洞挖掘、安全防护
  4. 持续学习:论文阅读、会议参与

法律声明

使用本文提到的工具进行安全研究时,请务必:

  1. 获得授权:只对自己拥有或获得授权的应用进行分析
  2. 遵守法律:不进行任何违法活动
  3. 负责任披露:发现漏洞时遵循负责任披露原则
  4. 尊重版权:不传播破解软件或绕过付费机制