一、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(逆向入口)
重点字段:
packageapplicationactivity / service / receiver / providerandroid:debuggableuses-permission
逆向用途:
找 入口 Activity
找 隐藏组件
判断是否 防调试
二、Java / Kotlin 层逆向(DEX)
3️⃣ Dalvik / ART 基础
.dex≠ JVM bytecodeDalvik 是 寄存器型 VM
Smali 是 DEX 的“汇编”
常见指令:
invoke-virtual
invoke-static
iget / iput
sget / sput
move-result
👉 你要能 Smali ⇄ Java 脑补互转
4️⃣ Java 逆向常见点
重点分析内容:
登录 / token 生成
参数加密
设备指纹
风控逻辑
请求签名
常见函数:
MessageDigestCipherMacBase64System.currentTimeMillisBuild.MODEL / ANDROID_ID
5️⃣ Kotlin 特有逆向点(非常常见)
你会看到:
Intrinsics.checkNotNullCompanionwhen(→ switch)lambda → 匿名类
协程(
SuspendLambda)
👉 Kotlin 反编译 比 Java 更啰嗦,但逻辑一样
三、JNI / Native 层逆向(核心价值)
6️⃣ JNI 基础(必会)
Java 调用:
native int check(String s);
JNI 函数名:
Java_com_xxx_xxx_check
或 动态注册:
RegisterNatives
逆向重点:
找
JNI_OnLoad找
RegisterNativesJava 方法 ↔ native 函数映射
7️⃣ ARM / ARM64 汇编(安卓核心)
ARM64 常见寄存器
x0–x7:函数参数
x0:返回值
sp / fp / lr
常见指令
ldr / strblcmp / b.eq / b.neeor(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.isDebuggerConnectedptraceThread.sleep+ 时间校验Frida 端口扫描
12️⃣ Native 层反调试
ptrace(PTRACE_TRACEME)/proc/self/statusTracerPidsigactioninline hook 检测
👉 反调试代码 = 重点突破点
13️⃣ 反 Frida
常见检测:
frida-servergum-js-looplibfrida-gadget.somaps扫描
绕过:
名称混淆
inline hook
Zygisk + Magisk
六、网络与协议逆向(非常高频)
14️⃣ HTTPS 抓包 & SSL Pinning
证书锁定
TrustManager 校验
OkHttp / Retrofit
绕过方式:
Hook
checkServerTrustedHook
SSLSocketFactoryXposed 模块
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️⃣ 协议与签名
评论