-
Notifications
You must be signed in to change notification settings - Fork 0
MITM WINDOWS
未竟 edited this page Sep 24, 2026
·
1 revision
怎么逆向api 讲的是安卓模拟器抓米游社,那套 Magisk + 证书信任 + 绕 Pinning 的流程对 PC 客户端不适用。本页记录 Windows 桌面客户端的抓法:以云·原神、云·绝区零为例,2026-09 实测跑通,local 模式两轮 0 失败,两个客户端的所有 HTTPS 域名都被解密。
关键结论:这类客户端内部有好几条网络路径,对代理的反应不一样,只设代理环境变量抓不全,必须
regular+local两种模式一起开。
云·原神(国服 / 国际服)与云·绝区零都是 Qt5 原生程序(内嵌 QtWebEngine 与 libcurl,不是 Electron),接口全部走 libcurl 的 HTTPS,可以完整解密。唯一不走 HTTP 的是进游戏后的画面串流(UDP),这部分不在本文范围。
| 部分 | 典型域名 | 认 HTTPS_PROXY 吗 |
抓法 |
|---|---|---|---|
Combo SDK(登录、签发 combo_token) |
passport-api、hk4e-sdk、nap-sdk-s
|
认 |
regular 模式 + 进程级代理环境变量 |
| 云游戏业务层(登录、钱包、排队、配置) |
api-cloudgame、cg-nap-api
|
不认 | 只能用 local 模式(WinDivert 透明捕获) |
| 日志上报 | *.mhystatic.com |
— | 用自带 CA 列表,拒绝 mitmproxy 证书;--ignore-hosts 放行即可 |
QtWebEngine 的命令行 flags 会被程序自己改写,指望用 flags 指定代理不可靠;libcurl 那部分老老实实认环境变量。
- 安装 mitmproxy,并把它的 CA 证书装进 Windows 「受信任的根证书颁发机构」(本地计算机)。这一步与 API-REVERSE 第八节 相同。
-
local模式要提权:首次启动时 mitmproxy 会拉起windows-redirector.exe(WinDivert 捕获组件)并弹 UAC,点「是」。它只捕获你指定的进程。 - 确认没有别的 mitmproxy 实例在跑,端口冲突会让你白折腾。
& "C:\Program Files\mitmproxy\bin\mitmweb.exe" `
--mode regular@8086 `
--mode "local:Zenless Zone Zero Cloud,Genshin Impact Cloud" `
--listen-host 127.0.0.1 `
--ignore-hosts "mhystatic\.com"-
regular@8086的端口要和下一步环境变量里的端口一致;端口本身随便挑,也可以写成local:<进程名>@18086给 local 模式单独指定端口。 -
--ignore-hosts "mhystatic\.com"放行日志上报域名,否则会刷一屏证书被拒的错误。 - 网页界面端口是另一个(默认 8081,可在
config.yaml里用web_port改),启动后浏览器打开看流量。
另开一个 PowerShell 窗口,变量只对这个窗口生效,不改系统代理:
# 云·绝区零
$d = "$env:LOCALAPPDATA\Programs\miHoYo\ZenlessZoneZeroCloud"
$env:HTTP_PROXY = 'http://127.0.0.1:8086'
$env:HTTPS_PROXY = 'http://127.0.0.1:8086'
Start-Process "$d\Zenless Zone Zero Cloud.exe" -WorkingDirectory $d# 云·原神国服
$d = "$env:LOCALAPPDATA\Programs\miHoYo\GenshinImpactCloudGame"
$env:HTTP_PROXY = 'http://127.0.0.1:8086'
$env:HTTPS_PROXY = 'http://127.0.0.1:8086'
Start-Process "$d\Genshin Impact Cloud Game.exe" -WorkingDirectory $d业务接口(钱包、登录)要登录之后才会发出。客户端停在登录框时只能抓到配置类请求。
官方文档没写清楚,以下是看源码 + 实测确认的:
| 规则 | 说明 |
|---|---|
| 匹配方式 | 对进程名做区分大小写的子串匹配 |
| 多进程 | 逗号分隔,如 local:Zenless Zone Zero Cloud,Genshin Impact Cloud
|
| 子串技巧 |
Genshin Impact Cloud 能同时命中国服 Genshin Impact Cloud Game 与国际服 Genshin Impact Cloud
|
| 回环流量 | Windows 上不捕获回环,所以 regular(走 127.0.0.1:8086)与 local(透明捕获直连请求)可以并用,不会重复拦截 |
| 改规则 | mitmproxy 会热加载脚本,用一次性钩子在运行时改 redirector 的规则即可换进程,不必重启、不会再弹 UAC |
-
客户端一定要从 3.2 那个窗口启动。 很多人的用户环境变量里常年有
HTTP(S)_PROXY=http://127.0.0.1:7890(FlClash 之类)。从开始菜单启动的话,登录请求会发到那个本机端口,而local模式不捕获回环流量,combo_token就抓不到。 -
别用不带进程名的
--mode local。 FlClash 开着 TUN 时,它会把 FlClash 自己的出站流量也截走,形成回环:客户端日志里会留下 curlerror 35(TLS 握手失败)与net 502(代理 Bad Gateway)——请求其实已经到了 mitmproxy、证书也被接受,是 mitmproxy 连不上上游。 -
抓包时别点开始游戏。 画面串流是 UDP,同样会被
local模式接管,mitmproxy 解不了,只会拖慢画面。 -
mitmdump的标准输出有缓冲,看着像没日志。要实时看就写个插件把主机与路径自己写进文本文件并刷新(顺便别输出请求头与查询串,免得凭证落盘)。 -
证书固定的域名直接放行,不要试图硬解,
--ignore-hosts就够了。
-
云·原神国服(本机已有登录态):
app/verify→combo/granter/login/v2/login→gamer/api/login→wallet/wallet/get。钱包请求带x-rpc-combo_token等 16 个x-rpc-*头,实测其中只有 4 个是必需的,见 怎么做云游戏签到。 -
云·绝区零:
cg-nap-api的业务接口全部解密成功。
- 关掉客户端与 mitmproxy 进程;本文流程不改系统代理、不装额外软件,也就没有别的残留要清。
-
抓包文件里有
combo_token与通行证凭证,等同账号登录态:不要外传、不要贴进 issue,用完删掉(mitmweb -r <文件>可以回看)。 - 相关接口与反抓包策略会持续变化,实际使用时结合最新社区经验调整。