搭建kms服务器

xiaolv
16
2023-11-02

搭建kms服务器

环境说明

kms ( Key Management Service ) 实际上是微软官方推出的针对大客户的大批量激活工具,比如一个公司中,可能有上百台电脑,公司为他们统一购置了正版的 Windows 系统和 Office 套件。把这些电脑组成网络,中间设置一台 kms 服务器,微软将授权信息记录在 kms 服务器中,然后用 kms 服务器就可以方便地快速对网络中的计算机配置正版软件

想法是好的,这比 xp 时代的静态序列号激活要安全多了,但是这个设计有一个漏洞,就是在激活过程中,用户计算机只需要与局域网中的 kms 连接验证授权信息,而不需要向 Microsoft 服务器进行验证。所以一旦 kms 服务器的搭建被破解,激活微软软件就易如反掌

这就是 kms 的原理

常见的 win 端 kms 激活软件的基本原理就是在本机创建一个 kms server 虚拟机,然后对软件进行授权验证,一般一次只能激活180天,180天后自动续期

也可以搭建kms服务器替代这个kms server虚拟机

在windows或者linux系统上部署都是可以的,这里主要介绍下linux下的搭建步骤

参考网站:

自建KMS服务器 | 持续激活Windows - 腾讯云开发者社区-腾讯云 (tencent.com)

GitHub - Wind4/vlmcsd: KMS Emulator in C (currently runs on Linux including Android, FreeBSD, Solaris, Minix, Mac OS, iOS, Windows with or without Cygwin)

适用于 Windows Server 和 Windows 的密钥管理服务 (KMS) 客户端激活和产品密钥 | Microsoft Learn

centos系统信息:CentOS Linux release 7.9.2009 (Core)

搭建步骤

上述参考网站中有一键安装的脚本,但脚本里使用了wget、git命令,不一定能直接下载到文件,所以主要介绍源文件安装的方法:

建立kms存放目录

mkdir -p /usr/local/kms

下载kms服务器源文件并通过ftp放到对应目录下

这里我们选择第三个文件下载。第一个为二进制文件,第二个为zip文件

通过ftp将文件传到/usr/local/kms下面

解压文件并重命名

tar -xf vlmcsd-svn1113.tar.gz
mv vlmcsd-svn1113 vlmcsd

安装构建所需依赖

yum  -y install gcc make

构建文件

cd vlmcsd
make

执行kms

cd bin 
./vlmcsd

此时,我们的kms服务器已经搭建完成了,只需要在待激活的服务器上执行以下命令就可以激活windows和office

激活windows

在待激活的Windows系统中以管理员身份运行cmd

顺序执行以下命令

slmgr -ipk W3GGN-FT8W3-Y4M27-J84CP-Q3VJ9
# 最后一串字符为批量激活密钥,可以在微软官网查到,也可在参考网站出直接跳转
slmgr -skms 47.109.94.84
# 最后一串字符为kms服务器的域名,如果您没有域名,用您的服务器IP也是可以的
slmgr -ato

将kms程序设置为服务

为了方便管理,我们可以将kms程序设置为服务

vi /etc/init.d/kms

将下列脚本内容复制到启动文件中

#!/bin/bash
#chkconfig:85 15
​
DESC="kms daemon"
NAME=vlmcsd
DAEMON=/usr/local/kms/vlmcsd/bin/$NAME
SCRIPTNAME=/etc/init.d/$NAME
​
STAT=2
​
# 检测KMS运行状态
check_running(){
    PID=$(ps -ef | grep "vlmcsd" | grep -v grep | awk '{print $2}')
    if [ ! -z "$PID" ]; then
        STAT=0
    else
        STAT=1
    fi
}
​
do_start() {
    check_running
    if [ $STAT = 0 ]; then
    echo "KMS already running!"
        exit 0;
    else
        $DAEMON
    fi
    check_running
    if [ $STAT = 0 ]; then
        local_ip=`curl -4 ip.sb`
        echo "KMS start success!"
    elif [ $STAT = 1 ]; then
        echo "KMS start faild"
    fi
 }
​
 do_stop() {
     check_running
     if [ $STAT = 0 ]; then
            echo "KMS Stopping ..."
            kill $PID
            check_running
            if [ $STAT = 0 ]; then
                echo "KMS stop faild!"
            elif [ $STAT = 1 ]; then
                echo "KMS stop success!"
            fi
     elif [ $STAT = 1 ]; then
                 echo "KMS is not running"
     fi 
 }
     
 do_status(){
    check_running
    if [ $STAT = 0 ]; then
        echo "KMS is running"
    elif [ $STAT = 1 ]; then
        echo "KMS is not running"
    fi
 }
​
 case "$1" in
 start)
 do_start
 ;;
 stop)
 do_stop
 ;;
 restart)
 do_start
 do_stop
 ;;
 status)
 do_status
 ;;
 esac
​
 exit 0
​

之后就可以用service kms start|stop|restart|status来对kms进行管理了

动物装饰