基于开源项目 FlClash v0.8.98(Flutter 3.47.1 + Go 1.26.4 + Rust 组件)的 Windows 8.1 (NT 6.3) 深度兼容改造。
成品下载(v0.8.98-win81.1):FlClash-0.8.98-windows-8.1-x64.zip
免责声明:本项目与 FlClash / mihomo 官方无关,仅为兼容性研究用途。 上游均为 GPL-3.0,本仓库依 GPL-3.0 发布(见
LICENSE),所有修改均以补丁形式公开于go-patches/与shim/。
| 组件 | 官方状态 | 8.1 实测结论 | 适配手段 |
|---|---|---|---|
| Flutter 引擎 (flutter_windows.dll) | 要求 Win10 | ✅ 导入表干净;DPI/随机数均有运行时降级 | 无需改动 |
| Flutter 宿主 + 插件 DLL | — | ✅ 26 个 PE 全部通过导入表检测 | 无需改动 |
| Rust 组件 (rust_api.dll / FlClashHelperService.exe) | — | ❌ 静态导入 bcryptprimitives!ProcessPrng(Win10 1809+),8.1 加载即败 |
导入表重定向 → win81rng_shim.dll(随包附带) |
| Go 核心 (FlClashCore.exe) | Go 1.21+ 要求 Win10 | ❌ 运行时加载 ProcessPrng 失败→空指针;crypto/rand 懒加载失败→panic |
用打了补丁的 Go 1.26.4 重编译(见 go-patches/),本包已含新核心 |
| UCRT (api-ms-win-crt-*) | Win10 在盒内 | 安装 VC++ 2015-2022 x64 运行库(含 UCRT) | |
| TUN 模式 (wintun) | — | ✅ wintun 支持 Win7+(核心内置 wintun.dll) | 无需改动 |
- 安装 VC++ 2015-2022 x64 运行库(一次性,提供 UCRT)。
- 解压
FlClash-0.8.98-windows-8.1-x64.zip(本套件已打全部补丁)。 - 运行
FlClash.exe。TUN 模式需右键以管理员身份运行。
本包相对官方包的差异仅 3 处:替换
FlClashCore.exe(8.1 兼容重编译)、rust_api.dll/FlClashHelperService.exe导入表改名、新增win81rng_shim.dll。 其余文件与官方 v0.8.98 一致(SHA256 见官方SHA256SUMS对照)。
FlClash.exe ──加载──> flutter_windows.dll [原样,导入表 8.1-clean]
│ │
│ └─ DPI: GetDpiForWindow 缺失→回退 96dpi(引擎内置降级)
│ └─ 随机数: ProcessPrng/BCryptGenRandom 动态加载+回退链
├──FFI──> win81rng_shim.dll!ProcessPrng ──转发──> advapi32!SystemFunction036
├──加载──> rust_api.dll(导入表已改名 win81rng_shim.dll)
├──子进程──> FlClashCore.exe(Go 1.26.4 + RtlGenRandom 回退补丁重编译)
└──服务──> FlClashHelperService.exe(导入表已改名)
- 为什么用 SystemFunction036(RtlGenRandom):与 ProcessPrng 同为
(ptr, len) → BOOLABI, XP 起在盒内,微软 CNG 官方背书的熵源;Go ≤1.21 的 crypto/rand 正是使用它。 - 为什么改导入表 DLL 名而不是直接替换系统 DLL:不动系统目录、不污染其他程序、 改名后搜索顺序为"应用目录优先",加载器自动命中随包 shim。
FlClash-0.8.98-windows-8.1-x64.zip ← 可直接分发的成品包(已含全部补丁)
shim/win81rng_shim.c ← 垫片源码(C,llvm-mingw/mingw-w64 编译)
tools/patch_imports.py ← PE 导入表重定向脚本(python3 + pefile)
tools/analyze_imports.py ← PE 导入表 vs Win8.1 兼容性检测器(可复核本包)
go-patches/0001-*.patch ← Go 运行时 RNG 回退补丁(可干净 apply)
go-patches/0002-*.patch ← Go crypto/rand 重定向补丁
build/build-core-win81.sh ← 一键重编译核心(Linux 交叉编译)
build/github-actions-win81.yml ← 全自动 CI(产出全新适配包)
verify/checklist.md ← Windows 8.1 实机验收清单
bash build/build-core-win81.shx86_64-w64-mingw32-gcc -shared -O2 -o win81rng_shim.dll shim/win81rng_shim.cunzip FlClash-0.8.98-windows-amd64.zip -d pkg
cp FlClashCore-win81.exe pkg/FlClashCore.exe # 替换核心
cp win81rng_shim.dll pkg/
python3 tools/patch_imports.py pkg- 未在真实 Win8.1 实机上验证——静态层面(加载器导入表解析、运行时降级路径源码审计)已闭环,
最终需按
verify/checklist.md实机验收。 - 补丁后
rust_api.dll/FlClashHelperService.exe的 Authenticode 签名失效(不影响运行; 如需重新签名请用自签证书 + 在 8.1 上信任之)。 - 显卡需支持 D3D11/D3D9(ANGLE 渲染路径);太老的集成显卡可能回退软件渲染,UI 变慢但不崩溃。
EnableLoopback.exe(UWP 回环豁免工具)在 8.1 上无 UWP 环境,调用失败属正常,不影响功能。- 自动更新功能会把官方新包覆盖进来(未打补丁),更新后需重跑
patch_imports.py并替换核心。
- 本仓库及所有补丁:GPL-3.0(与上游一致,见 LICENSE)
- 上游项目:
- FlClash(GPL-3.0)— Flutter 代理客户端
- mihomo / Clash.Meta(GPL-3.0)— 代理内核
- wintun — TUN 驱动(随官方包分发)
- 修改声明(GPL-3.0 第 5 条):本项目的修改仅限本 README 所述三处(核心重编译补丁、 两处导入表重定向、新增垫片 DLL),上游源码未做任何其他改动。