警告

Warning

本文中涉及的步骤, 可能需要关闭 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

然后等待构建完成。

构建过程中可能会出这个错误:

20250426_MitmProxy_Local_Rdir#Build_Error.png

这是因为 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 里, 加上这一行:

20250426_MitmProxy_Local_Rdir#Edit_Build_RS.png

接着, 删掉 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 完成!

再来试试看吧:

20250426_MitmProxy_Local_Rdir#Fin.png

Ad astra per aspera