diff --git a/projects/280dd2a0-d23d-4a71-91e1-dce4353163be/如何修改 Charles 以解密模拟器 HTTPS.md b/projects/280dd2a0-d23d-4a71-91e1-dce4353163be/如何修改 Charles 以解密模拟器 HTTPS.md new file mode 100644 index 0000000..07f4097 --- /dev/null +++ b/projects/280dd2a0-d23d-4a71-91e1-dce4353163be/如何修改 Charles 以解密模拟器 HTTPS.md @@ -0,0 +1,38 @@ +--- +title: 如何修改 Charles 以解密模拟器 HTTPS +type: experience +permalink: main/projects/280dd2a0-d23d-4a71-91e1-dce4353163be/如何修改-charles-以解密模拟器-https +stable_id: 120e75c2-feea-450c-b525-5623768b318f +scope: project +memory_type: experience +project_id: 280dd2a0-d23d-4a71-91e1-dce4353163be +usage_profile_id: 0c9feb46-d06e-43cd-9ef0-c5813c84a998 +status: active +revision: 1 +request_id: rapdrama-exp-charles-20260925-0346 +created_at: '2026-09-24T19:48:51.330293+00:00' +updated_at: '2026-09-24T19:48:51.330293+00:00' +tags: +- charles +- ssl +- 配置 +--- + +Charles 配置文件是 %APPDATA%\\Charles\\charles.config。根证书在 %APPDATA%\\Charles\\data\\ca\\charles-proxy-ssl-proxying-certificate.pem。修改前先备份该文件(本次备份名 charles.config.bak-capture),并先结束 Charles 进程再写。Charles 运行中写入会在退出时被覆盖。未知 XML 字段会让 Charles 整份配置回退到默认值,连注册信息一起丢掉;曾因为写入不存在的 enableSOCKSTransparentHTTPProxying 发生过一次,已用备份恢复。启动后要确认 registrationConfiguration 还在、端口 8888 在监听。 + +已验证可以写入并被 Charles 5.2.1 保留的 proxyConfiguration: + +- port 8888 +- enableSOCKSProxy false +- decryptSSL true +- transparentProxy true(后来为透明代理尝试打开;强制转发已撤销,这个开关仍留在配置里) +- sslLocations → locationPatterns → locationMatch:location 的 host 为 *、port 为 *,enabled 为 true +- windowsConfiguration:useHTTP false、useSOCKS false、enableAtStartup false + +证书哈希用 Git 自带的 openssl 计算,不要用别的 adb: + +C:\\Program Files\\Git\\usr\\bin\\openssl.exe x509 -inform PEM -subject_hash_old -in 证书.pem -noout + +当前这张根证书的 subject_hash_old 是 275d036d。把 PEM 复制为 275d036d.0。重置 Charles 根证书后哈希会变,需要重新计算并重装。不要把私钥或注册码写进记忆。 + +验证:用该 openssl 经代理连 example.com:443,-CAfile 指向这张 PEM,Verification 为 OK。电脑直连不到的主机(如 android.googleapis.com)会在 Charles 里显示 CONNECT 超时和 503,这不是证书失败。当时机器上有 Clash Verge 服务,但没有本地代理端口在监听,Charles 是直连出去的。 \ No newline at end of file diff --git a/projects/280dd2a0-d23d-4a71-91e1-dce4353163be/如何设置 MuMu 模拟器并安装抓包证书.md b/projects/280dd2a0-d23d-4a71-91e1-dce4353163be/如何设置 MuMu 模拟器并安装抓包证书.md new file mode 100644 index 0000000..6cf44f7 --- /dev/null +++ b/projects/280dd2a0-d23d-4a71-91e1-dce4353163be/如何设置 MuMu 模拟器并安装抓包证书.md @@ -0,0 +1,46 @@ +--- +title: 如何设置 MuMu 模拟器并安装抓包证书 +type: experience +permalink: main/projects/280dd2a0-d23d-4a71-91e1-dce4353163be/如何设置-mu-mu-模拟器并安装抓包证书 +stable_id: 1a3372d5-c353-4c40-a2e0-e79ac8d095d2 +scope: project +memory_type: experience +project_id: 280dd2a0-d23d-4a71-91e1-dce4353163be +usage_profile_id: 0c9feb46-d06e-43cd-9ef0-c5813c84a998 +status: active +revision: 1 +request_id: rapdrama-exp-mumu-20260925-0346 +created_at: '2026-09-24T19:48:53.170005+00:00' +updated_at: '2026-09-24T19:48:53.170005+00:00' +tags: +- mumu +- adb +- 证书 +- flutter +--- + +MuMu 设置中心 → 开发者选项:Root 开启,ADB 调试选「开启本地连接」,磁盘共享改成可写系统盘后重启。只读系统盘时 /system 不能写证书。可写生效后,/system 是 ext4 rw。谷歌套件用模拟器里的谷歌安装器按顺序安装。机型不要用红米、华为、荣耀,否则 Play 商店容易报设备未经过 Play 保护机制认证。连上 ADB 时读到的机型是 Redmi 23113RKC6C。 + +连接: + +& "D:\Program Files\Netease\MuMu Player 12\shell\adb.exe" connect 127.0.0.1:16416 + +若提示 offline 或版本不匹配,用同一个 adb 执行 kill-server 后再 connect。模拟器重启后要重新 connect。adb root 可以把 adbd 提到 root;重启后会回到 shell,写系统区前要再执行一次。 + +安装系统证书(哈希文件名随证书变,当前是 275d036d.0): + +adb root +adb push 275d036d.0 /system/etc/security/cacerts/275d036d.0 +adb shell chmod 644 /system/etc/security/cacerts/275d036d.0 +adb shell chcon u:object_r:system_file:s0 /system/etc/security/cacerts/275d036d.0 +adb reboot + +重启后确认证书文件还在。只推送不重启,已经跑起来的进程不会信任新证书。 + +代理: + +adb shell settings put global http_proxy 10.0.2.2:8888 + +这个全局代理会跨重启保留。从模拟器用 nc 把 HTTP 请求发到 10.0.2.2:8888,example.com 返回了 200,说明路径是通的。 + +坑:这台 MuMu 的 iptables 没有 owner 匹配,不能按 App uid 单独转发。曾把整台模拟器的 TCP 80/443 DNAT 到 10.0.2.2:8888,并丢弃 UDP 443。RaptDrama 随即报 Network connection failed。原因是 Flutter 的 dart:io 不走安卓系统代理,也不使用系统证书库,强制转发后 TLS 校验失败。这些 iptables 规则已经删除(nat OUTPUT 已清空,UDP 443 DROP 已去掉),重新打开 App 后账号接口恢复返回数据。没有让 Dart 信任 Charles 证书之前,不要再做这种全局转发。模拟器重启会清掉未持久化的 iptables,但不会清掉全局 http_proxy 和已写入系统区的证书。 \ No newline at end of file