自签 Clash For Windows 的服务模式内核
前言
近期 Clash Verge Rev 被爆出有提权漏洞,原因主要出在服务模式核心那里,有认识的大佬成功复现了漏洞。作为 Clash For Windows 忠实用户,我也请他研究了一下 CFW 的核心,他的研究成果在此,大致原理是用 sha256 对 Clash 核心进行 hash,再用 rsa 公钥进行签名。
可以发现,CFW 最新版的服务模式大概是没有漏洞的,因为他对核心做了签名,无法启动其他程序。但代价是,我们同样无法更换自己的核心,也就是我上一篇文章中出现的问题。
我当时的解决方案是换用旧版的无签名核心,但这又导致了一个问题,就是旧版核心会出现漏洞。所以为了解决这个问题,本篇文章采用修改服务模式内核的给自己的核心自签,也算是弥补一下上一篇文章的问题。
教程
本篇文章技术核心内容均来自大佬,本文章仅是借用了他的研究成果写了一份教程。
进行教程之前先关闭 cfw 和 clash-core-service 的进程!!!
本篇文章动手难度较高,对电脑不太熟悉的人可以就此退出了。
准备工作
获取最新核心
首先你需要拿到最新的服务模式核心。这里推荐 这个网站,找到自己对应的版本后安装或解压,将目录 \resources\static\files\win\x64\service 中的 clash-core-service.exe 复制出来。
生成密钥对
这里推荐 这个网站 在线生成,当然你也可以用命令等方式生成 RSA 的公私钥,效果一样。
在网站中选择密钥长度为 512 bit,密钥格式 PKCS#1,私钥密码留空。
点击 生成公私密钥 按钮后在保存下方的公私钥。
安装 Go 环境
直接去 官网 下载安装就行。
下载自签源码
从我的 仓库 下载 ClashForWindowsSignTool.go 文件。
下载16进制编辑器
本文使用的是 UltraEdit,不过大佬直接用 x64dbg 改的,反正都差不多。
自己去官网下载就行。
自签
经过上面的准备工作,你现在应该有 RSA 的公钥和私钥,一份自签代码,一个最新版服务模式核心,和一个16进制编辑器。
编译程序
把 ClashForWindowsSignTool.go 第 17 行的 你的私钥 替换为你上面获得的私钥。
接着在 cmd 中 cd 到 ClashForWindowsSignTool.go 所在的目录,使用 go build ClashForWindowsSignTool.go 编译获得一个可执行程序 ClashForWindowsSignTool.exe。
注: Go 1.24 貌似禁止了1024bit以下的密钥,你也许需要设置 GODEBUG=rsa1024min=0 才能正常编译
替换核心
这步操作极易出错,本文将使用
UltraEdit示范
首先将公钥保存到文本文档中,删除文件末尾的回车等内容,使文本最后仅有 ----END PUBLIC KEY----- 这样的字符串,然后将文本文档使用 UltraEdit 打开。
打开后右键空白处选择 十六进制编辑 或按下 Ctrl+H 进入十六进制编辑模式。
用鼠标选中左侧的 0A (如图),然后右键你选中的内容选择剪切,重复操作直到所有 0A 都被删除。

删除后选择全部复制应该显示有181字节,格式必须如图一样。 (如图)

选择全部后复制,然后用 UltraEdit 打开 clash-core-service.exe,右键关掉十六进制编辑,按下 Ctrl+F 搜索 -----BEGIN PUBLILC 内容,找到文本对应内容,切换为十六进制编辑,从点之前选择到最后的横杠,注意你选中的内容也应该是181字节。 (如图)

右键你选中的内容,粘贴,然后保存。粘贴后后面字符如果没有发生后移基本上没有问题。
把修改后的 clash-core-service.exe 放入 \resources\static\files\win\x64\service 替换。
签名
把 \resources\static\files\win\x64 文件夹中的 clash-win64.exe 或者你要替换的程序拖入刚刚编译出来的 ClashForWindowsSignTool.exe 中,会自动生成一个 clash-win64.exe.sign。
将生成的 clash-win64.exe.sign 放入 \resources\static\files\win\x64 文件夹中替换即可。
重新安装服务模式
打开 Clash For Windows,将服务模式卸载后重新安装。
测试
打开 Clash For Windows,服务模式小地球是绿色的就是成功啦。
问题
Q: 替换不了提示文件正在使用中怎么办
A: 没好好看教程导致的,请关掉 cfw 并进任务管理器把 clash-core-service 内核的进程结束掉
Q: 服务模式小地球灰色或者红色怎么办
A: 没好好看教程导致的,请在 cfw 删除服务模式重新安装
引用
Clash For Windows 服务模式签名校验的验证逻辑
多少有点太无聊了
拼多多我爱你
宝宝好厉害
pdd
拼多多我爱你