一、Android 基础结构(逆向的地基)

1️⃣ APK 本质结构(必须非常熟)

APK
├── AndroidManifest.xml
├── classes.dex / classes2.dex ...
├── lib/armeabi-v7a/*.so
├── lib/arm64-v8a/*.so
├── assets/
├── res/
├── META-INF/

逆向重点:

  • classes.dex → Java / Kotlin 逻辑

  • .so → C / C++ / JNI(核心算法、校验、加密)

  • assets → 加密配置、模型、证书、脚本


2️⃣ AndroidManifest.xml(逆向入口)

重点字段:

  • package

  • application

  • activity / service / receiver / provider

  • android:debuggable

  • uses-permission

逆向用途:

  • 入口 Activity

  • 隐藏组件

  • 判断是否 防调试


二、Java / Kotlin 层逆向(DEX)

3️⃣ Dalvik / ART 基础

  • .dex ≠ JVM bytecode

  • Dalvik 是 寄存器型 VM

  • Smali 是 DEX 的“汇编”

常见指令:

invoke-virtual
invoke-static
iget / iput
sget / sput
move-result

👉 你要能 Smali ⇄ Java 脑补互转


4️⃣ Java 逆向常见点

重点分析内容:

  • 登录 / token 生成

  • 参数加密

  • 设备指纹

  • 风控逻辑

  • 请求签名

常见函数:

  • MessageDigest

  • Cipher

  • Mac

  • Base64

  • System.currentTimeMillis

  • Build.MODEL / ANDROID_ID


5️⃣ Kotlin 特有逆向点(非常常见)

你会看到:

  • Intrinsics.checkNotNull

  • Companion

  • when(→ switch)

  • lambda → 匿名类

  • 协程(SuspendLambda

👉 Kotlin 反编译 比 Java 更啰嗦,但逻辑一样


三、JNI / Native 层逆向(核心价值)

6️⃣ JNI 基础(必会)

Java 调用:

native int check(String s);

JNI 函数名:

Java_com_xxx_xxx_check

动态注册

RegisterNatives

逆向重点:

  • JNI_OnLoad

  • RegisterNatives

  • Java 方法 ↔ native 函数映射


7️⃣ ARM / ARM64 汇编(安卓核心)

ARM64 常见寄存器

  • x0–x7:函数参数

  • x0:返回值

  • sp / fp / lr

常见指令

  • ldr / str

  • bl

  • cmp / b.eq / b.ne

  • eor(xor)

  • lsl / lsr / ror

👉 参数传递 = x0–x7


8️⃣ so 文件常见逻辑

  • 签名校验

  • 加密算法

  • 反调试

  • root 检测

  • 模拟器检测

常见特征:

  • 魔数表

  • 位运算

  • 循环混淆

  • switch / jump table


四、Hook / 动态分析(安卓逆向核心能力)

9️⃣ Frida(必学)

你会 90% 时间用它。

常用 Hook:

  • Java 方法

  • JNI 函数

  • libc 函数

  • 网络函数

例:

Java.perform(function () {
  var A = Java.use("com.xxx.A");
  A.check.implementation = function (s) {
    console.log(s);
    return this.check(s);
  };
});

🔟 Xposed / LSPosed

  • 系统级 Hook

  • 对抗 Frida 检测

  • Hook Framework 层

用途:

  • 改系统返回值

  • 绕过 root / 模拟器检测

  • Hook PackageManager


五、反调试 / 反 Hook(你必须识别)

11️⃣ Java 层反调试

  • Debug.isDebuggerConnected

  • ptrace

  • Thread.sleep + 时间校验

  • Frida 端口扫描


12️⃣ Native 层反调试

  • ptrace(PTRACE_TRACEME)

  • /proc/self/status

  • TracerPid

  • sigaction

  • inline hook 检测

👉 反调试代码 = 重点突破点


13️⃣ 反 Frida

常见检测:

  • frida-server

  • gum-js-loop

  • libfrida-gadget.so

  • maps 扫描

绕过:

  • 名称混淆

  • inline hook

  • Zygisk + Magisk


六、网络与协议逆向(非常高频)

14️⃣ HTTPS 抓包 & SSL Pinning

  • 证书锁定

  • TrustManager 校验

  • OkHttp / Retrofit

绕过方式:

  • Hook checkServerTrusted

  • Hook SSLSocketFactory

  • Xposed 模块


15️⃣ 请求签名逆向

典型流程:

参数 → 排序 → 拼接 → hash → base64

特征:

  • 时间戳

  • nonce

  • deviceId

  • app version

👉 签名 = Java + so 联合实现


七、资源 / 数据 / 混淆

16️⃣ 混淆(ProGuard / R8)

  • 类名 a/b/c

  • 方法名 a()

  • 字符串加密

破解思路:

  • 看调用关系

  • 动态 Hook

  • 从 native 层反推


17️⃣ assets / 数据文件

  • AES/XXTEA 加密 JSON

  • protobuf / flatbuffers

  • sqlite / realm


八、逆向常用工具(必须熟)

静态分析

  • jadx / jadx-gui

  • apktool

  • baksmali

  • IDA / Ghidra

  • JEB

动态分析

  • Frida

  • Objection

  • Xposed / LSPosed

  • Android Studio + JDWP


九、真实逆向目标类型

你会遇到:

  • 登录校验

  • 设备指纹

  • 反自动化

  • 行为风控

  • 签名算法

  • SDK 黑盒


十、学习路线(实战优先)

1️⃣ APK 结构 + Manifest
2️⃣ Java / Kotlin 反编译
3️⃣ JNI 映射
4️⃣ ARM64 汇编
5️⃣ Frida Hook
6️⃣ 反调试 / 反 Frida
7️⃣ 协议与签名