Android 逆向入门:从 APK 到 API 接口只需三步
别被「逆向」两个字吓到。今天我用三步带你走完一个完整流程:拿到 App → 找到 API → 调通接口。
为什么要学这个?
先问自己几个问题:
- 想抓某个 App 的数据,但不知道它的接口地址?
- 看到竞品 App 有个很酷的功能,想知道它调了什么 API?
- 怀疑 App 在偷传你的隐私数据?
这些,逆向都能给你答案。
## 你需要什么
环境准备,五分钟搞定:
```bash
# 1. jadx - 反编译神器
brew install jadx # Mac
# 或者下载 jar 包: https://github.com/skylot/jadx/releases
# 2. 抓包工具(二选一)
# - HTTP Toolkit(跨平台,最简单)
# - Charles / Fiddler(经典方案)
# 3. 一台 Android 设备或模拟器
第一步:静态分析
拿到 APK,先扔给 jadx:
jadx-gui target.apk
进去之后直奔三个地方:
① AndroidManifest.xml — 看有没有网络权限,有没有自定义类加载器
② 搜索关键词:
HttpUrl/OkHttp/Retrofit— 定位网络请求框架api/base_url/host— 找接口地址encrypt/sign/md5— 定位加密逻辑
③ 看 Application 类 — 很多 App 在这里初始化网络框架
大部分情况,到这一步你已经能找到接口地址了。
第二步:动态验证
用抓包工具(推荐 HTTP Toolkit)拦截 App 的请求:
- 手机上安装 CA 证书
- 开启抓包代理
- 操作 App,观察网络请求
这时候你会看到:
GET https://api.example.com/v1/products?page=1
Headers:
x-sign: a1b2c3d4...
x-timestamp: 1735000000
Response:
{"data": [...], "has_more": true}
恭喜,接口拿到了。
第三步:处理加密
如果看到接口带了 sign / token 这类参数,说明有加密。
这时候用 Frida:
// hook 加密函数
Java.perform(function() {
var EncryptUtil = Java.use('com.example.utils.EncryptUtil');
EncryptUtil.getSign.implementation = function(params) {
console.log('sign params:', params);
var result = this.getSign(params);
console.log('sign result:', result);
return result;
};
});
跑起来:
frida -U -l hook.js -f com.example.app
日志里就会输出加密前后的参数。复制这个加密逻辑,你就可以在自己的脚本里调用了。
实战案例
我随便拿一个你手机里可能有的 App,演示完整流程——
等等,我不能写。这篇文章的目的不是喂给你鱼,而是教你怎么钓鱼。
你现在就可以找手机里任意一个 App,用这三步走一遍。走完之后你会发现:90% 的 App 逆向,逃不出这个框架。
写在最后
逆向是一种思维方式,不是魔法。这三步是起点,不是终点。
之后我会继续写:
- 《Frida 实战:Hook 任何 App 的加密方法》
- 《绕过 SSL Pinning 的四种姿势》
- 《脱壳入门:从加固 App 中提取 Dex》
关注我,一起成为 Android 逆向上分选手。
评论区聊聊:你最想分析哪个 App?我下一期就拆它 🔧