KMS v4/v5/v6 全协议兼容 · Anti-CC 防护 · GeoIP 地区过滤 · 远程集中管理 · Web 控制台
CKMS (Custom KMS) 是一个与 Microsoft KMS (Key Management Service) 协议完全兼容的激活服务器。
本项目在 vlmcsd 核心之上,深度扩展了 Anti-CC 防护、ACL 访问控制、GeoIP 地区过滤、远程集中管理 与 PHP Web 管理后台,覆盖从单机部署到多服务器集群运维的完整场景。
- 作者:xuanlove
- 协议:MIT(详见 LICENSE)
- 下载:GitHub Releases
兼容全系 Windows / Office / Visio / Project 产品激活,开箱即用。
| 能力 | 说明 |
|---|---|
| 协议兼容 | KMS v4 / v5 / v6 全版本支持,MS RPC 与简单 Socket 双传输层 |
| Anti-CC 防护 | 滑动窗口计数限流,单 IP 超限自动拒绝,防止激活接口被恶意刷量 |
| ACL 访问控制 | IP 白名单 / 黑名单,支持单 IP、IP 段、CIDR 子网掩码 |
| GeoIP 过滤 | 按 ISO 国家码限制允许激活的地区,精准管控来源地域 |
| 远程管理 | 周期心跳上报 + 远端配置双向同步,HMAC-SHA256 签名认证,防重放防篡改 |
| Web 控制台 | PHP 管理后台:服务器列表 / 黑白名单 / 参数配置 / 申请审批一站式管理 |
| 日志系统 | 按天滚动写入,自动清理过期日志,保留天数可配置 |
| 热重载 | 运行中发送 SIGHUP 即可重载配置,无需重启服务 |
| 多平台 | Linux (amd64/i386/arm64) + Windows (x86/x64),预编译二进制开箱即用 |
预编译二进制已发布至 GitHub Releases,下载即用。
| 系统 | 架构 | 传输层 | 链接方式 | 预编译 |
|---|---|---|---|---|
| Linux | x86_64 (amd64) | Socket / MS RPC | 动态链接 (glibc) | ✅ |
| Linux | i386 | Socket | 动态链接 (glibc) | ✅ |
| Linux | ARM64 (aarch64) | Socket | 动态链接 (glibc) | ✅ |
| Windows | x64 | Socket / MS RPC | 原生 PE | ✅ |
| Windows | x86 | Socket | 原生 PE | ✅ |
默认使用内置加密 (
CRYPTO=internal),零外部依赖,无需安装 OpenSSL 即可运行。
# Linux
chmod +x ckmsd
./ckmsd # 默认监听 0.0.0.0:1688
# Windows(管理员 cmd)
ckmsd.exe # 前台运行
ckmsd.exe -s # 注册为系统服务(安装到 C:\ckmsd)./ckms # 测试本地 127.0.0.1:1688
./ckms 192.168.1.10:1688 # 测试远端服务器
./ckms -v # 输出详细信息
./ckms -l Windows # 查看可用应用清单Windows(管理员 cmd):
slmgr /skms <服务器IP>:1688
slmgr /ipk <GVLK>
slmgr /ato
slmgr /xpr :: 查看激活状态Office(进入 Office 安装目录):
cscript ospp.vbs /sethst:<服务器IP>
cscript ospp.vbs /setprt:1688
cscript ospp.vbs /inpkey:<GVLK>
cscript ospp.vbs /actGVLK(批量授权密钥)列表详见 man/vlmcsd.7。
| 依赖 | 用途 | 安装命令 (Debian/Ubuntu) |
|---|---|---|
| gcc / clang | 主编译器 | apt-get install build-essential |
| GNU make | 构建工具 | apt-get install make |
| libssl-dev | HTTPS 远程管理(可选) | apt-get install libssl-dev |
| gcc-multilib | i386 交叉编译(可选) | apt-get install gcc-multilib libc6-dev-i386 |
| gcc-aarch64-linux-gnu | ARM64 交叉编译(可选) | apt-get install gcc-aarch64-linux-gnu |
| MinGW-w64 | Windows 交叉编译(可选) | apt-get install gcc-mingw-w64-x86-64 gcc-mingw-w64-i686 |
cd src
make # 编译服务端 + 客户端
make allmulti # 额外编译多调用二进制编译产物位于 bin/:
| 产物 | 说明 |
|---|---|
vlmcsd |
KMS 服务端 |
vlmcs |
KMS 客户端 |
vlmcsdmulti |
多调用二进制(服务端 + 客户端合一) |
lib/libkms.a |
静态库(可被第三方程序调用) |
仓库提供三个构建脚本,按需选用:
| 脚本 | 用途 | 产物目录 |
|---|---|---|
build-release.sh |
全平台构建(Linux amd64/i386/arm64 + Windows x64/x86) | release/ |
build-all.sh |
Linux 三架构交叉编译 | dist/ |
build-linux.sh |
Linux 三架构(开发用) | dist/linux/ |
./build-release.sh # 推荐:一次生成 5 个平台二进制Dockerfile.build 通过 multi-stage 同时构建多架构静态链接版本:
docker build -f Dockerfile.build --target export-amd64 -o ckms-amd64 .通过 make KEY=VALUE 传入(定义于 src/config.h / GNUmakefile):
| 选项 | 默认值 | 说明 |
|---|---|---|
CRYPTO |
internal |
加密后端:internal / openssl / openssl_with_aes / windows / polarssl |
HAVE_SSL |
0 |
启用远程管理 HTTPS(需 OpenSSL) |
USE_THREADS |
自动 | 启用 pthreads 并发 |
MAX_THREADS |
16 |
最大并发连接数 |
USE_MSRPC |
0 |
Windows 下启用 MS RPC 传输(更高兼容性) |
PROGRAM_NAME |
bin/vlmcsd |
服务端输出路径 |
CLIENT_NAME |
bin/vlmcs |
客户端输出路径 |
MULTI_NAME |
bin/vlmcsdmulti |
多调用二进制输出路径 |
STRIP |
1 |
是否 strip 调试符号 |
编译示例:
# 启用 HTTPS 远程管理(需 libssl-dev)
make HAVE_SSL=1 CRYPTO=openssl
# 自定义输出名称
make PROGRAM_NAME=bin/ckmsd CLIENT_NAME=bin/ckms
# Windows x64 交叉编译
make CC=x86_64-w64-mingw32-gcc PROGRAM_NAME=bin/ckmsd.exe CLIENT_NAME=bin/ckms.exe
# Windows x86 交叉编译
make CC=i686-w64-mingw32-gcc PROGRAM_NAME=bin/ckmsd.exe CLIENT_NAME=bin/ckms.exe
# Linux i386 交叉编译
make CC=gcc CFLAGS=-m32 LDFLAGS=-m32
# Linux ARM64 交叉编译
make CC=aarch64-linux-gnu-gcc更多 OpenSSL 与构建细节见 README.openssl 和 README.compile-and-pre-built-binaries。
CKMS 通过 config.ini(INI 格式)统一配置扩展功能。使用 -i 指定路径,运行中发送 SIGHUP 可热重载。
; ===============================
; Anti-CC 防护
; ===============================
MaxRequests=20 ; 单 IP 时间窗口内最大请求数,超出即拒绝
WindowMinutes=1 ; 时间窗口(分钟)
; ===============================
; 远程管理
; ===============================
RemoteEnable=false ; 启用心跳上报 + 配置同步
RemoteUrl=http://localhost/ckms/web/api/
RemoteApiKey=your-api-key ; 认证密钥(需与 Web 后台一致)
; ===============================
; 公网 IP 发现
; ===============================
RemoteIPEnable=false ; 启用后通过探针获取真实公网 IP(NAT 穿透)
; ===============================
; GeoIP 过滤
; ===============================
GeoFilterEnable=false ; 启用按国家码过滤
GeoAllowCountries= ; 允许的国家码,逗号分隔,如 CN,US,JP
; ===============================
; 日志
; ===============================
LogEnabled=true ; 启用日志
LogRetentionDays=30 ; 保留天数(0 = 永久保留)
LogDir=Log ; 日志目录(相对程序目录)所有字段均为可选,缺失时使用上述默认值。
| 参数 | 说明 |
|---|---|
-L <addr:port> |
指定监听地址,可多次使用 |
-P <port> |
指定默认端口(需在 -L 之前使用) |
-o0|1|2|3 |
公网防护等级(0=无 / 1=仅私网监听 / 2=拒绝公网连接 / 3=1+2) |
-i <file> |
加载 INI 配置文件 |
-D |
后台守护进程模式 |
-p <file> |
写入 PID 文件 |
-s |
Windows 注册为系统服务 |
-t <sec> |
TCP 连接超时(默认 30 秒) |
-m <n> |
最大并发客户端数 |
-d |
处理完一个请求后立即断开 |
-F0|1 |
是否允许绑定未配置的 IP(1=允许) |
-x0|1 |
退出行为(0=尽力运行 / 1=严格退出) |
-V |
显示版本信息 |
-h |
显示帮助 |
常用启动示例:
./ckmsd # 默认监听 0.0.0.0:1688
./ckmsd -i /path/to/config.ini # 加载 INI 配置
./ckmsd -L 192.168.1.10:1688 # 指定监听地址
./ckmsd -o1 # 仅监听私网地址(公网不可达)
./ckmsd -o3 # 最高防护:仅私网 + 拒绝公网
./ckmsd -D -p /var/run/ckmsd.pid # 后台运行 + PID 文件
./ckmsd -m 100 -t 10 # 限制 100 并发,10 秒超时
./ckmsd -h # 查看全部选项./ckms # 测试 127.0.0.1:1688
./ckms 192.168.1.10:1688 # 测试远端
./ckms .example.com # 通过 DNS SRV 自动发现
./ckms -v # 详细信息
./ckms -l Windows # 查看可用应用清单ckmsd.exe -s :: 安装为系统服务(C:\ckmsd)通过 services.msc 管理服务启停。
通过软链接复用同一可执行文件,节省磁盘空间:
ln -s ckmsdmulti ckmsd
ln -s ckmsdmulti ckms
./ckmsdmulti vlmcsd -L 0.0.0.0:1688
./ckmsdmulti vlmcs 127.0.0.1kill -HUP $(cat /var/run/ckmsd.pid)cp -r web /var/www/html/ckms
chown -R www-data:www-data /var/www/html/ckms/data
chmod -R 755 /var/www/html/ckms/data访问 http://your-host/ckms/,默认密码 admin123(首次登录后请立即修改)。
| 模块 | 功能 |
|---|---|
| 服务器管理 | 添加服务器(自动生成 API Key)、在线状态、版本、地区、封禁 IP 数、重置 Key、删除 |
| 黑白名单 | 在线编辑白名单 / 黑名单,支持单 IP、IP 段、CIDR 子网 |
| 系统设置 | 时区、Anti-CC 参数、日志保留、GeoIP 过滤、心跳超时、状态页可见内容 |
| 申请管理 | 审批用户自助提交的白名单申请 |
| 状态页 | /ckms/status.php 公开展示服务器状态(可见内容由管理员配置) |
| 文件 | 内容 |
|---|---|
servers.json |
服务器列表(名称、API Key、心跳、版本、封禁 IP) |
whitelist.txt |
白名单 |
blacklist.txt |
黑名单 |
applications.json |
白名单申请记录 |
admin.json |
管理员密码哈希与全局配置 |
login_fails.json |
登录失败计数(防爆破) |
数据写入采用 临时文件 + rename 原子操作,写入前自动备份到
.bak。即使进程崩溃也不会丢失数据,多服务器并发心跳安全可靠。
启用 RemoteEnable=true 后,ckmsd 自动与远端管理后台保持双向同步:
| 周期 | 方向 | 内容 |
|---|---|---|
| 每 120 秒 | 上报 → | 心跳:版本、监听地址、封禁 IP 列表、在线状态 |
| 每 600 秒 | ← 拉取 | 配置:白名单、黑名单、Anti-CC 参数、GeoIP 配置 |
API 通过四元组鉴权,有效防止重放和未授权访问:
| Header | 说明 |
|---|---|
x-api-key |
服务器 API Key(管理后台生成) |
x-nonce |
随机串(防重放) |
x-timestamp |
时间戳(防重放) |
x-signature |
HMAC-SHA256(path|nonce|timestamp, api_key) |
1. Web 后台「添加服务器」 → 获得 API Key
2. 填入 config.ini 的 RemoteApiKey
3. 设置 RemoteEnable=true
4. 重启 ckmsd 或发送 SIGHUP 热重载
部署后务必执行以下安全配置。
- 修改默认密码:Web 后台默认密码
admin123,部署后立即修改 - 保护 API Key:
RemoteApiKey等同于服务器身份凭证,切勿泄露 - 端口管控:1688 端口暴露公网时,务必启用 Anti-CC 和白名单,防止被滥用
- 启用 HTTPS:远程管理走 HTTP 时 API Key 以明文传输,生产环境建议
make HAVE_SSL=1并使用https://地址
- Web 后台数据写入为原子操作(临时文件 + rename +
.bak备份),多服务器并发心跳不会丢数据 data/目录需对 Web 服务器用户可读写,建议定期备份
- SSL 可选:默认不启用 SSL,远程管理走纯 HTTP。仅当
RemoteUrl为https://时才需make HAVE_SSL=1 - i386 编译:需
gcc-multilib+libc6-dev-i386,使用make CFLAGS=-m32 LDFLAGS=-m32 - MinGW 编译:原生 PE,不依赖 Cygwin。启用
HAVE_SSL时需额外链接-lssl -lcrypto -lcrypt32 - MS RPC:仅 Windows 下可用(
make USE_MSRPC=1),提供与原生 KMS 更高的兼容性
- 充值计数:KMS 服务器需达到最小客户端计数才会响应激活(Windows 25 个,Office 5 个)。可用
ckms手动发送请求充值 - 防火墙:确保 TCP 1688 入站放行;启用远程管理时确保
ckmsd可访问RemoteUrl - 日志磁盘:日志按天写入
LogDir,注意磁盘空间。LogRetentionDays=0表示永久保留 - NAT 环境:
RemoteIPEnable=false时上报本地网卡 IP;服务器在 NAT 后时启用该项可上报真实公网 IP - 公网防护:生产环境建议使用
-o3(仅私网监听 + 拒绝公网连接),获得最高安全等级
man/ 目录提供完整的 man page:
| 文件 | 内容 |
|---|---|
vlmcsd.7 |
KMS 概念与快速上手 |
vlmcsd.8 |
ckmsd 全部命令行选项 |
vlmcs.1 |
ckms 客户端使用 |
vlmcsdmulti.1 |
多调用二进制说明 |
vlmcsd.ini.5 |
INI 配置文件语法 |
vlmcsd-floppy.7 |
floppy144.vfd 启动盘使用 |
ckms/
├── src/ # 核心源码
│ ├── ckms_config.c # INI 配置加载 + 热重载
│ ├── ckms_acl.c # Anti-CC + 黑白名单
│ ├── ckms_log.c # 按天日志 + 自动清理
│ ├── ckms_remote.c # 心跳上报 + 配置同步
│ ├── ckms_service.c # Windows 系统服务
│ ├── vlmcsd.c # KMS 服务端主程序
│ ├── vlmcs.c # KMS 客户端主程序
│ ├── vlmcsdmulti.c # 多调用入口
│ ├── kms.c / crypto.c # KMS 协议与加密
│ ├── rpc.c / msrpc-*.c # MS RPC 支持
│ ├── libkms.c # 静态库实现
│ ├── GNUmakefile # 构建脚本
│ └── config.h # 编译时配置
├── man/ # man page 源文件
├── web/ # PHP 管理后台
│ ├── index.php # 管理面板
│ ├── status.php # 公开状态页
│ └── api/ # REST API
│ ├── _lock.php # 原子 JSON 读写(崩溃安全)
│ ├── heartbeat.php # 心跳接收
│ ├── config.php # 配置同步
│ ├── apply.php # 白名单申请
│ ├── geo.php # GeoIP 解析
│ └── status.php # 状态查询
├── ckms_dist/ # 预编译多平台二进制
├── ckms_dist_static/ # 预编译静态链接版本
├── dist/ # 打包输出
├── config.ini # CKMS 默认配置
├── GNUmakefile # 主构建入口
├── Makefile # BSD make 兼容包装
├── Dockerfile.build # Docker 多架构构建
├── build-all.sh # Linux 三架构交叉编译
├── build-linux.sh # Linux 构建脚本(开发用)
├── build-release.sh # 全平台发布构建脚本
└── README* # 文档
- 本项目使用 MIT 协议,详见 LICENSE
- 核心 KMS 实现源自 vlmcsd(Hotbird64)
- Debian / Docker 子模块分别托管在
Wind4/vlmcsd-debian、Wind4/vlmcsd-docker
CKMS · 由 xuanlove 维护