警告

本文中涉及的步骤, 可能需要关闭 Windows 安全启动并允许驱动测试签名。如果你的工作环境并非虚拟机, 强烈建议不要继续。(如果各位读者自己有驱动签名当我没说)
0x00 前言
最近这两天在 MacOS 上用 PD (Parallels Desktop) 开 Windows 虚拟机。有个开发场景要用到 TCP over TLS 的解密, 目前好像只有 mitmproxy 才能做到。而且被抓包的应用不走系统代理。幸好 mitmproxy 出了一个 Local Redirector 的功能, 救我于水火之中 TwT。
这个功能我之前都是在 AMD64 的 PVE 虚拟机上用的, 感觉体验很舒适。没想到一换到 PD 上的 Windows 11 for ARM:
> mitmweb --mode local
Local redirector started.
Task failed: failed to propagate interception config update.
Caused by:
管道正在被关闭 (OS Error 232)
一开始还以为是网络适配器的问题, 在那里排查了好久... 后来才发现, mitmproxy Local Redirector 会有单独的驱动文件和 EXE 文件, 所以可能是处理器 Arch 的问题。
那么就直接进入正题吧。
0x01 获取一份 ARM64 版的 WinDivert 驱动
根据 mitmproxy_rs 的仓库介绍, mitmproxy 在 Windows 上的 Redirector 实现借助了 WinDivert 驱动。
不过很遗憾哈, WinDivert 的作者不愿意给大家提供 ARM64 签名版的驱动, 所以说只能各自用测试签名 (
我从 Issue 里找了一位热心网友编译的 ARM64 版驱动, 可以从这里下载。
⚠ 注意
如果你不信任此来源, 你可以自行编译 WinDivert 驱动。
本人不对读者使用上文提供的驱动造成的安全风险承担责任。
0x02 重新编译 windows-redirector
不重新编译, 而是直接替换驱动的话, Redirector 在启动的时候会弹错误框。
I > 前期准备
Git
Visual Studio 生成工具 2022 (需要安装 Clang 和 VS 2017 C++ ARM64 生成工具)
Python
Rust
II > 克隆 mitmproxy 的源代码
> git clone https://github.com/mitmproxy/mitmproxy.git
> cd mitmproxy
III > 替换一下驱动
把前面下载的 ARM64 版 WinDivert 驱动复制并替换到 <MitmProxy Source Root>/mitmproxy-windows/mitmproxy_windows
下面。
IV > 编译
cd 到 <MitmProxy Source Root>/mitmproxy-windows/redirector
下。
> cargo build --release
然后等待构建完成。
构建过程中可能会出这个错误:
这是因为 windivert-rust
这个库加了个 build 判定, 只有 x86 / x86_64 的 Arch 才能过 build ╮(╯~╰)╭
但咱已经有 ARM 的驱动了, 所以就直接绕过一下吧 ()
打开报错中提到的 main.rs 路径, 比如上面的例子中, 就是 C:\Users\minorice\.cargo\registry\src\mirrors.ustc.edu.cn-04b7754156161b43\windivert-sys-0.10.0\build\
。
然后在 main.rs
里, 加上这一行:
接着, 删掉 windivert-sys 的构建缓存, 会位于 <MitmProxy Source Root>/target/release/build/windivert-sys-XXXXXXXXXX/
这里, 把整个文件夹删掉就好啦。
再运行一次 cargo, 等看到:
Compiling jiff v0.X.XX
Compiling windivert v0.X.X
Compiling env_logger v0.XX.X
Compiling mitmproxy v0.XX.X-dev (\path\to\source\mitmproxy_rs)
Finished `release` profile [optimized] target(s) in XX.XXs
的时候, 编译就完成了。🎉
V > 放进 site-packages 里
这个过程不建议 pip install -e .
, 那样好像会出一些问题。
先到 mitmproxy_rs 的 GitHub Actions 页, 下个最新 CI 版的 whl。(下 wheels-os-windows
那个)
然后 pip install /path/to/whl
一下。(这里可能会弹依赖版本错乱警告, 但其实可以忽略)
打开 <Python Install Dir>/Lib/site-packages/
, 找到 mitmproxy_windows
那个文件夹。
把 <MitmProxy Source Root>/target/release/windows-redirector.exe
替换进去, 接着用之前下载的 ARM64 版 WinDivert 驱动, 替换里面的原有驱动。
0x03 允许运行测试签名驱动
⚠ 注意
相信你已经读过开头的警告了, 这并非正确的安全实践。在关键设备上运行前, 请三思。
I > 禁用安全启动
这个的方法因主板而异, 所以...
由于我也不知道你用的是什么设备, 可能需要你自己上网搜教程 (;>_<)
II > 启用测试签名运行
以管理员权限运行 cmd, 然后:
> bcdedit /set testsigning on
运行完成之后重启, 应该就好咯。
0x04 完成!
再来试试看吧: