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. :)
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.
- Responds to
v4,v5, andv6KMS requests. - Supports activating:
- Windows Vista
- Windows 7
- Windows 8
- Windows 8.1
- Windows 10
- Windows 11
- Windows Server 2008 / R2
- Windows Server 2012 / R2
- Windows Server 2016
- Windows Server 2019
- Windows Server 2022
- Windows Server 2025
- 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 )
- Microsoft Office 2024 ( Volume License )
- It's written in Python (tested with Python 3.10.1).
- Supports execution by
Docker,systemdand many more... - Uses
sqlitefor persistent data storage (with a simple web-based explorer).
- 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 -handpython3 pykms_Client.py -h. - To run docker server: docker run -d --name py-kms --restart always -v /opt/py-kms-db:/home/py-kms/db -p 1688:1688 -p 8080:8080 h2372/py-kms2
- To activate:
- slmgr /ipk x-x-x-x
- slmgr /skms y-y-y-y
- slmgr /ato
- DNS SRV record check: nslookup -type=srv _vlmcs._tcp.domain.com