KMS 激活服务是用于激活本地网络中的计算机,并且无需将计算机专门链接到Microsoft激活的一种方案。使用的是KMS客户端-服务器的拓扑。作为KMS客户端的计算机可以使用DNS或者静态IP定位KMS服务器,当KMS服务器满足激活KMS资格的时候即可为计算机提供激活服务。
利用这个原理有很多人开发过KMS各种良莠不齐的KMS激活器,有些不法分子甚至会在程序中夹带各种恶意代码。vlmcsd提供了一种开源的以C语言编写的KMS模拟器,同时它是跨平台的可以在Win,linux,OS X等多种系统平台使用。
Contents
部署服务
以Linux(CentOS 6.5)为例:
1.根据自己使用的系统版本,CPU类型我们可以选择相应的二进制文件。例如我这里使用的是CentOS 6.5 x64,运行平台为Intel平台的KVM虚拟机,那么我就在binaries文件夹下找到\binaries\Linux\intel\static路径,选择vlmcsd-x64-musl-static。
2.在/usr/local下创建文件夹kms
mkdir -p /usr/local/kms
3.如果是从本地上传到/usr/local/kms目录,那么就需要重新赋予可执行权限
chmod u+x /usr/local/kms/vlmcsd-x64-musl-static
4.运行
/usr/local/kms/vlmcsd-x64-musl-static
5.开放防火墙 如果使用iptables防火墙,并且默认规则为reject或者drop,那么需要为kms服务器设置相应的放行规则
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 1688 -j ACCEPT
测试
使用vlmcs去测试服务端运行状况
以Windows为例,进入vlmcs-Windows-x64.exe 所在目录,按住shift右键在此位置打开命令行
vlmcs-Windows-x64.exe -v kms服务器地址
如果测试成功则显示如下内容
激活
使用管理员身份输入下列命令
slmgr /skms kms服务器地址 slmgr /ipk xxxxx-xxxxx-xxxxx-xxxxx-xxxxx slmgr /ato slmgr /xpr
kms使用的安装密匙微软已公布在官方文档中
其他
如果需要自启动,那么需要对linux系统加入如下的脚本:
#!/bin/sh # chkconfig: 2345 90 10 # description: Start or stop the kms server # ### BEGIN INIT INFO # Provides: vlmcsd # Required-Start: $network $syslog # Required-Stop: $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Description: Start or stop the kms server ### END INIT INFO name=kms-service path=/usr/local/kms/ bin=vlmcsd-x64-musl-static start(){ $path$bin RETVAL=$? if [ "$RETVAL" = "0" ]; then echo "$name start success" else echo "$name start failed" fi } stop(){ pid=`ps -ef | grep -v grep | grep -v ps | grep -i "${bin}" | awk '{print $2}'` if [ ! -z $pid ]; then kill -9 $pid RETVAL=$? if [ "$RETVAL" = "0" ]; then echo "$name stop success" else echo "$name stop failed" fi else echo "$name is not running" RETVAL=1 fi } status(){ pid=`ps -ef | grep -v grep | grep -v ps | grep -i "${bin}" | awk '{print $2}'` if [ -z $pid ]; then echo "$name is not running" RETVAL=1 else echo "$name is running with PID $pid" RETVAL=0 fi } case "$1" in 'start') start ;; 'stop') stop ;; 'status') status ;; 'restart') stop start RETVAL=$? ;; *) echo "Usage: $0 { start | stop | restart | status }" RETVAL=1 ;; esac exit $RETVAL