Welcome to the py-kms documentation!
Contents:
Contributing
You want to improve this project? Awesome! But before you write or modify the existing source code, please note the following guideline:
Always make sure to add your changes to the wiki.
8-space indentation without tabs.
Docstrings as this:
""" This is single line docstring. """
""" This is a
""" multiline comment.
Wrap lines only if really long (it does not matter 79 chars return)
For the rest a bit as it comes with a look at PEP8 :)
Documentation
What follows are some detailed explanations how the KMS infrastructure works.
Understanding Key Management Service
KMS activates Microsoft products on a local network, eliminating the need for individual computers to connect to Microsoft. To do this, KMS uses a client–server topology. A KMS client locates a KMS server by using DNS or a static configuration, then contact it by using Remote Procedure Call (RPC) and tries to activate against it. KMS can activate both physical computers and virtual machines, but a network must meet or exceed the activation threshold (minimum number of computers that KMS requires) of 25. For activation, KMS clients on the network need to install a KMS client key (General Volume License Key, GVLK), so the product no longer asks Microsoft server but a user–defined server (the KMS server) which usually resides in a company’s intranet.
py-kms is a free open source KMS server emulator written in Python, while Microsoft gives their KMS server only to corporations that signed a Select contract. Furthermore py-kms never refuses activation since it is without
restrictions, while the Microsoft KMS server only activates the products the customer has paid for. py-kms supports KMS protocol versions 4
, 5
and 6
.
Although py-kms does neither require an activation key nor any payment, it is not meant to run illegal copies of Windows. Its purpose is to ensure that owners of legal copies can use their software without restrictions, e.g. if you buy a new computer or motherboard and your key will be refused activation from Microsoft servers due to hardware changes.
Activation with py-kms is achieved with the following steps:
Run py-kms on a computer in the network (this is KMS server or local host).
Install the product on client (or said remote host, which is the computer sending data to local host) and enter the GVLK.
Configure the client to use the KMS server.
Note that KMS activations are only valid for 180 days, the activation validity interval, or 30 to 45 days with consumer-only products. To remain activated, KMS client computers must renew their activation by connecting to the KMS server at least once every 180 days. For this to work, you have to should ensure that a KMS server is always reachable for all clients on the network. Also remember you can’t activate Windows 8.1 (and above) on a KMS server hosted on the same machine (the KMS server must be a different computer than the client).
About GVLK keys
The GVLK keys for products sold via volume license contracts (renewal every 180 days) are published on Microsoft’s Technet web site.
Windows: https://technet.microsoft.com/en-us/library/jj612867.aspx
Office 2010: https://technet.microsoft.com/en-us/library/ee624355(v=office.14).aspx#section2_3
Office 2013: https://technet.microsoft.com/en-us/library/dn385360.aspx
Office 2016: https://technet.microsoft.com/en-en/library/dn385360(v=office.16).aspx
There are also not official keys for consumer-only versions of Windows that require activation renewal every 45 days (Windows 8.1) or 30 days (Windows 8). A more complete and well defined list is available here.
SLMGR and OSPP commands
The software License Manager (slmgr.vbs
) is a Visual Basic script used to configure and retrieve Volume Activation information. The script can be run locally or remotely on the target computer, using the Windows-based script host
(wscript.exe
) or the command-based script host (cscript.exe
) - administrators can specify which script engine to use. If no script engine is specified, SLMGR runs using the default script engine (it is recommended to utilize
the cscript.exe
script engine that resides in the system32 directory). The Software Licensing Service must be restarted for any changes to take effect. To restart it, the Microsoft Management Console (MMC) Services can be used or
running the following command:
net stop sppsvc && net start sppsvc
The SLMGR requires at least one parameter. If the script is run without any parameters, it displays help information. The general syntax of slmgr.vbs
is as follows (using the cscript.exe
as the script engine):
cscript slmgr.vbs /parameter
cscript slmgr.vbs [ComputerName] [User] [Password] [Option]
Where command line options are:
[ComputerName] Name of a remote computer (default is local computer).
[User] Account with the required privilege on the remote computer.
[Password] Password for the account with required privileges on the remote compute.
[Option] Options are shown in the table below.
SLMGR
Following tables lists SLMGR more relevant options and a brief description of each. Most of the parameters configure the KMS host.
Global options | Description |
---|---|
/ipk <ProductKey> |
Attempts to install a 5×5 ProductKey for Windows or other application identified by the ProductKey. If the key is valid, this is installed. If a key is already installed, it's silently replaced. |
/ato [ActivationID] |
Prompts Windows to attempt online activation, for retail and volume systems with KMS host key. Specifying the ActivationID parameter isolates the effects of the option to the edition associated with that value. |
/dli [ActivationID | All] |
Display license information. Specifying the ActivationID parameter displays the license information for the specified edition associated with that ActivationID. Specifying All will display all applicable installed products’ license information. Useful for retrieve the current KMS activation count from the KMS host. |
/dlv [ActivationID | All] |
Display detailed license information. |
/xpr [ActivationID] |
Display the activation expiration date for the current license state. |
Advanced options | Description |
---|---|
/cpky |
Some servicing operations require the product key to be available in the registry during Out-of-Box Experience (OOBE) operations. So this option removes the product key from the registry to prevent from being stolen by malicious code. |
/ilc <LicenseFile> |
Installs the LicenseFile specified by the required parameter. |
/rilc |
Reinstalls all licenses stored in %SystemRoot%\system32\oem and %SystemRoot%\System32\spp\tokens. |
/rearm |
Resets the activation timers. |
/rearm-app <ApplicationID> |
Resets the licensing status of the specified application. |
/rearm-sku <ApplicationID> |
Resets the licensing status of the specified SKU. |
/upk [ActivationID] |
Uninstalls the product key of the current Windows edition. After a restart, the system will be in an unlicensed state unless a new product key is installed. |
/dti [ActivationID] |
Displays installation ID for offline activation of the KMS host for Windows (default) or the application that is identified when its ActivationID is provided. |
/atp [ConfirmationID][ActivationID] |
Activate product with user-provided ConfirmationID. |
KMS client options | Description |
---|---|
/skms <Name[:Port] | : port> [ActivationID] |
Specifies the name and the port of the KMS host computer to contact. Setting this value disables auto-detection of the KMS host. If the KMS host uses IPv6 only, the address must be specified in the format [hostname]:port. |
/skms-domain <FQDN> [ActivationID] |
Sets the specific DNS domain in which all KMS SRV records can be found. This setting has no effect if the specific single KMS host is set with the /skms option. Use this option, especially in disjoint namespace environments, to force KMS to ignore the DNS suffix search list and look for KMS host records in the specified DNS domain instead. |
/ckms [ActivationID] |
Removes the specified KMS hostname, address, and port information from the registry and restores KMS auto-discovery behavior. |
/skhc |
Enables KMS host caching (default), which blocks the use of DNS priority and weight after the initial discovery of a working KMS host. If the system can no longer contact the working KMS host, discovery will be attempted again. |
/ckhc |
Disables KMS host caching. This setting instructs the client to use DNS auto-discovery each time it attempts KMS activation (recommended when using priority and weight). |
/sai <ActivationInterval> |
Changes how often a KMS client attempts to activate itself when it cannot find a KMS host. Replace ActivationInterval with a number of minutes between 15 minutes an 30 days. The default setting is 120. |
/sri <RenewalInterval> |
Changes how often a KMS client attempts to renew its activation by contacting a KMS host. Replace RenewalInterval with a number of minutes between 15 minutes an 30 days. The default setting is 10080 (7 days). |
/sprt <PortNumber> |
Sets the TCP communications port on a KMS host. It replaces PortNumber with the TCP port number to use. The default setting is 1688. |
/sdns |
Enables automatic DNS publishing by the KMS host. |
/cdns |
Disables automatic DNS publishing by a KMS host. |
/spri |
Sets the priority of KMS host processes to Normal. |
/cpri |
Set the KMS priority to Low. |
/act-type [ActivationType] [ActivationID] |
Sets a value in the registry that limits volume activation to a single type. ActivationType 1 limits activation to active directory only; 2 limits it to KMS activation; 3 to token-based activation. The 0 option allows any activation type and is the default value. |
OSPP
The Office Software Protection Platform script (ospp.vbs
) can help you to configure and test volume license editions of Office client products. You must open a command prompt by using administrator permissions and navigate to the
folder that contains the mentioned script. The script is located in the folder of the Office installation (use \Office14
for Office 2010, \Office15
for Office 2013 and \Office16
for Office 2016): %installdir%\Program Files\Microsoft Office\Office15
.
If you are running a 32-bit Office on a 64-bit operating system, the script is located in the folder: %installdir%\Program Files (x86)\Microsoft Office\Office15
.
Running OSPP requires the cscript.exe
script engine. To see the help file, type the following command, and then press ENTER:
cscript ospp.vbs /?
The general syntax is as follows:
cscript ospp.vbs [Option:Value] [ComputerName] [User] [Password]
Where command line options are:
[Option:Value] Specifies the option and Value to use to activate a product, install or uninstall a product key, install and display license information, set KMS host name and port, and remove KMS host. The options and values are listed in the tables below.
[ComputerName] Name of the remote computer. If a computer name is not provided, the local computer is used.
[User] Account that has the required permission on the remote computer.
[Password] Password for the account. If a user account and password are not provided, the current credentials are used.
Global options | Description |
---|---|
/act |
Activates installed Office product keys. |
/inpkey:<ProductKey> |
Installs a ProductKey (replaces existing key) with a user-provided ProductKey. |
/unpkey:<ProductKey> |
Uninstalls an installed ProductKey with the last five digits of the ProductKey to uninstall (as displayed by the /dstatus option). |
/inslic:<LicenseFile> |
Installs a LicenseFile with user-provided path of the .xrm-ms license. |
/dstatus |
Displays license information for installed product keys. |
/dstatusall |
Displays license information for all installed licenses. |
/dhistoryacterr |
Displays the failure history for MAK / Retail activation. |
/dinstid |
Displays Installation ID for offline activation. |
/actcid:<ConfirmationID> |
Activates product with user-provided ConfirmationID. |
/rearm |
Resets the licensing status for all installed Office product keys. |
/rearm:<ApplicationID> |
Resets the licensing status for an Office license with a user-provided SKUID value. Use this option with the SKUID value specified by using the /dstatus option if you have run out of rearms and have activated Office through KMS or Active Directory-based activation to gain an additional rearm. |
/ddescr:<ErrorCode> |
Displays the description for a user-provided ErrorCode. |
KMS client options | Description |
---|---|
/dhistorykms |
Displays KMS client activation history. |
/dcmid |
Displays KMS client computer ID (CMID) |
/sethst:<HostName> |
Sets a KMS host name with a user-provided HostName. |
/setprt:<Port> |
Sets a KMS port with a user-provided Port number. |
/remhst |
Removes KMS hostname (sets port to default). |
/cachst:<Value> |
Allows or denies KMS host caching. Parameter Value can be TRUE or FALSE. |
/actype:<Value> |
(Windows 8 and later only) Sets volume activation type. Parameter Value can be: 1 (for Active Directory-based), 2 (for KMS), 0 (for both). |
/skms-domain:<Value> |
(Windows 8 and later only) Sets the specific DNS domain in which all KMS SRV records can be found. This setting has no effect if the specific single KMS host is set by the /sethst option. Parameter Value is the Fully Qualified Domain Name (FQDN). |
/ckms-domain |
(Windows 8 and later only) Clears the specific DNS domain in which all KMS SRV records can be found. The specific KMS host is used if it is set by the /sethst option. Otherwise, auto-discovery of the KMS host is used. |
Supported Products
Note that it is possible to activate all versions in the VL (Volume License) channel, so long as you provide the proper key to let Windows know that it should be activating against a KMS server. KMS activation can’t be used for Retail channel products, however you can install a VL product key specific to your edition of Windows even if it was installed as Retail. This effectively converts Retail installation to VL channel and will allow you to activate from a KMS server. However, this is not valid for Office’s products, so Office, Project and Visio must be always volume license versions. Newer version may work as long as the KMS protocol does not change…
Further References
[1] https://forums.mydigitallife.net/threads/emulated-kms-servers-on-non-windows-platforms.50234
[2] https://forums.mydigitallife.net/threads/discussion-microsoft-office-2019.75232
[3] https://forums.mydigitallife.net/threads/miscellaneous-kms-related-developments.52594
[4] https://forums.mydigitallife.net/threads/kms-activate-windows-8-1-en-pro-and-office-2013.49686
[5] https://github.com/myanaloglife/py-kms
[6] https://github.com/Wind4/vlmcsd
[7] https://github.com/ThunderEX/py-kms
[8] https://github.com/CNMan/balala/blob/master/pkconfig.csv
[9] http://www.level7techgroup.com/docs/kms_overview.pdf
[10] https://www.dell.com/support/article/it/it/itbsdt1/sln266176/windows-server-using-the-key-management-service-kms-for-activation-of-volume-licensed-systems?lang=en
[11] https://social.technet.microsoft.com/Forums/en-US/c3331743-cba2-4d92-88aa-9633ac74793a/office-2010-kms-current-count-remain-at-10?forum=officesetupdeployprevious
[12] https://betawiki.net/wiki/Microsoft_Windows
[13] https://thecollectionbook.info/builds/windows
[14] https://www.betaarchive.com/forum/viewtopic.php%3Ft%3D29131+&cd=10&hl=it&ct=clnk&gl=it
[15] https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=12&cad=rja&uact=8&ved=2ahUKEwjmvZihtOHeAhVwyoUKHSjeD5Q4ChAWMAF6BAgHEAI&url=ftp%3A%2F%2Flynas.ittc.vu.lt%2Fpub%2FMicrosoft%2FWindows%2520Vista%2FWindows%2520Vista_Volume_Activation_2.0%2FWindows%2520Vista%2520Volume%2520Activation%2FWindows%2520Vista_Volume_Activation_2.0%2Fvolume%2520activation%25202%25200%2520step-by-step%2520guide.doc&usg=AOvVaw3kqhCu3xT-3r416DRGUUs_
[16] https://www.itprotoday.com/windows-78/volume-activation-server-2008
[17] https://docs.microsoft.com/en-us/windows-server/get-started-19/activation-19
[18] https://docs.microsoft.com/en-us/windows-server/get-started/windows-server-release-info
[19] https://support.microsoft.com/en-us/help/13853/windows-lifecycle-fact-sheet
Getting Started
What follows are some guides how to start the pykms_Server.py
script, which provides the emulated server.
Running as a service
You can simply manage a daemon that runs as a background process. This can be achieved by using any of the notes below or by writing your own solution.
Docker
If you wish to get py-kms just up and running without installing any dependencies or writing own scripts: Just use Docker ! Docker also solves problems regarding the explicit IPv4 and IPv6 usage (it just supports both). The following command will download, “install” and start py-kms and also keep it alive after any service disruption.
docker run -d --name py-kms --restart always -p 1688:1688 -v /etc/localtime:/etc/localtime:ro ghcr.io/py-kms-organization/py-kms
If you just want to use the image and don’t want to build them yourself, you can always use the official image at the GitHub Container Registry (ghcr.io/py-kms-organization/py-kms
). To ensure that you are using always the latest version you should check something like watchtower out!
Architectures
There are currently the following architectures available (if you need an other, feel free to open an issue):
amd64
arm32v6
Raspberry PI 1 (A, A+, B, B+, Zero)arm32v7
Raspberry PI 2 (B)arm64v8
Raspberry PI 2 (B v1.2), Raspberry PI 3 (A+, B, B+), Raspberry PI 4 (B)
Please note that any architecture other than the classic amd64
is slightly bigger (~4 MB), caused by the use of qemu during building.
Docker Compose
You can use docker-compose
instead of building and running the Dockerfile, so you do not need to respecify your settings again and again. The following Docker Compose file will deploy the latest
image with the log into your local directory.
Make sure to take a look into the entrypoint.py
script to see all supported variable mappings!
version: '3'
services:
kms:
image: ghcr.io/py-kms-organization/py-kms:python3
ports:
- 1688:1688
- 8080:8080
environment:
IP: "::"
HWID: RANDOM
LOGLEVEL: INFO
restart: always
volumes:
- ./db:/home/py-kms/db
- /etc/localtime:/etc/localtime:ro
Parameters
Below is a little bit more extended run command, detailing all the different supported environment variables to set. For further reference see the start parameters for the docker environment.
docker run -it -d --name py3-kms \
-p 8080:8080 \
-p 1688:1688 \
-v /etc/localtime:/etc/localtime:ro \
--restart unless-stopped ghcr.io/py-kms-organization/py-kms:[TAG]
You can omit the -p 8080:8080
option if you plan to use the minimal
or latest
image, which does not include the sqlite
module support.
Systemd
If you are running a Linux distro using systemd
, create the file: sudo nano /etc/systemd/system/py3-kms.service
, then add the following (change it where needed) and save:
[Unit]
Description=py3-kms
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=1
KillMode=process
User=root
ExecStart=/usr/bin/python3 </path/to/your/pykms/files/folder>/py-kms/pykms_Server.py :: 1688 -V DEBUG -F </path/to/your/log/files/folder>/pykms_logserver.log
[Install]
WantedBy=multi-user.target
Check syntax with sudo systemd-analyze verify py3-kms.service
, correct file permission (if needed) sudo chmod 644 /etc/systemd/system/py3-kms.service
, then reload systemd manager configuration sudo systemctl daemon-reload
,
start the daemon sudo systemctl start py3-kms.service
and view its status sudo systemctl status py3-kms.service
. Check if daemon is correctly running with cat </path/to/your/log/files/folder>/pykms_logserver.log
. Finally a
few generic commands useful for interact with your daemon here.
Upstart (deprecated)
If you are running a Linux distro using upstart
(deprecated), create the file: sudo nano /etc/init/py3-kms.conf
, then add the following (change it where needed) and save:
description "py3-kms"
author "SystemRage"
env PYTHONPATH=/usr/bin
env PYKMSPATH=</path/to/your/pykms/files/folder>/py-kms
env LOGPATH=</path/to/your/log/files/folder>/pykms_logserver.log
start on runlevel [2345]
stop on runlevel [016]
exec $PYTHONPATH/python3 $PYKMSPATH/pykms_Server.py :: 1688 -V DEBUG -F $LOGPATH
respawn
Check syntax with sudo init-checkconf -d /etc/init/py3-kms.conf
, then reload upstart to recognise this process sudo initctl reload-configuration
. Now start the service sudo start py3-kms
, and you can see the logfile
stating that your daemon is running: cat </path/to/your/log/files/folder>/pykms_logserver.log
. Finally a few generic commands useful for interact with your daemon here.
Windows
If you are using Windows, to run pykms_Server.py
as service you need to install pywin32, then you can create a file for example named kms-winservice.py
and put into it this code:
import win32serviceutil
import win32service
import win32event
import servicemanager
import socket
import subprocess
class AppServerSvc (win32serviceutil.ServiceFramework):
_svc_name_ = "py-kms"
_svc_display_name_ = "py-kms"
_proc = None
_cmd = ["C:\Windows\Python27\python.exe", "C:\Windows\Python27\py-kms\pykms_Server.py"] # UPDATE THIS - because Python 2.7 is end of life and you will use other parameters anyway
def __init__(self,args):
win32serviceutil.ServiceFramework.__init__(self,args)
self.hWaitStop = win32event.CreateEvent(None,0,0,None)
socket.setdefaulttimeout(60)
def SvcStop(self):
self.killproc()
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
win32event.SetEvent(self.hWaitStop)
def SvcDoRun(self):
servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
servicemanager.PYS_SERVICE_STARTED,
(self._svc_name_,''))
self.main()
def main(self):
self._proc = subprocess.Popen(self._cmd)
self._proc.wait()
def killproc(self):
self._proc.kill()
if __name__ == '__main__':
win32serviceutil.HandleCommandLine(AppServerSvc)
Now in a command prompt type C:\Windows\Python27\python.exe kms-winservice.py install
to install the service. Display all the services with services.msc
and find the service associated with py-kms, change the startup type
from manual
to auto
. Finally Start
the service. If this approach fails, you can try to use Non-Sucking Service Manager or Task Scheduler as described here.
Other Platforms
They might be useful to you:
Manual Execution
Dependencies
Python 3.x.
If the
tzlocal
module is installed, the “Request Time” in the verbose output will be converted into local time. Otherwise, it will be in UTC.It can use the
sqlite3
module, storing activation data in a database so it can be recalled again.Installation example on Ubuntu / Mint (
requirements.txt
is from the sources):sudo apt-get update
sudo apt-get install python3-pip
pip3 install -r requirements.txt
(on Ubuntu Server 22, you’ll needpysqlite3-binary
- see this issue)
Startup
A Linux user with ip addr
command can get his KMS IP (Windows users can try ipconfig /all
).
user@host ~ $ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
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
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp6s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether **:**:**:**:**:** brd ff:ff:ff:ff:ff:ff
inet 192.168.1.102/24 brd 192.168.1.255 scope global dynamic noprefixroute enp6s0
valid_lft 860084sec preferred_lft 860084sec
inet6 ****:****:****:****:****:****:****:****/64 scope global dynamic noprefixroute
valid_lft 6653sec preferred_lft 3052sec
inet6 ****::****:****:****:****/64 scope link noprefixroute
valid_lft forever preferred_lft forever
In the example above is 192.168.1.102
the ip we want to listen on, so it is this command (note you can omit the ip AND port specification if you just wish to listen on all interfaces with port 1688):
user@host ~/path/to/folder/py-kms $ python3 pykms_Server.py 192.168.1.102 1688
To stop pykms_Server.py
, in the same bash window where code running, simply press CTRL+C
.
Alternatively, in a new bash window, use kill <pid>
command (you can type ps aux
first and have the process killall <name_of_server>
.
Quick Guide
The following are just some brief notes about parameters handling. For a more detailed description see here.
To generate a random HWID use
-w
option:python3 pykms_Server.py -w RANDOM
.To get the HWID from any server use the client, for example type:
python3 pykms_Client.py :: 1688 -m Windows8.1 -V INFO
.To change your logfile path use
-F
option, for example:python3 pykms_Server.py -F /path/to/your/logfile.log -V DEBUG
.To view a minimal set of logging information use
-V MININFO
option, for example:python3 pykms_Server.py -F /path/to/your/logfile.log -V MININFO
.To redirect logging on stdout use
-F STDOUT
option, for example:python3 pykms_Server.py -F STDOUT -V DEBUG
.You can create logfile and view logging information on stdout at the same time with
-F FILESTDOUT
option, for example:python3 pykms_Server.py -F FILESTDOUT /path/to/your/logfile.log -V DEBUG
.With
-F STDOUTOFF
you disable all stdout messages (but a logfile will be created), for example:python3 pykms_Server.py -F STDOUTOFF /path/to/your/logfile.log -V DEBUG
.With
-F FILEOFF
you disable logfile creation.Select timeout (seconds) for py-kms with
-t0
option, for examplepython3 pykms_Server.py -t0 10
.Option
-y
enables printing asynchronously of messages (pretty / logging).
GVLK Keys
These are keys, which can be used to activate a product with py-kms (note this keys are provided officially by Microsoft). py-kms will not reject any of your keys, instead the product will often revalidate the given key - and sometimes even reject it by itself (often due too many uses - in that case try to use an other one).
Windows
Windows Server 2022
Product | GVLK |
---|---|
Windows Server 2022 Datacenter | WX4NM-KYWYW-QJJR4-XV3QB-6VM33 |
Windows Server 2022 Standard | VDYBN-27WPP-V4HQT-9VMD4-VMK7H |
Windows Server 2022 Datacenter Azure Edition | NTBV8-9K7Q8-V27C6-M2BTV-KHMXV |
Windows Server 2019
Product | GVLK |
---|---|
Windows Server 2019 Datacenter | WMDGN-G9PQG-XVVXX-R3X43-63DFG |
Windows Server 2019 Standard | N69G4-B89J2-4G8F4-WWYCC-J464C |
Windows Server 2019 Essentials | WVDHN-86M7X-466P6-VHXV7-YY726 |
Windows Server 2019 Azure Core | FDNH6-VW9RW-BXPJ7-4XTYG-239TB |
Windows Server 2019 Datacenter Semi-Annual Channel (v.1809) | 6NMRW-2C8FM-D24W7-TQWMY-CWH2D |
Windows Server 2019 Standard Semi-Annual Channel (v.1809) | N2KJX-J94YW-TQVFB-DG9YT-724CC |
Windows Server 2019 ARM64 | GRFBW-QNDC4-6QBHG-CCK3B-2PR88 |
Windows Server 2016
Product | GVLK |
---|---|
Windows Server 2016 Standard Semi-Annual Channel (v.1803) | PTXN8-JFHJM-4WC78-MPCBR-9W4KR |
Windows Server 2016 Datacenter Semi-Annual Channel (v.1803) | 2HXDN-KRXHB-GPYC7-YCKFJ-7FVDG |
Windows Server 2016 Datacenter Semi-Annual Channel (v.1709) | 6Y6KB-N82V8-D8CQV-23MJW-BWTG6 |
Windows Server 2016 Standard Semi-Annual Channel (v.1709) | DPCNP-XQFKJ-BJF7R-FRC8D-GF6G4 |
Windows Server 2016 ARM64 | K9FYF-G6NCK-73M32-XMVPY-F9DRR |
Windows Server 2016 Datacenter | CB7KF-BWN84-R7R2Y-793K2-8XDDG |
Windows Server 2016 Standard | WC2BQ-8NRM3-FDDYY-2BFGV-KHKQY |
Windows Server 2016 Essentials | JCKRF-N37P4-C2D82-9YXRT-4M63B |
Windows Server 2016 Cloud Storage | QN4C6-GBJD2-FB422-GHWJK-GJG2R |
Windows Server 2016 Azure Core | VP34G-4NPPG-79JTQ-864T4-R3MQX WNCYY-GFBH2-M4WTT-XQ2FP-PG2K9 |
Windows 10 & Windows 11
Product | GVLK |
---|---|
Windows 10/11 Professional Workstation | NRG8B-VKK3Q-CXVCJ-9G2XF-6Q84J |
Windows 10/11 Professional Workstation N | 9FNHH-K3HBT-3W4TD-6383H-6XYWF |
Windows 10/11 Enterprise G | YYVX9-NTFWV-6MDM3-9PT4T-4M68B |
Windows 10/11 Enterprise G N | 44RPN-FTY23-9VTTB-MP9BX-T84FV |
Windows 10 Enterprise LTSC 2019/2021 | M7XTQ-FN8P6-TTKYV-9D4CC-J462D |
Windows 10 Enterprise LTSC 2019/2021 N | 92NFX-8DJQP-P6BBQ-THF9C-7CG2H |
Windows 10/11 Remote Server | 7NBT4-WGBQX-MP4H7-QXFF8-YP3KX |
Windows 10 Enterprise for Remote Sessions Windows 10 Enterprise for virtual desktops Windows 11 Enterprise multi-session |
CPWHC-NT2C7-VYW78-DHDB2-PG3GK |
Windows 10 S (Lean) | NBTWJ-3DR69-3C4V8-C26MC-GQ9M6 |
Windows 10/11 Professional | W269N-WFGWX-YVC9B-4J6C9-T83GX |
Windows 10/11 Professional N | MH37W-N47XK-V7XM9-C7227-GCQG9 HMNWJ-V69R6-B2CDC-8P7VT-2373K |
Windows 10/11 Professional Education | 6TP4R-GNPTD-KYYHQ-7B7DP-J447Y |
Windows 10/11 Professional Education N | YVWGF-BXNMC-HTQYQ-CPQ99-66QFC |
Windows 10/11 Education | NW6C2-QMPVW-D7KKK-3GKT6-VCFB2 F48BJ-8NX82-MRVY9-PF8BW-HMHY2 |
Windows 10/11 Education N | 2WH4N-8QGBV-H22JP-CT43Q-MDWWJ PPWGW-8NW9C-J77Q9-8WHB9-QV64W |
Windows 10/11 Enterprise | NPPR9-FWDCX-D2C8J-H872K-2YT43 96YNV-9X4RP-2YYKB-RMQH4-6Q72D TN6CM-KCVXP-VVP8X-YVCF7-R9BDH 3PMKQ-YNVGT-HFJGG-2F4FQ-9D6T7 |
Windows 10/11 Enterprise N | DPH2V-TTNVB-4X9Q3-TJR4H-KHJW4 WGGHN-J84D6-QYCPR-T7PJ7-X766F |
Windows 10/11 Enterprise S | H76BG-QBNM7-73XY9-V6W2T-684BJ |
Windows 10/11 Enterprise S N | X4R4B-NV6WD-PKTVK-F98BH-4C2J8 |
Windows 10 Enterprise 2015 LTSB | WNMTR-4C88C-JK8YV-HQ7T2-76DF9 |
Windows 10 Enterprise 2015 LTSB N | 2F77B-TNFGY-69QQF-B8YKP-D69TJ RW7WN-FMT44-KRGBK-G44WK-QV7YK |
Windows 10 Enterprise 2016 LTSB | DCPHK-NFMTC-H88MJ-PFHPY-QJ4BJ |
Windows 10 Enterprise 2016 LTSB N | QFFDN-GRT3P-VKWWX-X7T3R-8B639 |
Windows 10/11 Home Windows 10/11 Core |
TX9XD-98N7V-6WMQ6-BX7FG-H8Q99 33QT6-RCNYF-DXB4F-DGP7B-7MHX9 |
Windows 10/11 Home N Windows 10/11 Core N |
3KHY7-WNT83-DGQKR-F7HPR-844BM CP4KF-NG6TC-9K6QF-P6GTT-H8RBM |
Windows 10/11 Home Single Language Windows 10 Core Single Language |
7HNRX-D7KGG-3K4RQ-4WPJ4-YTDFH 9HGRW-NH2CQ-XQHJD-YCRWB-6VJV7 4NX46-6DHCG-MR3PH-9FMCX-3RQ3G |
Windows 10/11 Home Country Specific Windows 10 Core Country Specific |
PVMJN-6DFY6-9CCP6-7BKTT-D3WVR JN9HR-MH7K4-DBPDD-TFTXF-Q9MMF |
Windows Server 2012 R2
Product | GVLK |
---|---|
Windows Server 2012 R2 Standard | D2N9P-3P6X9-2R39C-7RTCD-MDVJX |
Windows Server 2012 R2 Datacenter | W3GGN-FT8W3-Y4M27-J84CP-Q3VJ9 |
Windows Server 2012 R2 Essentials | KNC87-3J2TX-XB4WP-VCPJV-M4FWM |
Windows Server 2012 R2 Cloud Storage | 3NPTF-33KPT-GGBPR-YX76B-39KDD |
Windows 8.1
Product | GVLK |
---|---|
Windows 8.1 Professional | GCRJD-8NW9H-F2CDX-CCM8D-9D6T9 |
Windows 8.1 Professional N | HMCNV-VVBFX-7HMBH-CTY9B-B4FXY |
Windows 8.1 Professional WMC | 789NJ-TQK6T-6XTH8-J39CJ-J8D3P |
Windows 8.1 Enterprise | MHF9N-XY6XB-WVXMC-BTDCT-MKKG7 FHQNR-XYXYC-8PMHT-TV4PH-DRQ3H |
Windows 8.1 Enterprise N | TT4HM-HN7YT-62K67-RGRQJ-JFFXW NDRDJ-3YBP2-8WTKD-CK7VB-HT8KW |
Windows 8.1 Embedded Industry Automotive | VHXM3-NR6FT-RY6RT-CK882-KW2CJ |
Windows 8.1 Embedded Industry Enterprise | FNFKF-PWTVT-9RC8H-32HB2-JB34X |
Windows 8.1 Embedded Industry Professional | NMMPB-38DD4-R2823-62W8D-VXKJB |
Windows 8.1 Core | M9Q9P-WNJJT-6PXPY-DWX8H-6XWKK |
Windows 8.1 Core N | 7B9N3-D94CG-YTVHR-QBPX3-RJP64 |
Windows 8.1 Core Single Language | BB6NG-PQ82V-VRDPW-8XVD2-V8P66 |
Windows 8.1 Core Country Specific | NCTT7-2RGK8-WMHRF-RY7YQ-JTXG3 |
Windows 8.1 Core ARM | XYTND-K6QKT-K2MRH-66RTM-43JKP |
Windows 8.1 Core Connected | 3PY8R-QHNP9-W7XQD-G6DPH-3J2C9 |
Windows 8.1 Core Connected N | Q6HTR-N24GM-PMJFP-69CD8-2GXKR |
Windows 8.1 Core Connected Country Specific | R962J-37N87-9VVK2-WJ74P-XTMHR |
Windows 8.1 Core Connected Single Language | KF37N-VDV38-GRRTV-XH8X6-6F3BB |
Windows 8.1 Professional Student | MX3RK-9HNGX-K3QKC-6PJ3F-W8D7B |
Windows 8.1 Professional Student N | TNFGH-2R6PB-8XM3K-QYHX2-J4296 |
Windows Server 2012
Product | GVLK |
---|---|
Windows Server 2012 Windows 8 Core |
BN3D2-R7TKB-3YPBD-8DRP2-27GG4 |
Windows Server 2012 N Windows 8 Core N |
8N2M2-HWPGY-7PGT9-HGDD8-GVGGY |
Windows Server 2012 Single Language Windows 8 Core Single Language |
2WN2H-YGCQR-KFX6K-CD6TF-84YXQ |
Windows Server 2012 Country Specific Windows 8 Core Country Specific |
4K36P-JN4VD-GDC6V-KDT89-DYFKP |
Windows Server 2012 Standard | XC9B7-NBPP2-83J2H-RHMBY-92BT4 |
Windows Server 2012 MultiPoint Standard | HM7DN-YVMH3-46JC3-XYTG7-CYQJJ |
Windows Server 2012 MultiPoint Premium | XNH6W-2V9GX-RGJ4K-Y8X6F-QGJ2G |
Windows Server 2012 Datacenter | 48HP8-DN98B-MYWDG-T2DCC-8W83P |
Windows 8
Product | GVLK |
---|---|
Windows 8 Professional | NG4HW-VH26C-733KW-K6F98-J8CK4 |
Windows 8 Professional N | XCVCF-2NXM9-723PB-MHCB7-2RYQQ |
Windows 8 Professional WMC | GNBB8-YVD74-QJHX6-27H4K-8QHDG NQ3PX-BBY8Y-RRHMM-TBHFW-PJ866 |
Windows 8 Enterprise | 32JNW-9KQ84-P47T8-D8GGY-CWCK7 8M9BN-YB7W9-YV3VJ-7WMGG-MKH3V |
Windows 8 Enterprise N | JMNMF-RHW7P-DMY6X-RF3DR-X2BQT NCVKH-RB9D4-R86X8-GB8WG-4M2K6 |
Windows 8 Embedded Industry Professional | JVPDN-TBWJW-PD94V-QYKJ2-KWYQM RYXVT-BNQG7-VD29F-DBMRY-HT73M |
Windows 8 Embedded Industry Enterprise | NKB3R-R2F8T-3XCDP-7Q2KW-XWYQ2 |
Windows 8 Core Windows Server 2012 |
BN3D2-R7TKB-3YPBD-8DRP2-27GG4 |
Windows 8 Core N Windows Server 2012 N |
8N2M2-HWPGY-7PGT9-HGDD8-GVGGY |
Windows 8 Core Single Language Windows Server 2012 Single Language |
2WN2H-YGCQR-KFX6K-CD6TF-84YXQ |
Windows 8 Core Country Specific Windows Server 2012 Country Specific |
4K36P-JN4VD-GDC6V-KDT89-DYFKP |
Windows 8 Core ARM | DXHJF-N9KQX-MFPVR-GHGQK-Y7RKV |
Windows Server 2008 R2
Product | GVLK |
---|---|
Windows MultiPoint Server 2010 | 736RG-XDKJK-V34PF-BHK87-J6X3K |
Windows Server 2008 R2 Web | 6TPJF-RBVHG-WBW2R-86QPH-6RTM4 |
Windows Server 2008 R2 HPC edition | TT8MH-CG224-D3D7Q-498W2-9QCTX |
Windows Server 2008 R2 Standard | YC6KT-GKW9T-YTKYR-T4X34-R7VHC |
Windows Server 2008 R2 Enterprise | 489J6-VHDMP-X63PK-3K798-CPX3Y |
Windows Server 2008 R2 Datacenter | 74YFP-3QFB3-KQT8W-PMXWJ-7M648 |
Windows Server 2008 R2 for Itanium-based Systems | GT63C-RJFQ3-4GMB6-BRFB9-CB83V |
Windows 7
Product | GVLK |
---|---|
Windows 7 Professional | FJ82H-XT6CR-J8D7P-XQJJ2-GPDD4 MYKDJ-XV4CV-M2D3P-KDVY4-MPTW8 |
Windows 7 Professional N | MRPKT-YTG23-K7D7T-X2JMM-QY7MG |
Windows 7 Professional E | W82YF-2Q76Y-63HXB-FGJG9-GF7QX |
Windows 7 Enterprise | 33PXH-7Y6KF-2VJC9-XBBR8-HVTHH |
Windows 7 Enterprise N | YDRBP-3D83W-TY26F-D46B2-XCKRJ |
Windows 7 Enterprise E | C29WB-22CC8-VJ326-GHFJW-H9DH4 |
Windows 7 Embedded POSReady | YBYF6-BHCR3-JPKRB-CDW7B-F9BK4 |
Windows 7 Embedded ThinPC | 73KQT-CD9G6-K7TQG-66MRP-CQ22C |
Windows 7 Embedded Standard | XGY72-BRBBT-FF8MH-2GG8H-W7KCW |
Windows Server 2008
Product | GVLK |
---|---|
Windows Server 2008 Web | WYR28-R7TFJ-3X2YQ-YCY4H-M249D |
Windows Server 2008 Standard | TM24T-X9RMF-VWXK6-X8JC9-BFGM2 |
Windows Server 2008 Standard without Hyper-V | W7VD6-7JFBR-RX26B-YKQ3Y-6FFFJ |
Windows Server 2008 Enterprise | YQGMW-MPWTJ-34KDK-48M3W-X4Q6V |
Windows Server 2008 Enterprise without Hyper-V | 39BXF-X8Q23-P2WWT-38T2F-G3FPG |
Windows Server 2008 HPC edition (Computer Cluster) | RCTX3-KWVHP-BR6TB-RB6DM-6X7HP |
Windows Server 2008 Datacenter | 7M67G-PC374-GR742-YH8V4-TCBY3 |
Windows Server 2008 Datacenter without Hyper-V | 22XQ2-VRXRG-P8D42-K34TD-G3QQC |
Windows Server 2008 for Itanium-Based Systems | 4DWFP-JF3DJ-B7DTH-78FJB-PDRHK |
Windows Vista
Product | GVLK |
---|---|
Windows Vista Business | YFKBB-PQJJV-G996G-VWGXY-2V3X8 |
Windows Vista Business N | HMBQG-8H2RH-C77VX-27R82-VMQBT |
Windows Vista Enterprise | VKK3X-68KWM-X2YGT-QR4M6-4BWMV |
Windows Vista Enterprise N | VTC42-BM838-43QHV-84HX6-XJXKV |
Windows Previews
Product | GVLK |
---|---|
Windows Server 2019 Datacenter [Preview] | 6XBNX-4JQGW-QX6QG-74P76-72V67 |
Windows Server 2019 Standard [Preview] | MFY9F-XBN2F-TYFMP-CCV49-RMYVH |
Windows 10 Home / Core [Pre-Release] | ?????-?????-?????-?????-????? |
Windows 10 Home / Core Country Specific [Pre-Release] | ?????-?????-?????-?????-????? |
Windows 10 Home / Core N [Pre-Release] | ?????-?????-?????-?????-????? |
Windows 10 Home / Core Single Language [Pre-Release] | ?????-?????-?????-?????-????? |
Windows 10 Home / Core [Technical Preview] | ?????-?????-?????-?????-????? |
Windows 10 Education [Pre-Release] | ?????-?????-?????-?????-????? |
Windows 10 Education N [Pre-Release] | ?????-?????-?????-?????-????? |
Windows 10 Enterprise [Preview] | QNMXX-GCD3W-TCCT4-872RV-G6P4J |
Windows 10 Enterprise 2015 LTSB [Pre-Release] | ?????-?????-?????-?????-????? |
Windows 10 Enterprise 2015 LTSB N [Pre-Release] | ?????-?????-?????-?????-????? |
Windows 10 Enterprise N [Pre-Release] | ?????-?????-?????-?????-????? |
Windows 10 Professional N [Pre-Release] | ?????-?????-?????-?????-????? |
Windows 10 Professional [Preview] | XQHPH-N4D9W-M8P96-DPDFP-TMVPY |
Windows 10 Professional WMC [Pre-Release] | NKPM6-TCVPT-3HRFX-Q4H9B-QJ34Y 328NF-RTPQT-84J4Q-V44B8-78R2B |
Windows 10 IoT Core [Pre-Release] | 7NX88-X6YM3-9Q3YT-CCGBF-KBVQF NHY4C-KCMKV-V9K9M-7R43T-KTP64 |
Windows 10 Core Connected [Pre-Release] | DJMYQ-WN6HG-YJ2YX-82JDB-CWFCW QBWKP-NFVG3-CYGTT-724CF-FCYPW |
Windows 10 Core Connected N [Pre-Release] | JQNT7-W63G4-WX4QX-RD9M9-6CPKM TKDDW-N77V2-WXKMG-QY6WQ-WQJXM |
Windows 10 Core Connected Single Language [Pre-Release] | QQMNF-GPVQ6-BFXGG-GWRCX-7XKT7 RQ2MN-RKR94-P86YQ-TM76X-P3667 |
Windows 10 Core Connected Country Specific [Pre-Release] | FTNXM-J4RGP-MYQCV-RVM8R-TVH24 TNPJK-GCKPR-4WX4C-HCJHT-HFRC4 |
Windows 10 Professional S [Pre-Release] | 3NF4D-GF9GY-63VKH-QRC3V-7QW8P NFDD9-FX3VM-DYCKP-B8HT8-D9M2C |
Windows 10 Professional S N [Pre-Release] | KNDJ3-GVHWT-3TV4V-36K8Y-PR4PF 8Q36Y-N2F39-HRMHT-4XW33-TCQR4 |
Windows 10 Professional Student [Pre-Release] | YNXW3-HV3VB-Y83VG-KPBXM-6VH3Q N6X24-448X6-HYV8Y-8XQ3V-DRRDQ |
Windows 10 Professional Student N [Pre-Release] | 8G9XJ-GN6PJ-GW787-MVV7G-GMR99 XHGFB-WNK7Q-BG8VG-BG2KQ-KKWX9 |
Windows 10 PPIPro [Pre-Release (build 15063)] | ?????-?????-?????-?????-????? |
Windows 8 Core / Server 2012 [RC] | ?????-?????-?????-?????-????? |
Windows 8 Core / Server 2012 Country Specific [RC] | ?????-?????-?????-?????-????? |
Windows 8 Core / Server 2012 N [RC] | ?????-?????-?????-?????-????? |
Windows 8 Core / Server 2012 Single Language [RC] | ?????-?????-?????-?????-????? |
Windows 8 Core ARM64 [RC] | ?????-?????-?????-?????-????? |
Windows 8 Embedded Industry Professional [Beta] | ?????-?????-?????-?????-????? |
Windows 8 Embedded Industry Enterprise [Beta] | ?????-?????-?????-?????-????? |
Windows 8.1 Enterprise [Preview] | 2MP7K-98NK8-WPVF3-Q2WDG-VMD98 |
Windows 8.1 Professional (Blue) [Preview] | MTWNQ-CKDHJ-3HXW9-Q2PFX-WB2HQ |
Windows 8 Professional WMC [RC] | MY4N9-TGH34-4X4VY-8FG2T-RRDPV |
Windows 8.x [Preview] | MPWP3-DXNP9-BRD79-W8WFP-3YFJ6 |
Windows 8.x ARM64 [Preview] | ?????-?????-?????-?????-????? |
Windows Next Core Connected [Pre-Release] | ?????-?????-?????-?????-????? |
Windows Next Core Connected N [Pre-Release] | ?????-?????-?????-?????-????? |
Windows Next Core Connected Country Specific [Pre-Release] | ?????-?????-?????-?????-????? |
Windows Next Core Connected Single Language [Pre-Release] | ?????-?????-?????-?????-????? |
Windows Next Professional Student [Pre-Release] | ?????-?????-?????-?????-????? |
Windows Next Professional Student N [Pre-Release] | ?????-?????-?????-?????-????? |
Windows Next Embedded Industry Professional [Beta] | XY4TQ-CXNVJ-YCT73-HH6R7-R897X |
Windows Next Embedded Industry Enterprise [Beta] | XCNC9-BPK3C-KCCMD-FTDTC-KWY4G WN3XP-M9YFD-JRJ84-4J9FB-QJY4G |
Windows Next Embedded Industry Automotive [Beta] | GN2X2-KXTK6-P92FR-VBB9G-PDJFP 434XB-NH62H-JG7RG-P3KMD-XHHJC |
Windows Server Next MultiPoint Standard [Preview] | ?????-?????-?????-?????-????? |
Windows Server Next MultiPoint Premium [Preview] | ?????-?????-?????-?????-????? |
Windows Server Next Enterprise [Preview] | ?????-?????-?????-?????-????? |
Windows Server Next Standard [Preview] | ?????-?????-?????-?????-????? |
Windows Server Next Web [Preview] | ?????-?????-?????-?????-????? |
Windows Server Next HPC Edition [Preview] | ?????-?????-?????-?????-????? |
Windows Server Next HI [Preview] | 7VX4N-3VDHQ-VYGHB-JXJVP-9QB26 |
Enterprise ProdKey3 Win 9984 DLA/Bypass NQR Test | ?????-?????-?????-?????-????? |
Windows Server 2012 R2 Essentials [Preview] | ?????-?????-?????-?????-????? |
Windows Server 2016 Datacenter [Preview] | VRDD2-NVGDP-K7QG8-69BR4-TVFHB |
Windows Vista Business [Preview 1] | XQYF4-QVCMY-YXQRD-9QPV8-3YP9V |
Windows Vista Business [Preview 2] | YVT36-YVCP2-J97GQ-7T22R-RWV8P |
Windows Vista Business N [Preview] | HGBJ9-RWD6M-6HDGW-6T2XD-JQ66F |
Windows Vista Enterprise [Preview 1] | 3JHG3-Y66GP-B7F3K-JFVX2-VBH7K |
Windows Vista Enterprise [Beta-2 build 5384] | MF9PG-RQK7R-26BPJ-TWFYK-RHXCM |
Windows Vista Enterprise N [Preview] | ?????-?????-?????-?????-????? |
Windows Longhorn Web [Preview] | MDRCM-4WKCW-J93FF-J9Q48-M6KBB |
Windows Longhorn HPC Edition [Preview] | ?????-?????-?????-?????-????? |
Windows Longhorn Standard [Preview] | Q37JX-P3HHB-GKRH2-PDBKG-GGXPW |
Windows Longhorn Enterprise [Preview] | 7KYMQ-R788Q-4RF69-KTWKM-92PFJ |
Windows Longhorn Datacenter [Preview] | HR8VD-7DHG2-48378-M9D73-28F4T |
Windows Longhorn for Itanium Systems [Preview] | CWV9H-PHGPW-V93WV-QBQV9-8V336 |
Windows 7 Business [Preview] | ?????-?????-?????-?????-????? |
Windows 7 Business N [Preview] | ?????-?????-?????-?????-????? |
Windows 7 Enterprise [Preview] | ?????-?????-?????-?????-????? |
Windows 7 Enterprise N [Preview] | ?????-?????-?????-?????-????? |
Windows 7 Server Web [Preview] | ?????-?????-?????-?????-????? |
Windows 7 Server Standard [Preview] | ?????-?????-?????-?????-????? |
Windows 7 Server Standard without Hyper-V [Preview] | ?????-?????-?????-?????-????? |
Windows 7 Server Enterprise [Preview] | ?????-?????-?????-?????-????? |
Windows 7 Server Enterprise without Hyper-V [Preview] | ?????-?????-?????-?????-????? |
Windows 7 Server Datacenter [Preview] | ?????-?????-?????-?????-????? |
Windows 7 Server Datacenter without Hyper-V [Preview] | ?????-?????-?????-?????-????? |
Windows 7 Server for Itanium Systems [Preview] | ?????-?????-?????-?????-????? |
Windows Next Education [Pre-Release] | ?????-?????-?????-?????-????? |
Windows Next Education N [Pre-Release] | ?????-?????-?????-?????-????? |
Windows Next Professional [Pre-Release] | ?????-?????-?????-?????-????? |
Windows Next Professional N [Pre-Release] | ?????-?????-?????-?????-????? |
Windows Next Enterprise N [Pre-Release] | ?????-?????-?????-?????-????? |
Windows Next Enterprise [Pre-Release] | ?????-?????-?????-?????-????? |
Windows Next Enterprise S [Pre-Release] | ?????-?????-?????-?????-????? |
Windows Next Enterprise S N [Pre-Release] | ?????-?????-?????-?????-????? |
Windows Next Professional S [Pre-Release] | ?????-?????-?????-?????-????? |
Windows Next Professional S N [Pre-Release] | ?????-?????-?????-?????-????? |
Office
Office 2021
Product | GVLK |
---|---|
Office Access LTSC 2021 | WM8YG-YNGDD-4JHDC-PG3F4-FC4T4 |
Office Excel LTSC 2021 | NWG3X-87C9K-TC7YY-BC2G7-G6RVC |
Office Outlook LTSC 2021 | C9FM6-3N72F-HFJXB-TM3V9-T86R9 |
Office Powerpoint LTSC 2021 | TY7XF-NFRBR-KJ44C-G83KF-GX27K |
Office LTSC Professional Plus 2021 | FXYTK-NJJ8C-GB6DW-3DYQT-6F7TH |
Office Project Pro 2021 | FTNWT-C6WBT-8HMGF-K9PRX-QV9H8 |
Office Project Standard 2021 | J2JDC-NJCYY-9RGQ4-YXWMH-T3D4T |
Office Publisher LTSC 2021 | 2MW9D-N4BXM-9VBPG-Q7W6M-KFBGQ |
Office Skype for Business LTSC 2021 | HWCXN-K3WBT-WJBKY-R8BD9-XK29P |
Office LTSC Standard 2021 | KDX7X-BNVR8-TXXGX-4Q7Y8-78VT3 |
Office Visio LTSC Pro 2021 | KNH8D-FGHT4-T8RK3-CTDYJ-K2HT4 |
Office Visio LTSC Standard 2021 | MJVNY-BYWPY-CWV6J-2RKRT-4M8QG |
Office Word LTSC 2021 | TN8H9-M34D3-Y64V9-TR72V-X79KV |
Office 2019
Product | GVLK |
---|---|
Professional Plus 2019 [C2R] | VQ9DP-NVHPH-T9HJC-J9PDT-KTQRG |
Professional Plus 2019 | NMMKJ-6RK4F-KMJVX-8D9MJ-6MWKP |
Standard 2019 | 6NWWJ-YQWMR-QKGCB-6TMB3-9D9HK |
Project Professional 2019 [C2R] | XM2V9-DN9HH-QB449-XDGKC-W2RMW |
Project Professional 2019 | B4NPR-3FKK7-T2MBV-FRQ4W-PKD2B |
Project Standard 2019 | C4F7P-NCP8C-6CQPT-MQHV9-JXD2M |
Visio Professional 2019 [C2R] | N2CG9-YD3YK-936X4-3WR82-Q3X4H |
Visio Professional 2019 | 9BGNQ-K37YR-RQHF2-38RQ3-7VCBB |
Visio Standard 2019 | 7TQNQ-K3YQQ-3PFH7-CCPPM-X4VQ2 |
Access 2019 | 9N9PT-27V4Y-VJ2PD-YXFMF-YTFQT |
Excel 2019 | TMJWT-YYNMB-3BKTF-644FC-RVXBD |
Outlook 2019 | 7HD7K-N4PVK-BHBCQ-YWQRW-XW4VK |
PowerPoint 2019 | RRNCX-C64HY-W2MM7-MCH9G-TJHMQ |
Publisher 2019 | G2KWX-3NW6P-PY93R-JXK2T-C9Y9V |
Skype for Business 2019 | NCJ33-JHBBY-HTK98-MYCV8-HMKHJ |
Word 2019 | PBX3G-NWMT6-Q7XBW-PYJGG-WXD33 |
Office 2016
Product | GVLK |
---|---|
Professional Plus 2016 | XQNVK-8JYDB-WJ9W3-YJ8YR-WFG99 |
Standard 2016 | JNRGM-WHDWX-FJJG3-K47QV-DRTFM |
Project Professional 2016 | YG9NW-3K39V-2T3HJ-93F3Q-G83KT |
Project Professional 2016 [C2R] | WGT24-HCNMF-FQ7XH-6M8K7-DRTW9 |
Project Standard 2016 | GNFHQ-F6YQM-KQDGJ-327XX-KQBVC |
Project Standard 2016 [C2R] | D8NRQ-JTYM3-7J2DX-646CT-6836M |
Visio Professional 2016 | PD3PC-RHNGV-FXJ29-8JK7D-RJRJK |
Visio Professional 2016 [C2R] | 69WXN-MBYV6-22PQG-3WGHK-RM6XC |
Visio Standard 2016 | 7WHWN-4T7MP-G96JF-G33KR-W8GF4 |
Visio Standard 2016 [C2R] | NY48V-PPYYH-3F4PX-XJRKJ-W4423 |
Access 2016 | GNH9Y-D2J4T-FJHGG-QRVH7-QPFDW |
Excel 2016 | 9C2PK-NWTVB-JMPW8-BFT28-7FTBF |
Mondo 2016 | HFTND-W9MK4-8B7MJ-B6C4G-XQBR2 |
Mondo Retail 2016 | DMTCJ-KNRKX-26982-JYCKT-P7KB6 |
OneNote 2016 | DR92N-9HTF2-97XKM-XW2WJ-XW3J6 |
Outlook 2016 | R69KK-NTPKF-7M3Q4-QYBHW-6MT9B |
PowerPoint 2016 | J7MQP-HNJ4Y-WJ7YM-PFYGF-BY6C6 |
Publisher 2016 | F47MM-N3XJP-TQXJ9-BP99D-8K837 |
Skype for Business 2016 | 869NQ-FJ69K-466HW-QYCP2-DDBV6 |
Word 2016 | WXY84-JN2Q9-RBCCQ-3Q3J3-3PFJ6 |
Office 2013
Product | GVLK |
---|---|
Professional Plus 2013 [Preview] | PGD67-JN23K-JGVWV-KTHP4-GXR9G |
Professional Plus 2013 | YC7DK-G2NP3-2QQC3-J6H88-GVGXT |
Standard 2013 | KBKQT-2NMXY-JJWGP-M62JB-92CD4 |
Project Professional 2013 [Preview] | NFKVM-DVG7F-TYWYR-3RPHY-F872K |
Project Professional 2013 | FN8TT-7WMH6-2D4X9-M337T-2342K |
Project Standard 2013 [Preview] | N89QF-GGB8J-BKD28-C4V28-W4XTK |
Project Standard 2013 | 6NTH3-CW976-3G3Y2-JK3TX-8QHTT |
Visio Professional 2013 [Preview] | B3C7Q-D6NH2-2VRFW-HHWDG-FVQB6 |
Visio Professional 2013 | C2FG9-N6J68-H8BTJ-BW3QX-RM3B3 |
Visio Standard 2013 [Preview] | 9MKNF-J9XQ6-JV4XB-FJQPY-43F43 |
Visio Standard 2013 | J484Y-4NKBF-W2HMG-DBMJC-PGWR7 |
Access 2013 [Preview] | DJBH8-RGN7Q-836KD-DMP3M-DM9MF |
Access 2013 | NG2JY-H4JBT-HQXYP-78QH9-4JM2D |
Excel 2013 [Preview] | Q3BNP-3WXDT-GG8HF-24KMW-HMDBK |
Excel 2013 | VGPNG-Y7HQW-9RHP7-TKPV3-BG7GB |
OneNote 2013 [Preview] | VYNYX-8GPBC-7FQMD-D6B7B-7MDFD |
OneNote 2013 | TGN6P-8MMBC-37P2F-XHXXK-P34VW |
Outlook 2013 [Preview] | X2KNB-FRRG2-WXDPH-739DM-DM9RH |
Outlook 2013 | QPN8Q-BJBTJ-334K3-93TGY-2PMBT |
PowerPoint 2013 [Preview] | B8CT8-BTNFQ-XQXBK-BFWV8-HMDFQ |
PowerPoint 2013 | 4NT99-8RJFH-Q2VDH-KYG2C-4RD4F |
Publisher 2013 [Preview] | NB67P-J8XP4-XDK9B-V73VH-M4CKR |
Publisher 2013 | PN2WF-29XG2-T9HJ7-JQPJR-FCXK4 |
InfoPath 2013 (Preview) | 7KPJJ-N8TT7-CK3KR-QTV98-YPVXQ |
InfoPath 2013 | DKT8B-N7VXH-D963P-Q4PHY-F8894 |
Lync 2013 [Preview] | XNVD3-RYC7T-7R6BT-WX6CF-8BYH7 |
Lync 2013 | 2MG3G-3BNTT-3MFW9-KDQW3-TCK7R |
Word 2013 [Preview] | JBGD4-3JNG7-JWWGV-CR6TP-DC62Q |
Word 2013 | 6Q7VD-NX8JD-WJ2VH-88V73-4GBJ7 |
Mondo 2013 [Preview] | GCGCN-6FJRM-TR9Q3-BGMWJ-78KQV |
Mondo 2013 | 42QTK-RN8M7-J3C4G-BBGYM-88CYV |
Mondo 2013 Retail | ?????-?????-?????-?????-????? |
SharePoint Workspace (Groove) 2013 [Preview] | WVCGG-NK4FG-7XKXM-BD4WF-3C624 |
SharePoint Workspace (Groove) 2013 | H7R7V-WPNXQ-WCYYC-76BGV-VT7GH |
SharePoint Designer (Frontpage) 2013 Retail [Preview] | ?????-?????-?????-?????-????? |
SharePoint Designer (Frontpage) 2013 Retail | GYJRG-NMYMF-VGBM4-T3QD4-842DW |
Office 2010
Product | GVLK |
---|---|
Professional Plus 2010 | VYBBJ-TRJPB-QFQRF-QFT4D-H3GVB |
Standard 2010 | V7QKV-4XVVR-XYV4D-F7DFM-8R6BM |
Project Professional 2010 | YGX6F-PGV49-PGW3J-9BTGG-VHKC6 |
Project Standard 2010 | 4HP3K-88W3F-W2K3D-6677X-F9PGB |
Visio Professional 2010 | 7MCW8-VRQVK-G677T-PDJCM-Q8TCP |
Visio Standard 2010 | 767HD-QGMWX-8QTDB-9G3R2-KHFGJ |
Visio Premium 2010 | D9DWC-HPYVV-JGF4P-BTWQB-WX8BJ |
Access 2010 | V7Y44-9T38C-R2VJK-666HK-T7DDX |
Excel 2010 | H62QG-HXVKF-PP4HP-66KMR-CW9BM |
OneNote 2010 | Q4Y4M-RHWJM-PY37F-MTKWH-D3XHX |
Outlook 2010 | 7YDC2-CWM8M-RRTJC-8MDVC-X3DWQ |
PowerPoint 2010 | RC8FX-88JRY-3PF7C-X8P67-P4VTT |
Publisher 2010 | BFK7F-9MYHM-V68C7-DRQ66-83YTP |
InfoPath 2010 | K96W8-67RPQ-62T9Y-J8FQJ-BT37T |
SharePoint Workspace (Groove) 2010 | QYYW6-QP4CB-MBV6G-HYMCJ-4T3J4 |
Word 2010 | HVHB3-C6FV7-KQX9W-YQG79-CRY7T |
Small Business Basics 2010 | D6QFG-VBYP2-XQHM7-J97RH-VVRCK |
Starter 2010 Retail | VXHHB-W7HBD-7M342-RJ7P8-CHBD6 |
SharePoint Designer (Frontpage) 2010 Retail | H48K6-FB4Y6-P83GH-9J7XG-HDKKX |
Office Mondo 1 2010 | YBJTT-JG6MD-V9Q7P-DBKXJ-38W9R |
Office Mondo 2 2010 | 7TC2V-WXF6P-TD7RT-BQRXR-B8K32 |
Troubleshooting
Something does not work as expected ? Before you open an issue, please make sure to at least follow these steps to further diagnose or even resolve your problem. If you not follow this, do not expect that we can or want to help you!
Are you activating a legit Windows copy checked with
sha256
,md5
or is it maybe a warez torrent version ?Did you tried a clean installation (format all) ? You skipped entering any key during installation, turning off internet connection, first activating and then updating Windows (and eventually later upgrading) ?
Are you activating Windows or Office on a different machine (physical or virtual) where py-kms runs?
Have you installed all latest packages ? Especially before upgrading ? Are you upgrading using the “Update Assistant”/”Media Creation” tool to switch from Windows 7 / 8 / 8.1 to 10 (for me has always worked) ?
If isn’t a clean install, so far as you have kept activated your Windows copy ? Have you used some other activator (maybe not trusted) that injects or changes .dll files and therefore may have corrupted something ?
Have you forgot to reactivate at least once before 180 (45 or 30, depending on your version) days ?
Is your system very tweaked with some service disabled (have you used O&O Shutup 10 or similar tools) ?
Have you disabled (or created an exception for) ALL firewalls (Public/Private/Office) / antivirus (Windows defender, etc..), server-side AND client-side ?
Have you already activated with a OEM/Retail/other license and now you want to activate using
py-kms
? So, have you switched to volume channel with appropriate GVLK ? Make sure you first deleted the previous key (example: #24 (comment)) ?Are you running the commands using the elevated command prompt ?
Are you connecting correctly to your
py-kms
server instance ?Have you tried to fix with “Windows Troubleshoot”,
sfc /scannow
or other strange Windows tools ?If you activated successfully with
py-kms
other Windows stuff, consider it could be an error specific for your PC (so you may need a scented clean installation) ?Is your
py-kms
really running ? Already tried to enable debug logs ?Did you already searched for your issue here ?
Are you running the latest version of
py-kms
?For Office: Did you made sure to use a Office with GLVK support ?!
You found a real bug ? Could you maybe make our life’s easier and describe what goes wrong and also provide some information about your environment (OS, Python-Version, Docker, Commit-Hashes, Network-Setup) ?
When you post logs: Please remove personal information (replace IPs with something like
[IP_ADDRESS_A]
)…
If you have already thought about all of this, your last hope to solve your problem is reading some verse of the Holy Bible of activations: “MDL forums” - otherwise “I don’t know !”, but try open up an issue anyways :)
Usage
Start Parameters
pykms_Server.py
Follows a list of usable parameters:
ip <IPADDRESS>
Instructs py-kms to listen on IPADDRESS (can be an hostname too). If this option is not specified, IPADDRESS
::
is used.
port <PORT>
Define TCP PORT the KMS service is listening on. Default is 1688.
-e or --epid <EPID>
Enhanced Privacy ID (EPID) is a cryptographic scheme for providing anonymous signatures. Use EPID as Windows EPID. If no EPID is specified, a random one will be generated.
-l or --lcid <LCID>
Specify the LCID part of the EPID. If an EPID is manually specified, this setting is ignored. Default is 1033 (English - US). The Language Code Identifier (LCID) describes localizable information in Windows. This structure is used to identify specific languages for the purpose of customizing software for particular languages and cultures. For example, it can specify the way dates, times, and numbers are formatted as strings. It can also specify paper sizes and preferred sort order based on language elements. The LCID must be specified as a decimal number (example: 1049 for “Russian - Russia”). By default py-kms generates a valid locale ID but this may lead to a value which is unlikely to occur in your country. You may want to select the locale ID of your country instead. See here for a list of valid LCIDs.
-w or --hwid <HWID>
Use specified HWID for all products. Use
-w RANDOM
to generate a random HWID. Default is random. Hardware Identification is a security measure used by Microsoft upon the activation of the Windows operating system. As part of the Product Activation system, a unique HWID number is generated when the operating system is first installed. The HWID identifies the hardware components that the system is utilizing, and this number is communicated to Microsoft. Every 10 days and at every reboot the operating system will generate another HWID number and compare it to the original to make sure that the operating system is still running on the same device. If the two HWID numbers differ too much then the operating system will shut down until Microsoft reactivates the product. The theory behind HWID is to ensure that the operating system is not being used on any device other than the one for which it was purchased and registered. HWID must be an 16-character string of hex characters that are interpreted as a series of 8 bytes (big endian).
-c or --client-count <CLIENTCOUNT>
Use this flag to specify the current CLIENTCOUNT. Default is None. Remember that a number >=25 is required to enable activation of client OSes while for server OSes and Office >=5.
-a or --activation-interval <ACTIVATIONINTERVAL>
Instructs clients to retry activation every ACTIVATIONINTERVAL minutes if it was unsuccessful, e.g. because it could not reach the server. The default is 120 minutes (2 hours).
-r or --renewal-interval <RENEWALINTERVAL>
Instructs clients to renew activation every RENEWALINTERVAL minutes. The default is 10080 minutes (7 days).
-s or --sqlite [<SQLFILE>]
Use this option to store request information from unique clients in an SQLite database. Deactivated by default.
-t0 or --timeout-idle <TIMEOUTIDLE>
Maximum inactivity time (in seconds) after which the connection with the client is closed. Default setting is serve forever (no timeout).
-t1 or --timeout-sndrcv <TIMEOUTSNDRCV>
Set the maximum time (in seconds) to wait for sending / receiving a request / response. Default is no timeout.
-y or --async-msg
With high levels of logging (e.g hundreds of log statements), in a traditional synchronous log model, the overhead involved becomes more expensive, so using this option you enable printing (pretty / logging) messages asynchronously reducing time-consuming. Deactivated by default.
-V or --loglevel <{CRITICAL, ERROR, WARNING, INFO, DEBUG, MININFO}>
Use this flag to set a logging loglevel. The default is ERROR. example:
user@host ~/path/to/folder/py-kms $ python3 pykms_Server.py -V INFO
creates pykms_logserver.log with these initial messages:
Mon, 12 Jun 2017 22:09:00 INFO TCP server listening at :: on port 1688.
Mon, 12 Jun 2017 22:09:00 INFO HWID: 364F463A8863D35F
-F or --logfile <LOGFILE>
Creates a LOGFILE.log logging file. The default is named pykms_logserver.log. example:
user@host ~/path/to/folder/py-kms $ python3 pykms_Server.py 192.168.1.102 1688 -F ~/path/to/folder/py-kms/newlogfile.log -V INFO -w RANDOM
creates newlogfile.log with these initial messages:
Mon, 12 Jun 2017 22:09:00 INFO TCP server listening at 192.168.1.102 on port 1688.
Mon, 12 Jun 2017 22:09:00 INFO HWID: 58C4F4E53AE14224
You can also enable other suboptions of -F
doing what is reported in the following table:
command | pretty msg | logging msg | logfile |
---|---|---|---|
-F <logfile> |
ON | OFF | ON |
-F STDOUT |
OFF | ON | OFF |
-F FILESTDOUT <logfile> |
OFF | ON | ON |
-F STDOUTOFF <logfile> |
OFF | OFF | ON |
-F FILEOFF |
ON | OFF | OFF |
-S or --logsize <MAXSIZE>
Use this flag to set a maximum size (in MB) to the output log file. Deactivated by default.
subparser connect
-n or --listen <'IP,PORT'>
Use this option to add multiple listening ip address - port couples. Note the format with the comma between the ip address and the port number. You can use this option more than once.
-b or --backlog <BACKLOG>
Use this option to specify the maximum length of the queue of pending connections, referred to a ip address - port couple. If placed just after
connect
refers to the main address and all additive couples without-b
option. Default is 5.
-u or --no-reuse
Use this option not to allow binding / listening to the same ip address - port couple specified with
-n
. If placed just afterconnect
refers to the main address and all additive couples without-u
option. Reusing port is activated by default (except when running inside the Windows Sandbox and the current user isWDAGUtilityAccount
).
-d or --dual
Use this option to allow listening to an IPv6 address also accepting connections via IPv4. If used it refers to all addresses (main and additional). Deactivated by default.
examples (with fictitious addresses and ports):
command | address (main) | backlog (main) | reuse port (main) | address (listen) | backlog (listen) | reuse port (listen) | dualstack (main / listen) |
---|---|---|---|---|---|---|---|
python3 pykms_Server.py connect -b 12 |
('::', 1688) | 12 | True | [] | [] | [] | False |
python3 pykms_Server.py :: connect -b 12 -u -d |
('::', 1688) | 12 | False | [] | [] | [] | True |
python3 pykms_Server.py connect -n 1.1.1.1,1699 -b 10 |
('::', 1688) | 5 | True | [('1.1.1.1', 1699)] | [10] | [True] | False |
python3 pykms_Server.py :: 1655 connect -n 2001:db8:0:200::7,1699 -d -b 10 -n 2.2.2.2,1677 -u |
('::', 1655) | 5 | True | [('2001:db8:0:200::7', 1699), ('2.2.2.2', 1677)] | [10, 5] | [True, False] | True |
python3 pykms_Server.py connect -b 12 -u -n 1.1.1.1,1699 -b 10 -n 2.2.2.2,1677 -b 15 |
('::', 1688) | 12 | False | [('1.1.1.1', 1699), ('2.2.2.2', 1677)] | [10, 15] | [False, False] | False |
python3 pykms_Server.py connect -b 12 -n 1.1.1.1,1699 -u -n 2.2.2.2,1677 |
('::', 1688) | 12 | True | [('1.1.1.1', 1699), ('2.2.2.2', 1677)] | [12, 12] | [False, True] | False |
python3 pykms_Server.py connect -d -u -b 8 -n 1.1.1.1,1699 -n 2.2.2.2,1677 -b 12 |
('::', 1688) | 8 | False | [('1.1.1.1', 1699), ('2.2.2.2', 1677)] | [8, 12] | [False, False] | True |
python3 pykms_Server.py connect -b 11 -u -n ::,1699 -n 2.2.2.2,1677 |
('::', 1688) | 11 | False | [('::', 1699), ('2.2.2.2', 1677)] | [11, 11] | [False, False] | False |
pykms_Client.py
If py-kms server doesn’t works correctly, you can test it with the KMS client pykms_Client.py
, running on the same machine where you started pykms_Server.py
.
For example (in separated bash windows) run these commands:
user@host ~/path/to/folder/py-kms $ python3 pykms_Server.py -V DEBUG
user@host ~/path/to/folder/py-kms $ python3 pykms_Client.py -V DEBUG
If you wish to get KMS server from DNS server: (ie perform a DNS resolution on _vlmcs._tcp.domain.tld, if ever there are several answers, only the first one is selected.). Althought that mode is supposed to be specific to devices connect to an Active Directory domain, setting a fully qualified name and a workgroup may help to use that automatic KMS discovery feature.
user@host ~/path/to/folder/py-kms $ python3 pykms_Client.py -V DEBUG -F STDOUT -D contoso.com
user@host ~/path/to/folder/py-kms $ python3 pykms_Client.py -V DEBUG -F STDOUT -D contoso.com
Or if you want better specify:
user@host ~/path/to/folder/py-kms $ python3 pykms_Server.py <YOUR_IPADDRESS> 1688 -V DEBUG
user@host ~/path/to/folder/py-kms $ python3 pykms_Client.py <YOUR_IPADDRESS> 1688 -V DEBUG
You can also put further parameters as defined below:
ip <IPADDRESS>
Define IPADDRESS (or hostname) of py-kms’ KMS Server. This parameter is always required.
port <PORT>
Define TCP PORT the KMS service is listening on. Default is 1688.
-m or --mode <{WindowsVista, Windows7, Windows8, Windows8.1, Windows10, Office2010, Office2013, Office2016, Office2019}>
Use this flag to manually specify a Microsoft PRODUCTNAME for testing the KMS server. Default is Windows8.1.
-c or --cmid <CMID>
Use this flag to manually specify a CMID to use. If no CMID is specified, a random one will be generated. The Microsoft KMS host machine identifies KMS clients with a unique Client Machine ID (CMID, example: ae3a27d1-b73a-4734-9878-70c949815218). For a KMS client to successfully activate, the KMS server needs to meet a threshold, which is a minimum count for KMS clients. Once a KMS server records a count which meets or exceeds threshold, KMS clients will begin to activate successfully. Each unique CMID recorded by KMS server adds towards the count threshold for KMS clients. This are retained by the KMS server for a maximum of 30 days after the last activation request with that CMID. Note that duplicate CMID only impacts on KMS server machine count of client machines. Once KMS server meets minimum threshold, KMS clients will activate regardless of CMID being unique for a subset of specific machines or not.
-n or --name <MACHINENAME>
Use this flag to manually specify an ASCII MACHINENAME to use. If no MACHINENAME is specified a random one will be generated.
-t0 or --timeout-idle <TIMEOUTIDLE>
Set the maximum time (in seconds) to wait for a connection attempt to KMS server to succeed. Default is no timeout.
-t1 or --timeout-sndrcv <TIMEOUTSNDRCV>
Set the maximum time (in seconds) to wait for sending / receiving a request / response. Default is no timeout.
-y or --async-msg
Prints pretty / logging messages asynchronously. Deactivated by default.
-V or --loglevel <{CRITICAL, ERROR, WARNING, INFO, DEBUG, MININFO}>
Use this flag to set a logging loglevel. The default is ERROR.
-F or --logfile <LOGFILE>
Creates a LOGFILE.log logging file. The default is named pykms_logclient.log. You can enable same pykms_Server.py suboptions of
-F
.
-S or --logsize <MAXSIZE>
Use this flag to set a maximum size (in MB) to the output log file. Deactivated by default.
Docker Environment
This are the currently used ENV
statements from the Dockerfile(s). For further references what exactly the parameters mean, please see the start parameters for the server.
# IP-address
# The IP address to listen on. The default is "::" (all interfaces).
ENV IP ::
# TCP-port
# The network port to listen on. The default is "1688".
ENV PORT 1688
# ePID
# Use this flag to manually specify an ePID to use. If no ePID is specified, a random ePID will be generated.
ENV EPID ""
# lcid
# Use this flag to manually specify an LCID for use with randomly generated ePIDs. Default is 1033 (en-us).
ENV LCID 1033
# The current client count
# Use this flag to specify the current client count. Default is 26.
# A number >=25 is required to enable activation of client OSes; for server OSes and Office >=5.
ENV CLIENT_COUNT 26
# The activation interval (in minutes)
# Use this flag to specify the activation interval (in minutes). Default is 120 minutes (2 hours).
ENV ACTIVATION_INTERVAL 120
# The renewal interval (in minutes)
# Use this flag to specify the renewal interval (in minutes). Default is 10080 minutes (7 days).
ENV RENEWAL_INTERVAL 10080
# hwid
# Use this flag to specify a HWID.
# The HWID must be an 16-character string of hex characters.
# The default is "RANDOM" to auto-generate the HWID or type a specific value.
ENV HWID RANDOM
# log level ("CRITICAL", "ERROR", "WARNING", "INFO", "DEBUG")
# Use this flag to set a Loglevel. The default is "ERROR".
ENV LOGLEVEL ERROR
# Log file
# Use this flag to set an output Logfile. The default is "/var/log/pykms_logserver.log".
ENV LOGFILE /var/log/pykms_logserver.log
# Log file size in MB
# Use this flag to set a maximum size (in MB) to the output log file. Deactivated by default.
ENV LOGSIZE ""
Activation Procedure
The product asks for a key during installation, so it needs you to enter the GVLK. Then the user can set connection parameters, while KMS server must already be running on server machine. Finally with specific commands, activation occurs automatically and can be extended later every time for another 180 (or 30 or 45) days.
Windows
The //nologo
option of cscript
was used only to hide the startup logo.
Run a Command Prompt as Administrator (you are directly in
C:\Windows\System32
path).This is optional, it’s for unistalling any existing product key.
Then put in your product’s GVLK.
Set connection parameters.
Try online activation, but if that fails with error…
0xC004F074
You’ll most likely have to configure your firewall that it accepts incoming connections on TCP port 1688. So for Linux users (server-side withpykms_Server.py
running):sudo ufw allow 1688
(revert this rulesudo ufw delete allow 1688
) should fix that.0xC004F069
Take a look into the issue here, it will may help you…
Attempt online activation (now with traffic on 1688 enabled).
View license informations (optional).
Office
Note that you’ll have to install a volume license (VL) version of Office. Office versions downloaded from MSDN and / or Technet are non-VL.
Run a Command Prompt as Administrator and navigate to Office folder
cd C:\ProgramFiles\Microsoft Office\OfficeXX
(64-bit path) orcd C:\ProgramFiles(x86)\Microsoft Office\OfficeXX
(32-bit path), where XX =14
for Office 2010,15
for Office 2013,16
for Office 2016 or Office 2019.As you can see, running
/dstatus
, my Office is expiring (14 days remaining).Only for example, let’s go to uninstall this product.
This is confirmed running
/dstatus
again.Now i put my product’s GVLK (and you your key).
Set the connection parameter KMS server address.
Set the connection parameter KMS server port.
Activate installed Office product key.
View license informations (in my case product is now licensed and remaining grace 180 days as expected).
Changelog
py-kms_2022-12-16
Added support for new web-gui into Docker
Implemented whole-new web-based GUI with Flask
Removed old GUI (Etrigan) from code and resources
Removed sqliteweb
Removed Etrigan (GUI)
py-kms_2022-12-07
Added warning about Etrigan (GUI) being deprecated
More docs (do not run on same machine as client)
Added Docker support for multiple listen IPs
Added graceful Docker shutdowns
py-kms_2021-12-23
More Windows 10/11 keys
Fixed some deprecation warnings
Fixed SO_REUSEPORT platform checks
Fixed loglevel “MININFO” with Docker
Added Docker healthcheck
Added UID/GID change support for Docker
Dependabot alerts
py-kms_2021-10-22
Integrated Office 2021 GLVK keys & database
Docker entrypoint fixes
Updated docs to include SQLite stuff
Fix for undefined timezones
Removed LOGFILE extension checks
Added support for Windows 11
py-kms_2021-10-07
Helm charts for Kubernetes deployment
Windows 2022 updates
Faster Github Action builds
py-kms_2021-11-12
Addded GHCR support
Docs table reformatted
Updated GUI
Windows Sandbox fix
Added contribution guidelines
Docker multiarch
Reshot screenshots in docs
py-kms_2020-10-01
Sql database path customizable.
Sql database file keeps different AppId.
Support for multi-address connection.
Added timeout send / receive.
py-kms_2020-07-01
py-kms Gui: now matches all cli options, added modes onlyserver / onlyclient, added some animations.
Added suboptions FILEOFF and STDOUTOFF of -F.
Created option for asynchronous messages.
Cleaned options parsing process.
py-kms_2020-02-02
Optimized pretty-print messages process.
Added -F FILESTDOUT option.
Added deamonization options (via Etrigan project).
py-kms GUI resurrected (and improved).
Cleaned, cleaned, cleaned.
py-kms_2019-05-15
Merging for Python2 / Python3 compatibility all-in-one.
Added new options:
Setup for multithreading support.
Graphical improvements:
added a (“really silly”) tkinter GUI as an alternative to command line.
Dockerized with sqlite-web.
Fixed activation threshold.
Renamed files, cosmetics and many other little big adjustments.
py-kms_2018-11-15
Implemented some good modifications inspired by this other fork.
Clean up code ( deleted no longer useful files randomHWID.py, randomEPID.py, timezones.py; erased useless functions and import modules )
Reading parameters directly from a slightly modified KmsDataBase.xml ( created with LicenseManager 5.0 by Hotbird64 HGM ) with kmsDB2Dict.py
Added support for Windows Server 2019 and Office 2019.
Improved random EPID generation.
Corrected this in kmsBase.py
py-kms_2018-03-01
py-kms NOW is for Python3 too ( py3-kms ), the previous one ( written with Python2 ) is renamed py2-kms
Repaired logging messages
Added pretty processing messages
py-kms_2017-06-01
Added option verbose logging in a file
Updated “kmsBase.py” with new SKUIDs
Added a brief guide “py-kms-Guide.pdf” ( replaced “client-activation.txt” )
Added a well formatted and more complete list of volume keys “py-kms-ClientKeys.pdf” ( replaced “client-keys.txt” )
py-kms_2016-12-30
Updated kmsBase.py (Matches LicenseManager 4.6.0 by Hotbird64 HGM)
py-kms_2016-08-13
Fixed major bug on Response function
Fixed Random PID Generator (thanks: mkuba50)
py-kms_2016-08-12
Added missing UUID, credits: Hotbird64
Added Windows Server 2016 in random PID generator
py-kms_2016-08-11
Added Windows Server 2016 UUID
Fixed GroupID and PIDRange
Added Office 2016 CountKMSID
py-kms_2015-07-29
Added Windows 10 UUID
py-kms_2014-10-13 build 3:
Added Client Activation Examples: “client-activation.txt”
Added Volume Keys: “client-keys.txt”
py-kms_2014-10-13 build 2:
Added missing skuIds in file “kmsbase.py”. Thanks (user_hidden)
py-kms_2014-10-13 build 1:
The server now outputs the hwid in use.
The server hwid can be random by using parameter: “-w random”. Example: “python server.py -w random”
Included file “randomHWID.py” to generate random hwid on demand.
Included file “randomPID.py” to generate random epid and hwid on demand.
py-kms_2014-03-21T232943Z:
The server HWID can now be specified on the command line.
The client will print the HWID when using the v6 protocol.
py-kms_2014-01-03T032458Z:
Made the sqlite3 module optional.
Changed the “log” flag to an “sqlite” flag and made a real log flag in preparation for when real request logging is implemented.
py-kms_2014-01-03T025524Z:
Added RPC response decoding to the KMS client emulator.
py-kms_2013-12-30T064443Z:
The v4 hash now uses the proper pre-expanded key.
py-kms_2013-12-28T073506Z:
Modified the v4 code to use the custom aes module in order to make it more streamlined and efficient.
py-kms_2013-12-20T051257Z:
Removed the need for the pre-computed table (tablecomplex.py) for v4 CMAC calculation, cutting the zip file size in half.
py-kms_2013-12-16T214638Z:
Switched to getting the to-be-logged request time from the KMS server instead of the client.
py-kms_2013-12-16T030001Z:
You can now specify the CMID and the Machine Name to use with the client emulator.
py-kms_2013-12-16T021215Z:
Added a request-logging feature to the server. It stores requests in an SQLite database and uses the ePIDs stored there on a per-CMID basis.
The client emulator now works for v4, v5, and v6 requests.
The client emulator now also verifies the KMS v4 responses it receives.
py-kms_2013-12-14T230215Z
Added a client (work in progress) that right now can only generate and send RPC bind requests.
Added a bunch of new classes to handle RPC client stuff, but I might just end up moving their functions back into the old classes at some point.
Lots of other code shuffling.
Made the verbose and debug option help easier to read.
Added some server error messages.
py-kms_2013-12-08T051332Z:
Made some really huge internal changes to streamline packet parsing.
py-kms_2013-12-06T034100Z:
Added tons of new SKU IDs
py-kms_2013-12-05T044849Z:
Added Office SKU IDs
Small internal changes
py-kms_2013-12-04T010942Z:
Made the rpcResponseArray in rpcRequest output closer to spec
py-kms_2013-12-01T063938Z:
SKUID conversion: Converts the SKUID UUID into a human-readable product version for SKUIDs in its SKUID dictionary.
Fancy new timezone conversion stuff.
Enabled setting custom LCIDs.
Data parsing is now handled by structure.py.
Some other minor stuff you probably won’t notice.
py-kms_2013-11-27T061658Z:
Got rid of custom functions module (finally)
py-kms_2013-11-27T054744Z:
Simplified custom functions module
Got rid of “v4” subfolder
Cleaned up a bunch of code
py-kms_2013-11-23T044244Z:
Added timestamps to verbose output
Made the verbose output look better
py-kms_2013-11-21T014002Z:
Moved some stuff into verbose output
Enabled server ePIDs of arbitrary length
py-kms_2013-11-20T180347Z:
Permanently fixed machineName decoding
Adheres closer to the DCE/RPC protocol spec
Added client info to program output
Small formatting changes
py-kms_2013-11-13:
First working release added to the Mega folder.
Readme
Keep in mind that this project is not intended for production use. Feel free to use it to test your own systems or maybe even learn something from the protocol structure. :)
History
py-kms is a port of node-kms created by cyrozap, which is a port of either the C#, C++, or .NET implementations of KMS Emulator. The original version was written by CODYQX4 and is derived from the reverse-engineered code of Microsoft’s official KMS. This version of py-kms is for itself a fork of the original implementation by SystemRage, which was abandoned early 2021.
Features
Responds to
v4
,v5
, andv6
KMS requests.Supports activating:
Windows Vista
Windows 7
Windows 8
Windows 8.1
Windows 10 ( 1511 / 1607 / 1703 / 1709 / 1803 / 1809 )
Windows 10 ( 1903 / 1909 / 20H1, 20H2, 21H1, 21H2 )
Windows 11 ( 21H2 )
Windows Server 2008
Windows Server 2008 R2
Windows Server 2012
Windows Server 2012 R2
Windows Server 2016
Windows Server 2019
Windows Server 2022
Microsoft Office 2010 ( Volume License )
Microsoft Office 2013 ( Volume License )
Microsoft Office 2016 ( Volume License )
Microsoft Office 2019 ( Volume License )
Microsoft Office 2021 ( Volume License )
It’s written in Python (tested with Python 3.10.1).
Supports execution by
Docker
,systemd
and many more…Uses
sqlite
for persistent data storage (with a simple web-based explorer).
Documentation
The wiki has been completly reworked and is now available on readthedocs.io. It should provide you all the necessary information about how to setup and to use py-kms , all without clumping this readme. The documentation also houses more details about activation with py-kms and how to get GVLK keys.
Quick start
To start the server, execute
python3 pykms_Server.py [IPADDRESS] [PORT]
, the default IPADDRESS is::
( all interfaces ) and the default PORT is1688
. Note that both the address and port are optional. It’s allowed to use IPv4 and IPv6 addresses. If you have a IPv6-capable dual-stack OS, a dual-stack socket is created when using a IPv6 address. In case your OS does not support IPv6, make sure to explicitly specify the legacy IPv4 of0.0.0.0
!To start the server automatically using Docker, execute
docker run -d --name py-kms --restart always -p 1688:1688 ghcr.io/py-kms-organization/py-kms
.To show the help pages type:
python3 pykms_Server.py -h
andpython3 pykms_Client.py -h
.