update: 如何抓到 App 的 HTTPS 请求

MemRelay-Operation: memory-save:rapt-capture-method-fix-apasstk-20260928
MemRelay-Resource: 88370fe7-bd1b-4184-8b84-afe72a7541e5
This commit is contained in:
2026-09-28 02:37:37 +08:00
parent fbcd116ca8
commit 4748c74663
@@ -8,10 +8,10 @@ memory_type: experience
project_id: 280dd2a0-d23d-4a71-91e1-dce4353163be
usage_profile_id: 0c9feb46-d06e-43cd-9ef0-c5813c84a998
status: active
revision: 1
request_id: rapt-capture-method-20260928
revision: 2
request_id: rapt-capture-method-fix-apasstk-20260928
created_at: '2026-09-27T18:37:19.908316+00:00'
updated_at: '2026-09-27T18:37:19.908316+00:00'
updated_at: '2026-09-27T18:37:33.657969+00:00'
tags:
- capture
- api
@@ -22,7 +22,7 @@ tags:
环境:模拟器 emulator-5556,机型 23113RKC6C,Android 12(SDK 32)。adb shell 已是 root,/system 可写。包名 com.leivideo.raptdrama。接口域名 apis.raptdrama.com,CNAME 到 Bunny CDN,出口 IP 会变(109.61.83.0/24、169.150.249.0/24、212.102.50.0/24 都出现过)。主机在模拟器里是 10.0.2.2。
为什么不用 Frida 直接读明文:已装过 Frida 16.5.9 的 android-x86_64 frida-server。libflutter.so 的 SSL 符号被剖掉,SSL_write 导不出来。扫堆只能扫到 SharedPreferences,扫不到 POST /app/ 这种完整请求行。Flutter 发行版不信任用户证书,也不走系统 HTTP 代理,所以不能只设 http_proxy。
为什么不用 Frida 直接读明文:已装过 Frida 16.5.9 的 android-x86_64 frida-server。libflutter.so 的 SSL 符号被剖掉,SSL_write 导不出来。扫堆只能扫到 SharedPreferences,扫不到完整的 HTTP 请求行。Flutter 发行版不信任用户证书,也不走系统 HTTP 代理,所以不能只设 http_proxy。
成功做法:
1. 用本机已有的 mitmproxy CA(%USERPROFILE%\\.mitmproxy\\mitmproxy-ca-cert.pem)。openssl x509 -subject_hash_old 得到 c8750f0d,把 pem 推到模拟器 /system/etc/security/cacerts/c8750f0d.0,chmod 644。
@@ -33,11 +33,11 @@ tags:
6. 收尾必做:iptables -t nat -F OUTPUT,删掉 c8750f0d.0,停掉 mitmdump,再 stop/start 一次框架,否则证书仍在内存里受信任。frida-server 如果推过,一并杀掉并删除 /data/local/tmp/frida-server。
已核对的请求(头都一样,v2 和不带 v2 可共用):
- 设备头:User-Agent 为 RaptDrama/版本 (Android 系统; 型号; 品牌),x-device-* 、x-os-name=Android、x-os-version、x-app-version、x-app-build、accept-language 与 accept-language-custom 用原样语言,http_accept_language_custom 用小写。Accept-Encoding 为 gzip。登录后带 apasst。空 POST(游客登录、getUserInfo)正文为空,Content-Length 为 0,不是 {}。
- 设备头:User-Agent 为 RaptDrama/版本 (Android 系统; 型号; 品牌),x-device-* 、x-os-name=Android、x-os-version、x-app-version、x-app-build、accept-language 与 accept-language-custom 用原样语言,http_accept_language_custom 用小写。Accept-Encoding 为 gzip。登录后带 apasstk。空 POST(游客登录、getUserInfo)正文为空,Content-Length 为 0,不是 {}。
- GET /app/open/classifyv2,无正文。重装后才抓到。
- GET /app/open/classify_video?type=分类id&page=页码,没有 limit。
- GET /app/open/orgin?class=new_releases 和 class=trending_now。以前说拿不到热门,是因为试的是不带参数或 type=trending,不是 class=trending_now。
- App 底部推薦页是 GET /app/open/foryou?page=1。桌面端清单的 Recommend 仍是 POST /app/open/recommend,正文 {page, limit},不要用热门替掉它,也不要接 foryou。
- POST /app/video/playlist 一次返回全部集;POST /app/video/playlistv2 每页 10 集,正文 {vid, page, before},第一页 before=1,后面为 0。桌面端先调不带 v2 的。
- 简介在 POST /app/video/videoinfo,正文 {vid},字段 video.desc。下载时写成剧目录下的简介.txt。
- fMP4 的 init.mp4 在 #EXT-X-MAP:URI 里,下载必须和分片一起存,否则 ffmpeg 报找不到 init.mp4。
- fMP4 的 init.mp4 在 #EXT-X-MAP:URI 里,下载必须和分片一起存,否则转 MP4 报找不到 init.mp4。