一、逆向工程整体认知(先把路走对)
逆向 ≠ 破解
逆向的本质是 理解行为、还原逻辑、分析协议、验证假设,而不是“去掉校验”。
常见目标:
理解 App / 程序 如何工作
还原 算法 / 协议 / 风控点
重现 接口调用
定位 关键判断逻辑
验证 数据来源与可信度
二、逆向核心分类(你必须全部见过)
三、静态逆向(最基础,但最容易走偏)
1️⃣ 常见工具
Android:Jadx / JADX-GUI / JADX-CLI
iOS:Hopper / IDA / class-dump
Native:IDA / Ghidra
2️⃣ 静态逆向最重要的 5 个细节
✅ 不要从入口开始看
入口 90% 是壳、路由、代理。
正确顺序:
找网络请求
找 sign 生成
反推调用链
✅ 不要被函数名骗
boolean check()
boolean verify()
boolean a()
名字几乎不可信,看:
参数
返回值
调用位置
✅ 少看 UI,多看数据流
UI 只是壳:
真正有价值的是:
JSON 构造
Map 拼装
Header 填充
✅ 注意「工具人函数」
常见:
encode
wrap
build
process
transform
这些函数 往往藏着核心算法
✅ 看 call chain,不要看单函数
逆向是:
调用关系 > 单个函数
四、动态逆向(决定你能走多远)
1️⃣ 动态逆向目标
看 真实参数
看 真实返回
看 真实分支是否执行
2️⃣ Hook 重点对象(不是乱 Hook)
Android 重点 Hook:
OkHttp / Retrofit
Request / Response
Interceptor
Header 构造函数
sign 方法
iOS 重点 Hook:
NSURLSession
AFNetworking
自定义 sign 类
3️⃣ 动态逆向黄金技巧
🔥 Hook = 打印 + 修改 + 验证
不是只打印:
args[0] = "fake";
return origin;
看系统是否接受。
🔥 对比法
正常请求 vs 异常请求
登录前 vs 登录后
新设备 vs 老设备
🔥 断点比 Hook 更重要(Native)
strcmp
memcmp
AES / RSA / MD5
五、协议逆向(最容易出成果)
1️⃣ 先抓包,再逆向
永远不要反过来。
关注点:
URL
method
header
body
时间戳变化
2️⃣ 常见 sign 构造套路
模板一:拼接 + hash
key1=value1&key2=value2&secret=xxx
↓
md5 / sha1
模板二:JSON + base64
json → gzip → base64
模板三:多阶段
step1 → step2 → step3
3️⃣ 易忽略的细节(非常重要)
参数 排序
null 是否参与
URL encode 次数
时间戳精度(秒 / 毫秒)
sign 是否包含 body hash
六、算法逆向(别一上来就硬啃)
常见算法不是难点
难的是:
上下文
数据来源
输入变化
你真正要找的是:
谁调用它?
输入从哪里来?
结果给了谁?
典型误区
❌ “我已经还原了 MD5,怎么还不对?”
→ 因为你 漏了参数 / 顺序 / 编码
七、风控逆向(真正的分水岭)
常见风控点
设备指纹
安装列表
传感器
IP / 地区
行为节奏
风控逆向三阶段
1️⃣ 识别:哪里参与了风控
2️⃣ 隔离:哪些参数影响结果
3️⃣ 重放:能否伪造 / 固定
重点细节
风控值通常 不在 sign 里
很多在 header / hidden param
有的通过 native 算
八、反逆向与对抗(避坑必看)
常见反逆向
反调试
反 Hook
root / 越狱检测
Frida 检测
核心原则
不要对抗全部,只绕关键点
你不是要“完全破解 App”,
你是要 稳定复现你关心的功能。
九、逆向高手的思维方式(最重要)
🧠 逆向不是找答案,是验证假设
每一步都在问:
如果我改这个,会发生什么?
这个值是否必须?
是否有兜底逻辑?
🧠 永远用「最小修改原则」
改一个点
验证结果
再继续
十、给你一条非常实用的学习路线(实战向)
抓包 → 看差异
Hook 网络层
定位 sign 生成点
验证参数影响
Python / Java 重现
稳定跑一周
评论