很多新手提到「逆向」就想到破解,但我入门的动机其实很朴素:想知道一个 App 是怎么和服务器说话的。这篇文章分享我的入门路线——请记住,练习对象永远是自己拥有或获得明确授权的应用(比如自己写的、开源的,或 CTF 题目)。
第一阶段:抓包,看懂网络层
移动 App 大部分功能背后都是网络请求。先用抓包工具观察「客户端 ↔ 服务器」在聊什么:
- 工具:mitmproxy(命令行)/ Proxyman、Charles(图形界面);
- 手机上配置代理 + 安装抓包工具的 CA 证书;
- 观察点:请求 URL、参数结构、返回的 JSON、鉴权头(
Authorization/Token)。
能完整说清一个请求的「入参 → 服务端处理 → 返回」链路,网络层就算入门了。
第二阶段:静态分析,读懂代码
拿不到源码没关系,APK 是可以拆开看的:
- apktool:解包资源与 smali,看清单文件和资源;
- jadx:把 APK/DEX 反编译成接近 Java 的代码,直接搜索关键词(接口地址、加解密函数名);
- 带着问题读:这个 App 的登录逻辑在哪?数据存在哪?用了什么第三方 SDK?
第三阶段:动态调试,验证猜想
静态读到的只是「纸面逻辑」,跑起来验证才有意义:
- 用 Frida 做运行时 Hook:在函数入口/出口打印参数与返回值,观察调用时机;
- 配合 Android Studio 模拟器 或自己的测试机做实验;
- 改一行、看一处变化,反复对比,理解作者的设计意图。
我的练习清单
- 逆向自己写过的 App —— 最熟悉的样本,最适合入门;
- 给开源 App 提「协议分析」笔记 / 文档 PR;
- 玩 CTF 里的 Android 逆向题(如攻防世界、Bugku);
- 从分析中总结「这 App 为什么这样设计」,反哺自己的开发。
逆向的本质是换一个视角读代码。学会之后,你会发现它最大的价值不是绕过什么,而是让你写代码时更懂「对方会怎么看我的实现」——这对做安全防护和理解系统都特别有用。