0x01 前言

我一直想尝试使用windows 2016,以便测试其中的新功能,但无奈找不到激活方法,直至今天我才重新想起这个新的服务器系统。

我无意中发现一个打包好的KMS服务可以用于激活,该激活途径可以激活包括windows Vista与之后的所有windows操作系统,同时支持激活office 2010、2013和2016。

激活的镜像版本仅限批量授权版本,即VL版。

但需要注意的是,该方法不可用于商业用途!仅能用于实验性质的激活,如果有需要,请购买正版密钥。

在这里要推荐Office 365:

请注意!切勿将该服务在公网公开或用于商业用途,否则将有可能触犯法律。

0x02 准备

我这里使用centos作为基础系统,我使用的是由luodaoyi打包的docker镜像,因此还需要安装docker。以下是项目地址:

首先升级centos到最新版:

[root@kmspico ~]# yum update -y

然后安装docker并启动:

#安装
[root@kmspico ~]# yum install docker -y

#设为开机启动
[root@kmspico ~]# systemctl enable docker

#立即启动
[root@kmspico ~]# systemctl start docker

准备好docker后,先来搜索相关的镜像:

[root@kmspico ~]# docker search kms-server | grep luodaoyi
docker.io   docker.io/luodaoyi/kms-server            kms server                                      14                   [OK]

然后是pull到本地:

[root@kmspico kms-server]# docker pull luodaoyi/kms-server
Using default tag: latest
Trying to pull repository docker.io/luodaoyi/kms-server ... 
latest: Pulling from docker.io/luodaoyi/kms-server
88286f41530e: Pull complete 
594d7a6fa71d: Pull complete 
Digest: sha256:4dbfe5c8409185cfd9aaa909887579d3953cd49329cb6531416a5cf031a6146c

0x03 运行

通过以下命令查询本地的docker镜像:

[root@kmspico ~]# docker images 
REPOSITORY                      TAG                 IMAGE ID            CREATED             SIZE
docker.io/luodaoyi/kms-server   latest              4f86d964ac52        3 weeks ago         4.09 MB

通过以下命令以守护模式启动该镜像:

[root@kmspico kms-server]# docker run -d docker.io/luodaoyi/kms-server
4be42484b6b0c14efd7df23fdc198b2a6f83e08229a1891ae1f6910851aed044

启动成功后会抛出CONTAINER ID,可以通过以下命令查看正在运行的容器:

[root@kmspico ~]# docker ps 
CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS              PORTS               NAMES
4be42484b6b0        docker.io/luodaoyi/kms-server   "/bin/sh -c 'vlmcsdmu"   4 minutes ago       Up 4 minutes        1688/tcp            serene_carson

从上面的信息可以看出,该容器正在监听TCP 1688这个端口。可是当你检查系统端口监听的相关信息时却没有1688这个端口的相关信息:

[root@kmspico ~]# netstat -anp | grep 1688

再检查iptbales可以发现相关信息:

Chain POSTROUTING (policy ACCEPT 1225 packets, 73548 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 MASQUERADE  all  --  *      !docker0  172.17.0.0/16        0.0.0.0/0           
    0     0 MASQUERADE  tcp  --  *      *       172.17.0.2           172.17.0.2           tcp dpt:1688

在iptables NAT表POSTROUTING链中可以发现docker是使用iptables做端口映射的,并不是使用socker监听端口。

那我就可以使用iptables将该端口往外映射,对外提供服务。首先查看我目前使用的网卡名称:

[root@kmspico ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:50:56:b6:b5:a0 brd ff:ff:ff:ff:ff:ff
    inet 10.1.1.123/24 brd 10.1.1.255 scope global dynamic ens160
       valid_lft 5591sec preferred_lft 5591sec
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:c8:df:62:d9 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 scope global docker0
       valid_lft forever preferred_lft forever
11: vethf556937@if10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP 
    link/ether 9a:b1:ef:a0:db:fb brd ff:ff:ff:ff:ff:ff link-netnsid 0

ens160就是我的网卡名称,那么iptables的转发命令如下:

iptables -t nat -A PREROUTING -i ens160 -p tcp --dport 1688 -j DNAT --to 172.17.0.2:1688

完成后记得保存并重新加载iptables:

#保存
[root@kmspico ~]# service iptables save

#重新加载
[root@kmspico ~]# service iptables reload

最后,如果需要停止该docker镜像,请运行以下命令:

[root@kmspico ~]# docker stop 
4be42484b6b0c14efd7df23fdc198b2a6f83e08229a1891ae1f6910851aed044  serene_carson   
                                                  
[root@kmspico ~]# docker stop 4be42484b6b0c14efd7df23fdc198b2a6f83e08229a1891ae1f6910851aed044

输入docker stop后按两下TAB键,找到相关的ID,复制到命令行中即可。

0x04 激活

windows会以180天为一个周期,循环询问KMS服务器以激活自身,所以请为你的KMS服务器配置一个固定IP或域名。

以管理员权限打开CMD窗口,并输入以下命令:

slmgr /skms 10.1.1.123

请将上面命令中的IP地址替换为你实际的IP或域名。

然后使用以下命令强制系统立即尝试激活:

slmgr /ato

通过以下命令可以查看KMS相关的日志:

[root@kmspico ~]# docker logs 4be42484b6b0c14efd7df23fdc198b2a6f83e08229a1891ae1f6910851aed044 
2017-10-15 06:17:24: Listening on 0.0.0.0:1688
2017-10-15 06:17:24: vlmcsd 1111, built 2017-06-17 00:53:17 UTC started successfully
2017-10-15 06:49:43: IPv4 connection accepted: 10.1.1.124:49742.
2017-10-15 06:49:43: KMS v6.0 request from WIN-9A1DUCF4A0A for Windows Server 2016 Datacenter
2017-10-15 06:49:43: Sending ePID (randomized at program start): 06401-00206-522-593075-03-1045-9600.0000-0962017
2017-10-15 06:50:13: IPv4 connection closed: 10.1.1.124:49742.

至此,激活过程全部结束。到系统属性中可以检查激活的相关情况:

0x05 批量授权版本

在激活之前要确认系统版本是否为批量授权版本,也就是VL版。如果从MSDN i tell you这个站点中下载镜像,建议选择VL版,如:

文件名:cn_windows_10_multi-edition_vl_version_1709_updated_sept_2017_x64_dvd_100090774.iso
文件名:cn_windows_7_professional_with_sp1_vl_build_x64_dvd_u_677816.iso

文件名中带有VL字符的版本。

如果下载了非批量授权版本也没关系,只需要手动导入KMS Client Setup Key也可以使用KMS进行批量激活。不同版本的系统有不同的GVLK key,具体可以从微软官网找到:

找到相应的KMS Client Setup Key后使用管理员权限打开CMD窗口,执行以下命令即可导入KMS Client Setup Key至系统:

slmgr /ipk [your KMS Client Setup Key]

#如Windows Server 2016 Datacenter
slmgr /ipk CB7KF-BWN84-R7R2Y-793K2-8XDDG

请根据实际情况进行导入操作。如果不知道自己的系统版本,请在CMD窗口中执行以下命令:

wmic os get caption

#如
PS C:\WINDOWS\system32> wmic os get caption
Caption
Microsoft Windows 10 专业版

导入key后再次激活即可。

0x06 结语

其他需要注意的事项请关注镜像制作者的博客:

最后,还需要提醒一句:

请注意!切勿将该服务在公网公开或用于商业用途,否则将有可能触犯法律。