Skip to content

About

FlClash v0.8.98 的 Windows 8.1 兼容适配套件 / Windows 8.1 compatibility port kit for FlClash (Go runtime RNG fallback + ProcessPrng shim)

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FlClash for Windows 8.1 适配套件 / FlClash Windows 8.1 Port

基于开源项目 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 在盒内 ⚠️ 8.1 非在盒组件 安装 VC++ 2015-2022 x64 运行库(含 UCRT)
TUN 模式 (wintun) — ✅ wintun 支持 Win7+(核心内置 wintun.dll) 无需改动

快速使用(Windows 8.1 x64)

  1. 安装 VC++ 2015-2022 x64 运行库(一次性,提供 UCRT)。
  2. 解压 FlClash-0.8.98-windows-8.1-x64.zip(本套件已打全部补丁)。
  3. 运行 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) → BOOL ABI, 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 实机验收清单

自行从源码构建

核心(Linux/WSL 交叉编译,约 5 分钟)

bash build/build-core-win81.sh

垫片

x86_64-w64-mingw32-gcc -shared -O2 -o win81rng_shim.dll shim/win81rng_shim.c

整包补丁

unzip 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

已知限制

  1. 未在真实 Win8.1 实机上验证——静态层面(加载器导入表解析、运行时降级路径源码审计)已闭环, 最终需按 verify/checklist.md 实机验收。
  2. 补丁后 rust_api.dll/FlClashHelperService.exe 的 Authenticode 签名失效(不影响运行; 如需重新签名请用自签证书 + 在 8.1 上信任之)。
  3. 显卡需支持 D3D11/D3D9(ANGLE 渲染路径);太老的集成显卡可能回退软件渲染,UI 变慢但不崩溃。
  4. EnableLoopback.exe(UWP 回环豁免工具)在 8.1 上无 UWP 环境,调用失败属正常,不影响功能。
  5. 自动更新功能会把官方新包覆盖进来(未打补丁),更新后需重跑 patch_imports.py 并替换核心。

许可证与致谢 / License & Credits

  • 本仓库及所有补丁:GPL-3.0(与上游一致,见 LICENSE)
  • 上游项目:
  • 修改声明(GPL-3.0 第 5 条):本项目的修改仅限本 README 所述三处(核心重编译补丁、 两处导入表重定向、新增垫片 DLL),上游源码未做任何其他改动。

About

FlClash v0.8.98 的 Windows 8.1 兼容适配套件 / Windows 8.1 compatibility port kit for FlClash (Go runtime RNG fallback + ProcessPrng shim)

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages