第十六节 分析 WebSocket 与 API 请求
(第2章 安卓逆向基础)
学习目标
学完本节,希望你能够:
- 说出 WebSocket 和 REST API 在应用里干啥:WebSocket 做实时双向通信(聊天、推送等),REST API 做请求-响应式数据交互;WSS 是加密的 WebSocket,抓包需先绕过 SSL Pinning。
- 会用 Burp Suite 、Mitmproxy 、Wireshark 等拦截和分析 HTTP/HTTPS/WebSocket 流量(仅限授权环境);知道抓 HTTPS/WSS 需先绕过证书校验。
- 会用 Frida Hook OkHttp 的 Request 、WebSocket 、WebSocketListener.onMessage 等,拦截或打印 API/WebSocket 数据(仅限授权环境)。
- 动手:在授权环境下,对一个应用完成「绕过 SSL Pinning + 抓到一个 HTTPS 或 WebSocket 请求」或「Frida Hook 打出一次 API/WebSocket 消息」。
阅读提示 :涉及抓包、Hook 网络、伪造请求,仅限授权环境、学习与安全研究;不得对他人应用做未授权抓包或传播数据。
常见疑问:WebSocket 和 HTTP API 有啥区别?HTTP 是一次请求一次响应;WebSocket 是长连接,可双向实时发消息。
一、WebSocket 和 API 请求在干啥?
REST API (HTTP/HTTPS)就是常见的「发请求 → 服务器返回」;WebSocket 是长连接 ,连上后可双向实时 收发消息,适合聊天、推送、实时数据。WSS 是加密的 WebSocket(走 443),抓包也要绕过 SSL Pinning。
常见协议一句话
| 协议 | 在干啥 | 抓包注意 |
|---|---|---|
| HTTP | 明文请求-响应 | 直接代理即可 |
| HTTPS | 加密请求-响应 | 需装 CA、必要时绕过 SSL Pinning |
| WebSocket / WSS | 长连接、双向实时 | WSS 同 HTTPS,需绕过 Pinning |
记一句:抓 HTTPS/WSS 要先设代理、装 CA,有 Pinning 再用 Frida 绕过(仅限授权)。
二、拦截和分析 API 请求一般怎么干?
在干啥:让应用流量经过你的代理,用 Burp/Mitmproxy/Wireshark 看请求和响应
- PC 上开 Burp 或 Mitmproxy ,监听 8080 等端口。
- 设备 WiFi 设置 HTTP 代理为 PC_IP:8080。
- 设备上安装抓包工具的 CA 证书。
- 若应用报证书错误,用 Frida Hook CertificatePinner 、checkServerTrusted 等绕过 SSL Pinning(详见第十三节)。
- 打开应用,在 Burp 的 Proxy -> HTTP history 里看请求 URL、Header、Body。
注意:仅限授权环境;不得对他人应用未授权抓包。
三、用 Frida Hook API 和 WebSocket 一般怎么干?
在干啥:不依赖抓包工具,在应用进程里 Hook 网络相关类,打印或修改请求/响应
OkHttp 常见:Request 、Response 、WebSocket 、WebSocketListener.onMessage。Hook 这些可看到 URL、Body、WebSocket 消息。
Hook OkHttp Request(示例)
js
Java.perform(function() {
var Request = Java.use("okhttp3.Request");
Request.url.implementation = function() {
var url = this.url();
console.log("[*] Request URL: " + url.toString());
return url;
};
});
(实际要看应用用的是 Request 的哪个方法,body()、url() 等;若有重载需用 overload。)
Hook WebSocketListener.onMessage(示例)
js
Java.perform(function() {
var WebSocketListener = Java.use("okhttp3.WebSocketListener");
WebSocketListener.onMessage.overload("okhttp3.WebSocket", "java.lang.String").implementation = function(ws, msg) {
console.log("[*] WebSocket Message: " + msg);
this.onMessage(ws, msg);
};
});
注意:仅限授权环境。
四、伪造 API 或 WebSocket 消息(简要)
在干啥:在授权环境下复现或篡改请求/消息,用于协议分析、测试
- API :在 Burp 里复制请求,用 Postman 或 curl 重放;或改 Body/Header 再发。
- WebSocket :用 Python websocket-client 等连上 WSS,按协议格式 send 消息,观察响应。
注意:仅限授权、合规;不得对他人服务未授权伪造或传播。
本节小结
你只要记住这几条就行:
- API = 请求-响应;WebSocket = 长连接、双向实时;HTTPS/WSS 抓包需装 CA,有 SSL Pinning 需 Frida 绕过。
- 抓包用 Burp/Mitmproxy 设代理 + 装 CA;分析 API/WebSocket 也可用 Frida Hook OkHttp 相关类。
- Hook Request.url 、body 、WebSocketListener.onMessage 等可看到 URL、Body、消息;仅限授权、合规。
- 伪造请求/消息仅限授权环境。
本节术语速查
| 术语 | 一句话解释 |
|---|---|
| REST API | 基于 HTTP 的请求-响应式接口。 |
| WebSocket | 长连接、双向实时通信协议。 |
| WSS | 基于 TLS 的 WebSocket,走 443。 |
| SSL Pinning | 应用只信任指定证书,不信任抓包 CA。 |
本节思考与练习
- 概念:WebSocket 和 HTTP API 在「连接方式」和「数据方向」上有啥区别?
- 应用:若你要看一个应用的「发了哪些 API 请求」,你会优先用抓包还是 Frida Hook?各有什么优缺点?
- 动手:在授权环境下,对一个应用设 Burp 代理并装 CA;若遇证书错误,用 Frida 绕过 SSL Pinning 后抓到一个 HTTPS 请求。
- 动手 :用 Frida Hook 该应用的 OkHttp Request 或 WebSocketListener.onMessage,打出一次请求 URL 或一条 WebSocket 消息(仅限授权环境)。
下一节预告 :下一节是破解应用限制实战,会把强制更新、区域限制、功能锁定等串起来,用静态分析、改 Smali、Frida/Xposed Hook、API 伪造等做完整流程(仅限授权环境)。