Álvaro González Sotillo

Licencias GVLK de Microsoft con vlmcsd

El mecanismo de licencias GVLK (por volumen) de Microsoft siempre me pareció algo difícil de entender. Aprovechando que mi instituto ha adquirido un paquete de licencias de Microsoft, decidí que era el momento de experimentar con él.

Activación de productos Microsoft

Los productos de Microsoft necesitan ser activados. Una de las posibilidades es la activación por internet, en la que el producto se conecta a los servidores de Microsoft periódicamente para comprobar si su licencia es válida. Tras cada activación, el producto permanece activado por varias semanas o meses.

Licencias GLVK y servidores KMS

Para particulares y entornos SOHO, es aceptable introducir un número de licencia en cada ordenador y producto, pero para grandes empresas se necesita un mecanismo para activar multitud de ordenadores a la vez, preferiblemente con la misma licencia (para poder clonar equipos). Además, no siempre está disponible la conexión a Internet.

Una empresa puede instalar un servidor KMS, que es un sofware facilitado por Microsoft para que las licencias puedan activarse en la propia red local. Este servidor solo activa las licencias que la empresa ha contratado.

Vlmscd

vlmscd es una implementación independiente del protocolo de activación de licencias GLVK. Incluye un cliente para simular peticiones (vlmcs) y un servidor (vlmcsd). El servidor activa todas las solicitudes de licencia, y puede compilarse para una gran variedad de plataformas.

Existen otros productos similares, como py-kms. Su manual explica muy bien el funcionamiento de KMS.

