1) 基础必备
JVM 与字节码
.class文件结构:常量池、字段、方法、属性(Code/LineNumberTable/LocalVariableTable 等)字节码指令:
invokevirtual/invokestatic/invokeinterface/invokespecial、getfield/putfield、aload/iload等访问控制:
public/protected/private、包访问、final/static/volatile/synchronized类加载机制:
Bootstrap/Ext/App(或模块化后)、ClassLoader、双亲委派、defineClass反射:
Class.forName、Method.invoke、setAccessible(true)
Android 运行时
Dalvik/ART、
dex、odex/vdex、AOT/JITAPK 结构:
AndroidManifest.xml、classes*.dex、resources.arsc、签名、lib/组件模型:Activity/Service/Receiver/Provider
常见入口:
Application.attachBaseContext、onCreate
2) 静态分析常用(最常用的“看”)
反编译 / 资源分析
Java 源级反编译:jadx(首选)、CFR、Fernflower
dex 解析/Smali:baksmali/smali、Apktool(看资源+Manifest)
关键文件:
Manifest:导出组件、权限、DeepLink
resources:字符串、URL、开关、灰度配置
assets/raw:证书、脚本、配置、模型、加密字典
Smali 必懂点
寄存器概念:
locals/registers,p0/p1参数寄存器常见改法:
强制返回 true/false(绕过校验)
NOP 掉关键调用
替换字符串常量(URL/开关)
混淆识别:短类名、短方法名、控制流奇怪、反射大量使用
常见定位技巧(“从哪儿下手”)
搜索关键字:域名、API path、错误码、提示语、加密算法名(AES/RSA/HMAC)、“sign”“token”“timestamp”
从网络层找:OkHttp/Retrofit/Volley/HttpURLConnection
从登录/风控找:设备指纹、签名、时间戳、nonce、序列号
3) 动态分析常用(最常用的“抓/改/看”)
Hook / 插桩
Frida:Java 层 Hook、native Hook、RPC、spawn/attach
Xposed/LSPosed:长期驻留、系统级/应用级 Hook
关键 Hook 点:
OkHttp:
Interceptor.intercept、Request.Builder.addHeaderRetrofit:
CallAdapter、Converter加密:
Cipher.doFinal、Mac.doFinal、MessageDigest.digestBase64:
android.util.Base64/java.util.Base64JSON:Gson/Jackson 序列化入口
抓包与证书
HTTPS 抓包:Burp/Charles/mitmproxy
证书 Pinning 绕过(概念层面):
OkHttp CertificatePinner / TrustManager
WebView SSL 错误处理
常见坑:
双向 TLS(mTLS)
自定义加密通道(即使 HTTPS 也再加密一层)
日志与调试
logcat、调试模式、反调试检测(简单版)
运行时信息:
当前类加载列表
方法调用栈
动态生成类/热修复框架加载情况
4) 加密与签名(逆向里最常见的“核心战场”)
高频算法/结构
AES(CBC/GCM/CTR)+ IV/Nonce
RSA/ECC(多用于密钥交换/签名)
HMAC-SHA256(最常见签名)
MD5/SHA1(旧项目/兼容)
常见签名组成:
canonical string:按 key 排序、拼接
k=v、加上 secrettimestamp + nonce + body hash + path + method
典型定位路线
从网络请求找 header:
sign/x-signature/token/timestamp/nonceHook 加密 API:Cipher/Mac/MessageDigest → 看输入输出
往上追:谁在组织 canonical string、谁在取 secret
找 secret 来源:硬编码/so/服务端下发/KeyStore/动态算法
5) 混淆与保护(你经常会遇到)
ProGuard/R8
类/方法名混淆、字符串常量仍可能可见
keep 规则、反射导致的保留痕迹
字符串加密/动态解密
常见模式:静态数组 + XOR/AES + runtime 解密
逆向策略:
Hook 解密函数(拿明文)
或把解密逻辑抽出来离线还原
控制流平坦化/花指令(概念)
代码结构看起来“跳来跳去”
应对:动态 Hook 输出关键变量/中间值
热修复/插件化
Tinker、Sophix、RePlugin、Dynamic Feature
入口可能不在主 dex,需关注:
attachBaseContext中加载逻辑dexClassLoader/pathList修改
6) Native 相关(很多“关键逻辑”会下沉到 so)
JNI:Java ↔ C/C++ 的调用桥
常见目标:签名算法、设备指纹、反调试、加密密钥
基本技能:
找
JNI_OnLoad,定位RegisterNativesFrida/ptrace 层面的 Hook(高阶)
符号裁剪/混淆:从字符串、导入函数、行为定位
7) 反调试/反 Hook/反抓包(你会经常遇到)
(我只讲防护点,不教你做违法用途)
root 检测、模拟器检测、Xposed/Frida 检测
ptrace/TracerPid/ro.debuggable等SSL Pinning、WebView pinning
运行时完整性校验(签名校验、dex 校验、so 校验)
8) 实战工作流(最实用的一套)
A. 快速摸清 app 在干什么(30 分钟内)
apktool 看 Manifest(入口、权限、导出组件)
jadx 全局搜域名/接口 path/关键 header
找网络层:OkHttp/Retrofit → 看请求构造
找 sign 生成:从拦截器/请求 builder 往上追
B. 签名/加密逆向(最常见任务)
抓包看参数差异(timestamp/nonce/sign)
Hook
Cipher/Mac/MessageDigest拿明文追踪 secret 来源与拼接规则
复现为脚本(注意时间、排序、编码)
C. 破解只做“验证/调试”
一切改动要可回滚
记录:版本号、哈希、改动点、验证用例
9) “常见知识点速查表”
OkHttp:Interceptor、Request/Response body 只能读一次(要注意 buffer)
Gson/Jackson:序列化字段名、
@SerializedName时间:毫秒/秒、时区、服务器时间校准
编码:UTF-8、URL encode、Base64(标准/URL-safe)
压缩:gzip/deflate/zlib(很多 body 会压缩再加密)
评论