很多新手提到「逆向」就想到破解,但我入门的动机其实很朴素:想知道一个 App 是怎么和服务器说话的。这篇文章分享我的入门路线——请记住,练习对象永远是自己拥有或获得明确授权的应用(比如自己写的、开源的,或 CTF 题目)。

第一阶段:抓包,看懂网络层

移动 App 大部分功能背后都是网络请求。先用抓包工具观察「客户端 ↔ 服务器」在聊什么:

  • 工具:mitmproxy(命令行)/ Proxyman、Charles(图形界面);
  • 手机上配置代理 + 安装抓包工具的 CA 证书;
  • 观察点:请求 URL、参数结构、返回的 JSON、鉴权头(Authorization / Token)。
能完整说清一个请求的「入参 → 服务端处理 → 返回」链路,网络层就算入门了。

第二阶段:静态分析,读懂代码

拿不到源码没关系,APK 是可以拆开看的:

  • apktool:解包资源与 smali,看清单文件和资源;
  • jadx:把 APK/DEX 反编译成接近 Java 的代码,直接搜索关键词(接口地址、加解密函数名);
  • 带着问题读:这个 App 的登录逻辑在哪?数据存在哪?用了什么第三方 SDK?

第三阶段:动态调试,验证猜想

静态读到的只是「纸面逻辑」,跑起来验证才有意义:

  • Frida 做运行时 Hook:在函数入口/出口打印参数与返回值,观察调用时机;
  • 配合 Android Studio 模拟器 或自己的测试机做实验;
  • 改一行、看一处变化,反复对比,理解作者的设计意图。

我的练习清单

  1. 逆向自己写过的 App —— 最熟悉的样本,最适合入门;
  2. 给开源 App 提「协议分析」笔记 / 文档 PR;
  3. 玩 CTF 里的 Android 逆向题(如攻防世界、Bugku);
  4. 从分析中总结「这 App 为什么这样设计」,反哺自己的开发。

逆向的本质是换一个视角读代码。学会之后,你会发现它最大的价值不是绕过什么,而是让你写代码时更懂「对方会怎么看我的实现」——这对做安全防护和理解系统都特别有用。