Instalación en una Raspberry Pi

  1. El binario puede obtenerse compilando el código fuente, pero también se ofrecen precompilados. Para mi Raspberry Pi 4 con Raspbian he utilizado vlmcsd-armv7el-glibc.
  2. He instalado el binario en el directorio /opt/vlmcsd, y he creado un usuario para el servicio.

       	
       $ sudo adduser vlmcsd
       $ sudo mkdir /opt/vlmcsd
       $ sudo wget -O /opt/vlmcsd/vlmcsd-armv7el-glibc "https://github.com/kkkgo/vlmcsd/raw/master/binaries/Linux/arm/little-endian/glibc/vlmcsd-armv7el-glibc"
       $ sudo ln -s /opt/vlmcsd/vlmcsd-armv7el-glibc /opt/vlmcsd/vlmcsd
       $ sudo chmod +x /opt/vlmcsd/vlmcsd*
       $ sudo chown -R vlmcsd:vlmcsd /opt/vlmcsd
    
  3. Para que se ejecute al inicio, he añadido un servicio de systemd. Configuro el servicio para que las trazas acaben en syslog.

       	
       [Unit]
       Description=vlmcsd kms server
       Requires=networking.service
    
       [Service]
       Type=forking
       User=vlmcsd
       ExecStart=/opt/vlmcsd/vlmcsd -v -l syslog
    
       [Install]
       WantedBy=multi-user.target
    
  4. Habilito (para el próximo reinicio) y activo el servicio

       	
       $ sudo systemctl daemon-reload
       $ sudo systemctl enable vlmcsd
       $ sudo systemctl start vlmcsd
    
  5. Tras esto compruebo que el servicio se ha iniciado correctamente

    $ systemctl status vlmcsd.service
    ● vlmcsd.service - vlmcsd kms server
       Loaded: loaded (/lib/systemd/system/vlmcsd.service; enabled; vendor preset: enabled)
       Active: active (running) since Thu 2019-12-19 08:48:50 CET; 1h 7min ago
      Process: 7626 ExecStart=/opt/vlmcsd/vlmcsd -v -l syslog (code=exited, status=0/SUCCES
     Main PID: 7627 (vlmcsd)
        Tasks: 1 (limit: 4915)
       CGroup: /system.slice/vlmcsd.service
               └─7627 /opt/vlmcsd/vlmcsd -v -l syslog
    
    dic 19 08:48:50 PI systemd[1]: Starting vlmcsd kms server...
    dic 19 08:48:50 PI vlmcsd[7627]: vlmcsd 1112, built 2018-10-20 09:49:18 UTC starte
    dic 19 08:48:50 PI systemd[1]: Started vlmcsd kms server.
    

Configuración de los clientes

Configuración manual de los clientes

Los productos de Microsoft deben ser configurados para utilizar el nuevo sevidor KMS.

  • Microsoft Windows ofrece la utilidad slmgr. La opción /skms permite definir la dirección IP y puerto del servidor KMS
  • Microsoft Office se configura mediante ospp. Las opciones /sethst y /setprt permiten definir la IP y puerto del servidor KMS.

Configuración por autodescubrimiento DNS

Es posible configurar una entrada SRV en el servidor DNS para que los clientes localicen el servidor KMS. Para ello, hay que definir el servidor _vlmcs._tcp en el dominio de los equipos (suele definirlo el servidor de DHCP)

En mi Raspberry tengo ya instalado Pihole, por lo que utilizo su servidor DNS para definir el registro SRV _vlmcs._tcp.Home apuntando a vlmcs.Home y su correspondiente registro A. El puerto por defecto del servidor es 1688.

Defino también el registro SRV _vlmcs._tcp, porque la verdad no sé muy bien cuál de los dos se está usando 🤔.

srv-host=_vlmcs._tcp,vlmcs,1688
srv-host=_vlmcs._tcp.Home,vlmcs.Home,1688
address=/vlmcs/vlmcs.Home/10.3.0.111

Ejemplo de uso

En una máquina virtual he instalado Office 2013, y he intentando activarla con procesador de comandos de Windows con privilegios de administrador. La licencia introducida puede conseguirse en la documentación de Microsoft.

C:\Program Files\Microsoft Office\Office15>cscript ospp.vbs /inpkey:yc7dk-g2np3-2qqc3-j6h88-gvgxt
Microsoft (R) Windows Script Host versión 5.8
Copyright (C) Microsoft Corporation 1996-2006. Reservados todos los derechos.

---Processing--------------------------
---------------------------------------
<Product key installation successful>
---------------------------------------
---Exiting-----------------------------

C:\Program Files\Microsoft Office\Office15>cscript ospp.vbs /act
Microsoft (R) Windows Script Host versión 5.8
Copyright (C) Microsoft Corporation 1996-2006. Reservados todos los derechos.

---Processing--------------------------
---------------------------------------
Installed product key detected - attempting to activate the following product:
SKU ID: b322da9c-a2e2-4058-9e4e-f59a6970bd69
LICENSE NAME: Office 15, OfficeProPlusVL_KMS_Client edition
LICENSE DESCRIPTION: Office 15, VOLUME_KMSCLIENT channel
Last 5 characters of installed product key: GVGXT
<Product activation successful>
---------------------------------------
---------------------------------------
---Exiting-----------------------------

En el servidor se consigue la siguiente traza:

Dec 19 10:13:49 PI vlmcsd[8156]: IPv4 connection accepted: 10.3.0.240:49187.
Dec 19 10:13:49 PI vlmcsd[8156]: <<< Incoming KMS request
Dec 19 10:13:49 PI vlmcsd[8156]: Protocol version                : 4.0
Dec 19 10:13:49 PI vlmcsd[8156]: Client is a virtual machine     : No
Dec 19 10:13:49 PI vlmcsd[8156]: Licensing status                : 2 (OOB grace)
Dec 19 10:13:49 PI vlmcsd[8156]: Remaining time (0 = forever)    : 43185 minutes
Dec 19 10:13:49 PI vlmcsd[8156]: Application ID                  : 0ff1ce15-a989-479d-af46-f275c6370663 (Unknown)
Dec 19 10:13:49 PI vlmcsd[8156]: SKU ID (aka Activation ID)      : b322da9c-a2e2-4058-9e4e-f59a6970bd69 (Unknown)
Dec 19 10:13:49 PI vlmcsd[8156]: KMS ID (aka KMS counted ID)     : e6a6f1bf-9d40-40c3-aa9f-c77ba21578c0 (Unknown)
Dec 19 10:13:49 PI vlmcsd[8156]: Client machine ID               : 7b523f81-f366-4703-9ba3-eb43b00554c5
Dec 19 10:13:49 PI vlmcsd[8156]: Previous client machine ID      : 00000000-0000-0000-0000-000000000000
Dec 19 10:13:49 PI vlmcsd[8156]: Client request timestamp (UTC)  : 2019-12-19 09:13:47
Dec 19 10:13:49 PI vlmcsd[8156]: Workstation name                : alumno-PC
Dec 19 10:13:49 PI vlmcsd[8156]: N count policy (minimum clients): 5
Dec 19 10:13:49 PI vlmcsd[8156]: >>> Sending response, ePID source = randomized at program start
Dec 19 10:13:49 PI vlmcsd[8156]: Protocol version                : 4.0
Dec 19 10:13:49 PI vlmcsd[8156]: KMS host extended PID           : 03612-00206-255-636601-03-2107-17763.0000-2782018
Dec 19 10:13:49 PI vlmcsd[8156]: Client machine ID               : 7b523f81-f366-4703-9ba3-eb43b00554c5
Dec 19 10:13:49 PI vlmcsd[8156]: Client request timestamp (UTC)  : 2019-12-19 09:13:47
Dec 19 10:13:49 PI vlmcsd[8156]: KMS host current active clients : 10
Dec 19 10:13:49 PI vlmcsd[8156]: Renewal interval policy         : 10080
Dec 19 10:13:49 PI vlmcsd[8156]: Activation interval policy      : 120

Tras esto, la licencia queda activada y puede consultarse su estado

C:\Program Files\Microsoft Office\Office15>cscript ospp.vbs /dstatus
Microsoft (R) Windows Script Host versión 5.8
Copyright (C) Microsoft Corporation 1996-2006. Reservados todos los derechos.  

---Processing--------------------------
---------------------------------------
SKU ID: b322da9c-a2e2-4058-9e4e-f59a6970bd69
LICENSE NAME: Office 15, OfficeProPlusVL_KMS_Client edition
LICENSE DESCRIPTION: Office 15, VOLUME_KMSCLIENT channel
BETA EXPIRATION: 01/01/1601
LICENSE STATUS:  ---LICENSED---
REMAINING GRACE: 179 days  (259190 minute(s) before expiring)
Last 5 characters of installed product key: GVGXT
        KMS machine name from DNS: vlmcs.Home:1688
        Activation Interval: 120 minutes
        Renewal Interval: 10080 minutes
        KMS host caching: Enabled
---------------------------------------
---------------------------------------
---Exiting-----------------------------

Qué hacen los activadores alternativos de Office

Existen varios productos que se anuncian como activadores / crackers de productos de Microsoft. Tras este experimento se puede deducir que su forma de funcionamiento es:

  1. Instalan un servidor KMS local
  2. Determinan las versiones de Windows y Office instaladas
  3. Localizan las licencias GVLK apropiadas
  4. Utilizan ossp.vbs y slmgr para instalar y activar dichas licencias
  5. El servidor KMS queda habilitado como un servicio para futuras activaciones