uploaded version 2018_11_15 for python3

This commit is contained in:
Matteo ℱan 2018-11-14 23:13:51 +01:00 committed by GitHub
parent 7130486efc
commit e98858c9d0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 1204 additions and 853 deletions

798
py3-kms/KmsDataBase.xml Normal file
View File

@ -0,0 +1,798 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Modded by SystemRage for py-kms -->
<!--
<KmsData
Version="1.7" // Version of the KmsData file, currently must be 1.7 (required),
Author="Hotbird64" // Enter your name here (required)
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" // Loads the xsi namespace (recommended for syntax checking in an XSD capable XML editor)
xsi:noNamespaceSchemaLocation="KmsDataBase.xsd" // relative or absolute path of the validation file
>
<WinBuild
BuildNumber="9200" // Windows Build Number
DisplayName="Windows 8 / Server 2012" // A display name for the build number
PlatformId="5426" // The "Platform ID" for this build number
UseForEpid="true" // Use this build number for EPid generation. Should be true only for RTM builds that can be Windows servers
MayBeServer="true" // Should be true for RTM builds that can be Windows servers
UsesNDR64="true" // Genuine KMS servers use NDR64 for this build
WinBuildIndex="0" // Index of the build (for py-kms)
MinDate="12/10/2016" // GA release date of the build (for py-kms)
/>
<CsvlkItem
>
Id="2e7a9ad1-a849-4b56-babe-17d5a29fe4b4" // SkuId of the CSVLK (required)
DisplayName="Windows Server 2019" // Friendly name that should be displayed instead of the Guid (required)
IsLab="false" // This is a lab CSVLK that also activates retail Windows > 8 (default false)
IsPreview="false" // This is a preview (beta, Non-RTM, etc.) CSVLK (default false)
GroupId="206" // GroupId for EPid generation. If omitted, this is taken from the pkeyconfig. Use only if you don´t have a pkeyconfig for this CSVLK
MinKeyId="551000000" // Minimum key id for EPid generation. If omitted, this is taken from the pkeyconfig. Use only if you don´t have a pkeyconfig for this CSVLK
MaxKeyId="570999999" // Maximum key id for EPid generation. If omitted, this is taken from the pkeyconfig. Use only if you don´t have a pkeyconfig for this CSVLK
VlmcsdIndex="0" // Export this CsvlkItem with Index 0 to vlmcsd. (optional)
IniFileName="Windows" // Name used in vlmcsd.ini to assign specific EPID (required for all CsvlkItems that have VlmcsdIndex=, optional for others)
EPid="03612-00206-568-381813-03-1033-14393.0000-2702018" // If you want a specific EPid, use this. Or omit it to generate a suitable default automatically.
InvalidWinBuild="[0,1,2]" // List of the builds not good for EPID generation with this CSVLK parameters (for py-kms)
<Activate
KmsItem="58e2134f-8e11-4d17-9cb2-91069c151148" // List of KmsItems activated by the CSVLK. The KmsItem must be defined under <AppItem><KmsItem Id= ...>
/>
</CsvlkItem>
<AppItem // Application (Windows, Office 2010 or Office 2013+)
Id="{55c92734-d682-4d71-983e-d6ec3f16059f}" // Guid (required, braces are optional).
DisplayName="Windows" // Friendly name that should be displayed instead of the Guid (required)
VlmcsdIndex="0" // VlmcsdIndex of CsvlkItem to use if an unknown KmsItem activates with that AppItem (required)
MinActiveClients="50" // Minimum clients that this AppItem should maintain
>
<KmsItem // KmsItem aka KMS Counted Id
Id="{e1c51358-fe3e-4203-a4a2-3b6b20c9734e}" // Guid (required, braces are optional).
DisplayName="Windows 10 (Retail)" // Friendly name that should be displayed instead of the Guid (required)
IsRetail="true" // Indicates that this is a retail product group that can't be activated with a genuine KMS server (optional, default false)
IsPreview="false" // Indicates that this a beta/preview product group that can't be activated with a genuine KMS server (optional, default false)
DefaultKmsProtocol="6.0" // Default KMS protocol version that the KMS client uses. Must be "4.0", "5.0" or "6.0" (optional, default 6.0)
NCountPolicy="25" // Minimum number of active clients required for the activation to succeed (optional, default 25, should be 25 for Windows clients and 5 otherwise)
CanMapToDefaultCsvlk="true" // This KmsItem can be omitted in vlmcsd export because it maps to VlmcsdIndex 0 (optional, default true)
>
<SkuItem // VOLUME_KMSCLIENT channel SKU ID (makes no sense to add other SKU IDs than VOLUME_KMSCLIENT channel
Id="{58e97c99-f377-4ef1-81d5-4ad5522b5fd8}" // Guid (required, braces are optional).
DisplayName="Windows 10 Home" // Friendly name that should be displayed instead of the Guid (required)
Gvlk="XXXXX-XXXXX-XXXXX-XXXXX-H8Q99" // The GVLK key to enable this VOLUME_KMSCLIENT channel (optional, recommended, no default)
IsGeneratedGvlk="false" // If true, indicates that this is a generated GVLK (optional, strongly recommended if a generated GVLK is used, default false)
/>
</KmsItem>
</AppItem>
</KmsData>
-->
<KmsData xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="1.7" Author="Hotbird64" xsi:noNamespaceSchemaLocation="KmsDataBase.xsd">
<WinBuilds>
<!-- LM refuses 3-digit build numbers
<WinBuild BuildNumber="528" DisplayName="Windows NT 3.1" PlatformId="55041"/>
<WinBuild BuildNumber="807" DisplayName="Windows NT 3.5" PlatformId="55041"/>
-->
<WinBuild BuildNumber="1057" DisplayName="Windows NT 3.51" PlatformId="55041"/>
<WinBuild BuildNumber="1381" DisplayName="Windows NT 4.0" PlatformId="55041"/>
<WinBuild BuildNumber="2195" DisplayName="Windows 2000" PlatformId="55041"/>
<WinBuild BuildNumber="2600" DisplayName="Windows XP 32-bit" PlatformId="55041"/>
<WinBuild BuildNumber="3790" DisplayName="Windows Server 2003 / XP 64-bit" PlatformId="55041" MayBeServer="true"/>
<WinBuild BuildNumber="6000" DisplayName="Windows Vista / Server 2008 without SP" PlatformId="55041" MayBeServer="true"/>
<WinBuild BuildNumber="6001" DisplayName="Windows Vista / Server 2008 SP1" PlatformId="55041" MayBeServer="true"/>
<WinBuild BuildNumber="6002" DisplayName="Windows Vista / Server 2008 SP2" UseForEpid="true" PlatformId="55041" MayBeServer="true" WinBuildIndex="0" MinDate="26/5/2009"/>
<WinBuild BuildNumber="7600" DisplayName="Windows 7 / Server 2008 R2 without SP" PlatformId="55041" MayBeServer="true"/>
<WinBuild BuildNumber="7601" DisplayName="Windows 7 / Server 2008 R2 SP1" PlatformId="55041" UseForEpid="true" MayBeServer="true" WinBuildIndex="1" MinDate="22/02/2011"/>
<WinBuild BuildNumber="9200" DisplayName="Windows 8 / Server 2012" PlatformId="5426" UseForEpid="true" MayBeServer="true" UsesNDR64="true" WinBuildIndex="2" MinDate="04/09/2012"/>
<WinBuild BuildNumber="9600" DisplayName="Windows 8.1 / Server 2012 R2" PlatformId="6401" UseForEpid="true" MayBeServer="true" UsesNDR64="true" WinBuildIndex="3" MinDate="17/10/2013"/>
<WinBuild BuildNumber="10240" DisplayName="Windows 10 1507" PlatformId="3612" UsesNDR64="true"/>
<WinBuild BuildNumber="14393" DisplayName="Windows 10 1607 / Server 2016" UseForEpid="true" MayBeServer="true" PlatformId="3612" UsesNDR64="true" WinBuildIndex="4" MinDate="12/10/2016"/>
<WinBuild BuildNumber="15063" DisplayName="Windows 10 1703" PlatformId="3612" UsesNDR64="true" MinDate="11/04/2017"/>
<WinBuild BuildNumber="16299" DisplayName="Windows 10 1709" PlatformId="3612" UsesNDR64="true"/>
<WinBuild BuildNumber="17134" DisplayName="Windows 10 1803" PlatformId="3612" UsesNDR64="true"/>
<WinBuild BuildNumber="17763" DisplayName="Windows 10 1809 / Server 2019" UseForEpid="true" PlatformId="3612" MayBeServer="true" UsesNDR64="true" WinBuildIndex="5" MinDate="02/10/2018"/>
</WinBuilds>
<CsvlkItems>
<CsvlkItem DisplayName="Windows 10 China Government" VlmcsdIndex="4" GroupId="3858" MinKeyId="15000000" MaxKeyId="999999999" IniFileName="WinChinaGov" EPid="06401-03858-320-801028-03-1033-9600.0000-2802018" Id="ecc0774a-aed3-4e1a-b815-2b31781adfea" InvalidWinBuild="[0,1,2]">
<Activate KmsItem="7ba0bf23-d0f5-4072-91d9-d55af5a481b6" />
</CsvlkItem>
<CsvlkItem DisplayName="Windows Server 2019" VlmcsdIndex="0" GroupId="206" MinKeyId="551000000" MaxKeyId="570999999" IniFileName="Windows" EPid="06401-00206-566-174993-03-1033-9600.0000-2802018" Id="2e7a9ad1-a849-4b56-babe-17d5a29fe4b4" InvalidWinBuild="[0,1,2]">
<Activate KmsItem="58e2134f-8e11-4d17-9cb2-91069c151148" />
<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
<Activate KmsItem="cb8fc780-2c05-495a-9710-85afffc904d7" />
<Activate KmsItem="33e156e4-b76f-4a52-9f91-f641dd95ac48" />
<Activate KmsItem="8fe53387-3087-4447-8985-f75132215ac9" />
<Activate KmsItem="8a21fdf3-cbc5-44eb-83f3-fe284e6680a7" />
<Activate KmsItem="0fc6ccaf-ff0e-4fae-9d08-4370785bf7ed" />
<Activate KmsItem="ca87f5b6-cd46-40c0-b06d-8ecd57a4373f" />
<Activate KmsItem="b2ca2689-a9a8-42d7-938d-cf8e9f201958" />
<Activate KmsItem="8665cb71-468c-4aa3-a337-cb9bc9d5eaac" />
<Activate KmsItem="8456efd3-0c04-4089-8740-5b7238535a65" />
<Activate KmsItem="6e9fc069-257d-4bc4-b4a7-750514d32743" />
<Activate KmsItem="969fe3c0-a3ec-491a-9f25-423605deb365" />
<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
<Activate KmsItem="d27cd636-1962-44e9-8b4f-27b6c23efb85" />
<Activate KmsItem="8449b1fb-f0ea-497a-99ab-66ca96e9a0f5" />
<Activate KmsItem="11b15659-e603-4cf1-9c1f-f0ec01b81888" />
</CsvlkItem>
<CsvlkItem DisplayName="Windows Server 2019 (Microsoft Internal Lab)" IsLab="true" GroupId="206" MinKeyId="2835000" MaxKeyId="2854999" IniFileName="Windows" Id="9db83b52-9904-4326-8957-ebe6feedf37c" InvalidWinBuild="[0,1,2]">
<Activate KmsItem="e1c51358-fe3e-4203-a4a2-3b6b20c9734e" />
<Activate KmsItem="58e2134f-8e11-4d17-9cb2-91069c151148" />
<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
<Activate KmsItem="bbb97b3b-8ca4-4a28-9717-89fabd42c4ac" />
<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
<Activate KmsItem="6d646890-3606-461a-86ab-598bb84ace82" />
<Activate KmsItem="cb8fc780-2c05-495a-9710-85afffc904d7" />
<Activate KmsItem="33e156e4-b76f-4a52-9f91-f641dd95ac48" />
<Activate KmsItem="8fe53387-3087-4447-8985-f75132215ac9" />
<Activate KmsItem="8a21fdf3-cbc5-44eb-83f3-fe284e6680a7" />
<Activate KmsItem="0fc6ccaf-ff0e-4fae-9d08-4370785bf7ed" />
<Activate KmsItem="ca87f5b6-cd46-40c0-b06d-8ecd57a4373f" />
<Activate KmsItem="b2ca2689-a9a8-42d7-938d-cf8e9f201958" />
<Activate KmsItem="8665cb71-468c-4aa3-a337-cb9bc9d5eaac" />
<Activate KmsItem="8456efd3-0c04-4089-8740-5b7238535a65" />
<Activate KmsItem="6e9fc069-257d-4bc4-b4a7-750514d32743" />
<Activate KmsItem="969fe3c0-a3ec-491a-9f25-423605deb365" />
<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
<Activate KmsItem="d27cd636-1962-44e9-8b4f-27b6c23efb85" />
<Activate KmsItem="8449b1fb-f0ea-497a-99ab-66ca96e9a0f5" />
<Activate KmsItem="11b15659-e603-4cf1-9c1f-f0ec01b81888" />
</CsvlkItem>
<CsvlkItem DisplayName="Windows Server 2016" GroupId="206" MinKeyId="491000000" MaxKeyId="530999999" IniFileName="Windows" Id="d6992aac-29e7-452a-bf10-bbfb8ccabe59" InvalidWinBuild="[0,1]">
<Activate KmsItem="58e2134f-8e11-4d17-9cb2-91069c151148" />
<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
<Activate KmsItem="cb8fc780-2c05-495a-9710-85afffc904d7" />
<Activate KmsItem="33e156e4-b76f-4a52-9f91-f641dd95ac48" />
<Activate KmsItem="8fe53387-3087-4447-8985-f75132215ac9" />
<Activate KmsItem="8a21fdf3-cbc5-44eb-83f3-fe284e6680a7" />
<Activate KmsItem="0fc6ccaf-ff0e-4fae-9d08-4370785bf7ed" />
<Activate KmsItem="ca87f5b6-cd46-40c0-b06d-8ecd57a4373f" />
<Activate KmsItem="b2ca2689-a9a8-42d7-938d-cf8e9f201958" />
<Activate KmsItem="8665cb71-468c-4aa3-a337-cb9bc9d5eaac" />
<Activate KmsItem="8456efd3-0c04-4089-8740-5b7238535a65" />
<Activate KmsItem="6e9fc069-257d-4bc4-b4a7-750514d32743" />
<Activate KmsItem="969fe3c0-a3ec-491a-9f25-423605deb365" />
<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
<Activate KmsItem="d27cd636-1962-44e9-8b4f-27b6c23efb85" />
</CsvlkItem>
<CsvlkItem DisplayName="Windows Server 2016 (Microsoft Internal Lab)" IsLab="true" GroupId="206" MinKeyId="1510000" MaxKeyId="2009999" IniFileName="Windows" Id="3c2da9a5-1c6e-45d1-855f-fdbef536676f" InvalidWinBuild="[0,1]">
<Activate KmsItem="e1c51358-fe3e-4203-a4a2-3b6b20c9734e" />
<Activate KmsItem="58e2134f-8e11-4d17-9cb2-91069c151148" />
<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
<Activate KmsItem="bbb97b3b-8ca4-4a28-9717-89fabd42c4ac" />
<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
<Activate KmsItem="6d646890-3606-461a-86ab-598bb84ace82" />
<Activate KmsItem="cb8fc780-2c05-495a-9710-85afffc904d7" />
<Activate KmsItem="33e156e4-b76f-4a52-9f91-f641dd95ac48" />
<Activate KmsItem="8fe53387-3087-4447-8985-f75132215ac9" />
<Activate KmsItem="8a21fdf3-cbc5-44eb-83f3-fe284e6680a7" />
<Activate KmsItem="0fc6ccaf-ff0e-4fae-9d08-4370785bf7ed" />
<Activate KmsItem="ca87f5b6-cd46-40c0-b06d-8ecd57a4373f" />
<Activate KmsItem="b2ca2689-a9a8-42d7-938d-cf8e9f201958" />
<Activate KmsItem="8665cb71-468c-4aa3-a337-cb9bc9d5eaac" />
<Activate KmsItem="8456efd3-0c04-4089-8740-5b7238535a65" />
<Activate KmsItem="6e9fc069-257d-4bc4-b4a7-750514d32743" />
<Activate KmsItem="969fe3c0-a3ec-491a-9f25-423605deb365" />
<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
<Activate KmsItem="d27cd636-1962-44e9-8b4f-27b6c23efb85" />
</CsvlkItem>
<CsvlkItem DisplayName="Windows 10 2019" GroupId="206" MinKeyId="256000000" MaxKeyId="265999999" IniFileName="Windows" Id="90da7373-1c51-430b-bf26-c97e9c5cdc31" InvalidWinBuild="[0,1,2]">
<Activate KmsItem="58e2134f-8e11-4d17-9cb2-91069c151148" />
<Activate KmsItem="969fe3c0-a3ec-491a-9f25-423605deb365" />
<Activate KmsItem="11b15659-e603-4cf1-9c1f-f0ec01b81888" />
<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
<Activate KmsItem="cb8fc780-2c05-495a-9710-85afffc904d7" />
<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
<Activate KmsItem="d27cd636-1962-44e9-8b4f-27b6c23efb85" />
</CsvlkItem>
<CsvlkItem DisplayName="Windows 10 2015" GroupId="206" MinKeyId="390000000" MaxKeyId="404999999" IniFileName="Windows" Id="0724cb7d-3437-4cb7-93cb-830375d0079d" InvalidWinBuild="[0,1]">
<Activate KmsItem="58e2134f-8e11-4d17-9cb2-91069c151148" />
<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
<Activate KmsItem="cb8fc780-2c05-495a-9710-85afffc904d7" />
<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
<Activate KmsItem="d27cd636-1962-44e9-8b4f-27b6c23efb85" />
</CsvlkItem>
<CsvlkItem DisplayName="Windows 10 2016" GroupId="206" MinKeyId="531000000" MaxKeyId="545999999" IniFileName="Windows" Id="30a42c86-b7a0-4a34-8c90-ff177cb2acb7" InvalidWinBuild="[0,1]">
<Activate KmsItem="58e2134f-8e11-4d17-9cb2-91069c151148" />
<Activate KmsItem="969fe3c0-a3ec-491a-9f25-423605deb365" />
<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
<Activate KmsItem="cb8fc780-2c05-495a-9710-85afffc904d7" />
<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
<Activate KmsItem="d27cd636-1962-44e9-8b4f-27b6c23efb85" />
</CsvlkItem>
<CsvlkItem DisplayName="Windows 10 2015 (Microsoft Internal Lab)" IsLab="true" GroupId="206" MinKeyId="10700000" MaxKeyId="10799999" IniFileName="Windows" Id="7a802526-4c94-4bd1-ba14-835a1aca2120" InvalidWinBuild="[0,1]">
<Activate KmsItem="58e2134f-8e11-4d17-9cb2-91069c151148" />
<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
<Activate KmsItem="cb8fc780-2c05-495a-9710-85afffc904d7" />
<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
<Activate KmsItem="e1c51358-fe3e-4203-a4a2-3b6b20c9734e" />
<Activate KmsItem="bbb97b3b-8ca4-4a28-9717-89fabd42c4ac" />
<Activate KmsItem="6d646890-3606-461a-86ab-598bb84ace82" />
<Activate KmsItem="d27cd636-1962-44e9-8b4f-27b6c23efb85" />
</CsvlkItem>
<CsvlkItem DisplayName="Windows 10 2019 (Microsoft Internal Lab)" IsLab="true" GroupId="206" MinKeyId="2860000" MaxKeyId="2864999" IniFileName="Windows" Id="60b3ec1b-9545-4921-821f-311b129dd6f6" InvalidWinBuild="[0,1,2]">
<Activate KmsItem="58e2134f-8e11-4d17-9cb2-91069c151148" />
<Activate KmsItem="969fe3c0-a3ec-491a-9f25-423605deb365" />
<Activate KmsItem="11b15659-e603-4cf1-9c1f-f0ec01b81888" />
<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
<Activate KmsItem="cb8fc780-2c05-495a-9710-85afffc904d7" />
<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
<Activate KmsItem="e1c51358-fe3e-4203-a4a2-3b6b20c9734e" />
<Activate KmsItem="bbb97b3b-8ca4-4a28-9717-89fabd42c4ac" />
<Activate KmsItem="6d646890-3606-461a-86ab-598bb84ace82" />
<Activate KmsItem="d27cd636-1962-44e9-8b4f-27b6c23efb85" />
</CsvlkItem>
<CsvlkItem DisplayName="Windows 10 2016 (Microsoft Internal Lab)" IsLab="true" GroupId="206" MinKeyId="2015000" MaxKeyId="2114999" IniFileName="Windows" Id="d552befb-48cc-4327-8f39-47d2d94f987c" InvalidWinBuild="[0,1]">
<Activate KmsItem="58e2134f-8e11-4d17-9cb2-91069c151148" />
<Activate KmsItem="969fe3c0-a3ec-491a-9f25-423605deb365" />
<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
<Activate KmsItem="cb8fc780-2c05-495a-9710-85afffc904d7" />
<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
<Activate KmsItem="e1c51358-fe3e-4203-a4a2-3b6b20c9734e" />
<Activate KmsItem="bbb97b3b-8ca4-4a28-9717-89fabd42c4ac" />
<Activate KmsItem="6d646890-3606-461a-86ab-598bb84ace82" />
<Activate KmsItem="d27cd636-1962-44e9-8b4f-27b6c23efb85" />
</CsvlkItem>
<CsvlkItem DisplayName="Windows 10 [Pre-Release]" IsPreview="true" GroupId="206" MinKeyId="1000000" MaxKeyId="1009999" IniFileName="Windows" Id="d521c0fd-1732-4c15-8b98-a41b2a95bbc4" InvalidWinBuild="[0,1]">
<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
<Activate KmsItem="58e2134f-8e11-4d17-9cb2-91069c151148" />
<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
<Activate KmsItem="cb8fc780-2c05-495a-9710-85afffc904d7" />
<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
<Activate KmsItem="5f94a0bb-d5a0-4081-a685-5819418b2fe0" />
<Activate KmsItem="d27cd636-1962-44e9-8b4f-27b6c23efb85" />
</CsvlkItem>
<CsvlkItem DisplayName="Windows Server Next [Pre-Release]" IsPreview="true" GroupId="206" MinKeyId="21001500" MaxKeyId="21010499" IniFileName="Windows" Id="c609957a-dc23-48b3-8c6b-31b303479de2" InvalidWinBuild="[0,1]">
<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
<Activate KmsItem="58e2134f-8e11-4d17-9cb2-91069c151148" />
<Activate KmsItem="969fe3c0-a3ec-491a-9f25-423605deb365" />
<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
<Activate KmsItem="cb8fc780-2c05-495a-9710-85afffc904d7" />
<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
<Activate KmsItem="5f94a0bb-d5a0-4081-a685-5819418b2fe0" />
<Activate KmsItem="33e156e4-b76f-4a52-9f91-f641dd95ac48" />
<Activate KmsItem="8fe53387-3087-4447-8985-f75132215ac9" />
<Activate KmsItem="8a21fdf3-cbc5-44eb-83f3-fe284e6680a7" />
<Activate KmsItem="0fc6ccaf-ff0e-4fae-9d08-4370785bf7ed" />
<Activate KmsItem="ca87f5b6-cd46-40c0-b06d-8ecd57a4373f" />
<Activate KmsItem="b2ca2689-a9a8-42d7-938d-cf8e9f201958" />
<Activate KmsItem="8665cb71-468c-4aa3-a337-cb9bc9d5eaac" />
<Activate KmsItem="8456efd3-0c04-4089-8740-5b7238535a65" />
<Activate KmsItem="6e9fc069-257d-4bc4-b4a7-750514d32743" />
<Activate KmsItem="6d5f5270-31ac-433e-b90a-39892923c657" />
<Activate KmsItem="d27cd636-1962-44e9-8b4f-27b6c23efb85" />
</CsvlkItem>
<CsvlkItem DisplayName="Windows Server 2012 R2 With Win 10" GroupId="206" MinKeyId="405000000" MaxKeyId="424999999" IniFileName="Windows" Id="20e938bb-df44-45ee-bde1-4e4fe7477f37" InvalidWinBuild="[0]">
<Activate KmsItem="58e2134f-8e11-4d17-9cb2-91069c151148" />
<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
<Activate KmsItem="cb8fc780-2c05-495a-9710-85afffc904d7" />
<Activate KmsItem="33e156e4-b76f-4a52-9f91-f641dd95ac48" />
<Activate KmsItem="8fe53387-3087-4447-8985-f75132215ac9" />
<Activate KmsItem="8a21fdf3-cbc5-44eb-83f3-fe284e6680a7" />
<Activate KmsItem="0fc6ccaf-ff0e-4fae-9d08-4370785bf7ed" />
<Activate KmsItem="ca87f5b6-cd46-40c0-b06d-8ecd57a4373f" />
<Activate KmsItem="b2ca2689-a9a8-42d7-938d-cf8e9f201958" />
<Activate KmsItem="8665cb71-468c-4aa3-a337-cb9bc9d5eaac" />
<Activate KmsItem="8456efd3-0c04-4089-8740-5b7238535a65" />
<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
<Activate KmsItem="d27cd636-1962-44e9-8b4f-27b6c23efb85" />
</CsvlkItem>
<CsvlkItem DisplayName="Windows Server 2012 R2 With Win 10 (Microsoft Internal Lab)" IsLab="true" GroupId="206" MinKeyId="17650000" MaxKeyId="17849999" IniFileName="Windows" Id="9e3fde40-d4b3-4c1d-9bde-32735aa19b39" InvalidWinBuild="[0]">
<Activate KmsItem="e1c51358-fe3e-4203-a4a2-3b6b20c9734e" />
<Activate KmsItem="58e2134f-8e11-4d17-9cb2-91069c151148" />
<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
<Activate KmsItem="bbb97b3b-8ca4-4a28-9717-89fabd42c4ac" />
<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
<Activate KmsItem="6d646890-3606-461a-86ab-598bb84ace82" />
<Activate KmsItem="cb8fc780-2c05-495a-9710-85afffc904d7" />
<Activate KmsItem="33e156e4-b76f-4a52-9f91-f641dd95ac48" />
<Activate KmsItem="8fe53387-3087-4447-8985-f75132215ac9" />
<Activate KmsItem="8a21fdf3-cbc5-44eb-83f3-fe284e6680a7" />
<Activate KmsItem="0fc6ccaf-ff0e-4fae-9d08-4370785bf7ed" />
<Activate KmsItem="ca87f5b6-cd46-40c0-b06d-8ecd57a4373f" />
<Activate KmsItem="b2ca2689-a9a8-42d7-938d-cf8e9f201958" />
<Activate KmsItem="8665cb71-468c-4aa3-a337-cb9bc9d5eaac" />
<Activate KmsItem="8456efd3-0c04-4089-8740-5b7238535a65" />
<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
<Activate KmsItem="d27cd636-1962-44e9-8b4f-27b6c23efb85" />
</CsvlkItem>
<CsvlkItem DisplayName="Windows 8.1" GroupId="206" MinKeyId="339000000" MaxKeyId="353999999" IniFileName="Windows" Id="29d0b60f-66da-4858-bcaf-9eb513cd310d" InvalidWinBuild="[0]">
<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
<Activate KmsItem="cb8fc780-2c05-495a-9710-85afffc904d7" />
<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
</CsvlkItem>
<CsvlkItem DisplayName="Windows 8.1 (Microsoft internal Lab)" IsLab="true" GroupId="206" MinKeyId="109500000" MaxKeyId="109999999" IniFileName="Windows" Id="4614b66f-a1d7-441c-9731-23f22d0ff4e5" InvalidWinBuild="[0]">
<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
<Activate KmsItem="bbb97b3b-8ca4-4a28-9717-89fabd42c4ac" />
<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
<Activate KmsItem="6d646890-3606-461a-86ab-598bb84ace82" />
<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
<Activate KmsItem="cb8fc780-2c05-495a-9710-85afffc904d7" />
</CsvlkItem>
<CsvlkItem DisplayName="Windows Server 2012 R2" GroupId="206" MinKeyId="271000000" MaxKeyId="310999999" IniFileName="Windows" Id="dcb88f6f-b090-405b-850e-dabcccf3693f" InvalidWinBuild="[0]">
<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
<Activate KmsItem="cb8fc780-2c05-495a-9710-85afffc904d7" />
<Activate KmsItem="33e156e4-b76f-4a52-9f91-f641dd95ac48" />
<Activate KmsItem="8fe53387-3087-4447-8985-f75132215ac9" />
<Activate KmsItem="8a21fdf3-cbc5-44eb-83f3-fe284e6680a7" />
<Activate KmsItem="0fc6ccaf-ff0e-4fae-9d08-4370785bf7ed" />
<Activate KmsItem="ca87f5b6-cd46-40c0-b06d-8ecd57a4373f" />
<Activate KmsItem="b2ca2689-a9a8-42d7-938d-cf8e9f201958" />
<Activate KmsItem="8665cb71-468c-4aa3-a337-cb9bc9d5eaac" />
<Activate KmsItem="8456efd3-0c04-4089-8740-5b7238535a65" />
</CsvlkItem>
<CsvlkItem DisplayName="Windows Server 2012 R2 (Microsoft Internal Lab)" IsLab="true" GroupId="206" MinKeyId="192000000" MaxKeyId="192499999" IniFileName="Windows" Id="acf1b4fd-1c55-4f2d-a60b-415ac958ad88" InvalidWinBuild="[0]">
<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
<Activate KmsItem="bbb97b3b-8ca4-4a28-9717-89fabd42c4ac" />
<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
<Activate KmsItem="6d646890-3606-461a-86ab-598bb84ace82" />
<Activate KmsItem="cb8fc780-2c05-495a-9710-85afffc904d7" />
<Activate KmsItem="33e156e4-b76f-4a52-9f91-f641dd95ac48" />
<Activate KmsItem="8fe53387-3087-4447-8985-f75132215ac9" />
<Activate KmsItem="8a21fdf3-cbc5-44eb-83f3-fe284e6680a7" />
<Activate KmsItem="0fc6ccaf-ff0e-4fae-9d08-4370785bf7ed" />
<Activate KmsItem="ca87f5b6-cd46-40c0-b06d-8ecd57a4373f" />
<Activate KmsItem="b2ca2689-a9a8-42d7-938d-cf8e9f201958" />
<Activate KmsItem="8665cb71-468c-4aa3-a337-cb9bc9d5eaac" />
<Activate KmsItem="8456efd3-0c04-4089-8740-5b7238535a65" />
</CsvlkItem>
<CsvlkItem DisplayName="Windows 8" GroupId="206" MinKeyId="199000000" MaxKeyId="213999999" IniFileName="Windows" Id="24259a22-3bf0-44af-a68b-1b858bce1894" InvalidWinBuild="[0]">
<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
</CsvlkItem>
<CsvlkItem DisplayName="Windows 8 (Microsoft Internal Lab)" IsLab="true" GroupId="206" MinKeyId="21100000" MaxKeyId="21599999" IniFileName="Windows" Id="044ba67a-4c54-47ee-941a-d6f2efaa6891" InvalidWinBuild="[0]">
<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
<Activate KmsItem="bbb97b3b-8ca4-4a28-9717-89fabd42c4ac" />
<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
</CsvlkItem>
<CsvlkItem DisplayName="Windows Server 2012" GroupId="206" MinKeyId="152000000" MaxKeyId="191999999" IniFileName="Windows" Id="7b37c913-252b-46be-ad80-b2b5ceade8af" InvalidWinBuild="[0]">
<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
<Activate KmsItem="33e156e4-b76f-4a52-9f91-f641dd95ac48" />
<Activate KmsItem="8fe53387-3087-4447-8985-f75132215ac9" />
<Activate KmsItem="8a21fdf3-cbc5-44eb-83f3-fe284e6680a7" />
<Activate KmsItem="0fc6ccaf-ff0e-4fae-9d08-4370785bf7ed" />
<Activate KmsItem="ca87f5b6-cd46-40c0-b06d-8ecd57a4373f" />
<Activate KmsItem="b2ca2689-a9a8-42d7-938d-cf8e9f201958" />
<Activate KmsItem="8665cb71-468c-4aa3-a337-cb9bc9d5eaac" />
</CsvlkItem>
<CsvlkItem DisplayName="Windows Server 2012 (Microsoft internal Lab)" IsLab="true" GroupId="206" MinKeyId="98500000" MaxKeyId="98999999" IniFileName="Windows" Id="fe27276b-a5a9-4b4d-88e3-14271beb79be" InvalidWinBuild="[0]">
<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
<Activate KmsItem="bbb97b3b-8ca4-4a28-9717-89fabd42c4ac" />
<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
<Activate KmsItem="33e156e4-b76f-4a52-9f91-f641dd95ac48" />
<Activate KmsItem="8fe53387-3087-4447-8985-f75132215ac9" />
<Activate KmsItem="8a21fdf3-cbc5-44eb-83f3-fe284e6680a7" />
<Activate KmsItem="0fc6ccaf-ff0e-4fae-9d08-4370785bf7ed" />
<Activate KmsItem="ca87f5b6-cd46-40c0-b06d-8ecd57a4373f" />
<Activate KmsItem="b2ca2689-a9a8-42d7-938d-cf8e9f201958" />
<Activate KmsItem="8665cb71-468c-4aa3-a337-cb9bc9d5eaac" />
</CsvlkItem>
<CsvlkItem DisplayName="Windows 7" GroupId="172" MinKeyId="37000000" MaxKeyId="49749999" IniFileName="Windows" Id="d188820a-cb63-4bad-a9a2-40b843ee23b7" InvalidWinBuild="[0]">
<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
</CsvlkItem>
<CsvlkItem DisplayName="Windows Server 2008 R2 C (Datacenter)" GroupId="168" MinKeyId="305000000" MaxKeyId="312119999" IniFileName="Windows" Id="8fe15d04-fc66-40e6-bf34-942481e06fd8" InvalidWinBuild="[0]">
<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
<Activate KmsItem="33e156e4-b76f-4a52-9f91-f641dd95ac48" />
<Activate KmsItem="8fe53387-3087-4447-8985-f75132215ac9" />
<Activate KmsItem="8a21fdf3-cbc5-44eb-83f3-fe284e6680a7" />
<Activate KmsItem="0fc6ccaf-ff0e-4fae-9d08-4370785bf7ed" />
<Activate KmsItem="ca87f5b6-cd46-40c0-b06d-8ecd57a4373f" />
<Activate KmsItem="b2ca2689-a9a8-42d7-938d-cf8e9f201958" />
</CsvlkItem>
<CsvlkItem DisplayName="Windows Server 2008 R2 B (Standard &amp; Enterprise)" GroupId="168" MinKeyId="312880000" MaxKeyId="332999999" IniFileName="Windows" Id="c99b641f-c4ea-4e63-bec3-5ed2ccd0f357" InvalidWinBuild="[0]">
<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
<Activate KmsItem="33e156e4-b76f-4a52-9f91-f641dd95ac48" />
<Activate KmsItem="8fe53387-3087-4447-8985-f75132215ac9" />
<Activate KmsItem="0fc6ccaf-ff0e-4fae-9d08-4370785bf7ed" />
<Activate KmsItem="ca87f5b6-cd46-40c0-b06d-8ecd57a4373f" />
</CsvlkItem>
<CsvlkItem DisplayName="Windows Server 2008 R2 A (Web &amp; HPC)" GroupId="168" MinKeyId="249000000" MaxKeyId="259119999" IniFileName="Windows" Id="f73d1bcd-0802-47dd-b2d9-81bf2f8c0744" InvalidWinBuild="[0]">
<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
<Activate KmsItem="33e156e4-b76f-4a52-9f91-f641dd95ac48" />
<Activate KmsItem="0fc6ccaf-ff0e-4fae-9d08-4370785bf7ed" />
</CsvlkItem>
<CsvlkItem DisplayName="Windows Vista (1 of 2)" GroupId="142" MinKeyId="26000000" MaxKeyId="35999999" IniFileName="Windows" Id="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" InvalidWinBuild="[]">
<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
</CsvlkItem>
<CsvlkItem DisplayName="Windows Vista (2 of 2)" GroupId="154" MinKeyId="394000000" MaxKeyId="416999999" IniFileName="Windows" Id="4871de8b-3adf-4455-a7d3-fd7b6c01c939" InvalidWinBuild="[]">
<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
</CsvlkItem>
<CsvlkItem DisplayName="Windows Server 2008 C (Datacenter)" GroupId="152" MinKeyId="381000000" MaxKeyId="392999999" IniFileName="Windows" Id="c90d1b4e-8aa8-439e-8b9e-b6d6b6a6d975" InvalidWinBuild="[]">
<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
<Activate KmsItem="33e156e4-b76f-4a52-9f91-f641dd95ac48" />
<Activate KmsItem="8fe53387-3087-4447-8985-f75132215ac9" />
<Activate KmsItem="8a21fdf3-cbc5-44eb-83f3-fe284e6680a7" />
</CsvlkItem>
<CsvlkItem DisplayName="Windows Server 2008 B (Standard &amp; Enterprise)" GroupId="152" MinKeyId="339000000" MaxKeyId="358999999" IniFileName="Windows" Id="56df4151-1f9f-41bf-acaa-2941c071872b" InvalidWinBuild="[]">
<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
<Activate KmsItem="33e156e4-b76f-4a52-9f91-f641dd95ac48" />
<Activate KmsItem="8fe53387-3087-4447-8985-f75132215ac9" />
</CsvlkItem>
<CsvlkItem DisplayName="Windows Server 2008 A (Web &amp; HPC)" GroupId="152" MinKeyId="368000000" MaxKeyId="380999999" IniFileName="Windows" Id="c448fa06-49d1-44ec-82bb-0085545c3b51" InvalidWinBuild="[]">
<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
<Activate KmsItem="33e156e4-b76f-4a52-9f91-f641dd95ac48" />
</CsvlkItem>
<CsvlkItem DisplayName="Office 2019" VlmcsdIndex="5" GroupId="206" MinKeyId="666000000" MaxKeyId="685999999" IniFileName="Office2019" EPid="06401-00206-678-008369-03-1033-9600.0000-2802018" Id="70512334-47b4-44db-a233-be5ea33b914c" InvalidWinBuild="[0,1]">
<Activate KmsItem="617d9eb1-ef36-4f82-86e0-a65ae07b96c6" />
</CsvlkItem>
<CsvlkItem DisplayName="Office 2016" VlmcsdIndex="3" GroupId="206" MinKeyId="437000000" MaxKeyId="458999999" IniFileName="Office2016" EPid="06401-00206-456-865118-03-1033-9600.0000-2802018" Id="98ebfe73-2084-4c97-932c-c0cd1643bea7" InvalidWinBuild="[0]">
<Activate KmsItem="85b5f61b-320b-4be3-814a-b76b2bfafc82" />
</CsvlkItem>
<CsvlkItem DisplayName="Office 2013" VlmcsdIndex="2" GroupId="206" MinKeyId="234000000" MaxKeyId="255999999" IniFileName="Office2013" EPid="06401-00206-243-662026-03-1033-9600.0000-2802018" Id="2e28138a-847f-42bc-9752-61b03fff33cd" InvalidWinBuild="[]">
<Activate KmsItem="e6a6f1bf-9d40-40c3-aa9f-c77ba21578c0" />
</CsvlkItem>
<CsvlkItem DisplayName="Office 2010" VlmcsdIndex="1" GroupId="96" MinKeyId="199000000" MaxKeyId="217999999" IniFileName="Office2010" EPid="06401-00096-208-497764-03-1033-9600.0000-2802018" Id="bfe7a195-4f8f-4f0b-a622-cf13c7d16864" InvalidWinBuild="[]">
<Activate KmsItem="e85af946-2e25-47b7-83e1-bebcebeac611" />
</CsvlkItem>
</CsvlkItems>
<AppItems>
<AppItem DisplayName="Windows" VlmcsdIndex="0" Id="55c92734-d682-4d71-983e-d6ec3f16059f" MinActiveClients="50">
<KmsItem DisplayName="Windows Server 2019" Id="8449b1fb-f0ea-497a-99ab-66ca96e9a0f5" DefaultKmsProtocol="6.0" NCountPolicy="5">
<SkuItem DisplayName="Windows Server 2019 ARM64" Id="8de8eb62-bbe0-40ac-ac17-f75595071ea3" Gvlk="GRFBW-QNDC4-6QBHG-CCK3B-2PR88" />
<SkuItem DisplayName="Windows Server 2019 Azure Core" Id="a99cc1f0-7719-4306-9645-294102fbff95" Gvlk="FDNH6-VW9RW-BXPJ7-4XTYG-239TB" />
<SkuItem DisplayName="Windows Server 2019 Datacenter" Id="34e1ae55-27f8-4950-8877-7a03be5fb181" Gvlk="WMDGN-G9PQG-XVVXX-R3X43-63DFG" />
<SkuItem DisplayName="Windows Server 2019 Essentials" Id="034d3cbb-5d4b-4245-b3f8-f84571314078" Gvlk="WVDHN-86M7X-466P6-VHXV7-YY726" />
<SkuItem DisplayName="Windows Server 2019 Standard" Id="de32eafd-aaee-4662-9444-c1befb41bde2" Gvlk="N69G4-B89J2-4G8F4-WWYCC-J464C" />
<SkuItem DisplayName="Windows Server 2019 Datacenter (Semi-Annual Channel v.1809)" Id="90c362e5-0da1-4bfd-b53b-b87d309ade43" Gvlk="6NMRW-2C8FM-D24W7-TQWMY-CWH2D" />
<SkuItem DisplayName="Windows Server 2019 Standard (Semi-Annual Channel v.1809)" Id="73e3957c-fc0c-400d-9184-5f7b6f2eb409" Gvlk="N2KJX-J94YW-TQVFB-DG9YT-724CC" />
</KmsItem>
<KmsItem DisplayName="Windows 10 2019 (Volume)" Id="11b15659-e603-4cf1-9c1f-f0ec01b81888" DefaultKmsProtocol="6.0" NCountPolicy="25">
<SkuItem DisplayName="Windows 10 Enterprise LTSC 2019" Id="32d2fab3-e4a8-42c2-923b-4bf4fd13e6ee" Gvlk="M7XTQ-FN8P6-TTKYV-9D4CC-J462D" />
<SkuItem DisplayName="Windows 10 Enterprise LTSC 2019 N" Id="7103a333-b8c8-49cc-93ce-d37c09687f92" Gvlk="92NFX-8DJQP-P6BBQ-THF9C-7CG2H" />
</KmsItem>
<KmsItem DisplayName="Windows 10 Unknown (Volume)" Id="d27cd636-1962-44e9-8b4f-27b6c23efb85" DefaultKmsProtocol="6.0" NCountPolicy="25">
</KmsItem>
<KmsItem DisplayName="Windows 10 China Government" Id="7ba0bf23-d0f5-4072-91d9-d55af5a481b6" CanMapToDefaultCsvlk="false" DefaultKmsProtocol="6.0" NCountPolicy="25">
<SkuItem DisplayName="Windows 10 Enterprise G" Id="e0b2d383-d112-413f-8a80-97f373a5820c" Gvlk="YYVX9-NTFWV-6MDM3-9PT4T-4M68B" />
<SkuItem DisplayName="Windows 10 Enterprise GN" Id="e38454fb-41a4-4f59-a5dc-25080e354730" Gvlk="44RPN-FTY23-9VTTB-MP9BX-T84FV" />
</KmsItem>
<KmsItem DisplayName="Windows 10 2016 (Volume)" Id="969fe3c0-a3ec-491a-9f25-423605deb365" DefaultKmsProtocol="6.0" NCountPolicy="25">
<SkuItem DisplayName="Windows 10 Enterprise 2016 LTSB" Id="2d5a5a60-3040-48bf-beb0-fcd770c20ce0" Gvlk="DCPHK-NFMTC-H88MJ-PFHPY-QJ4BJ" />
<SkuItem DisplayName="Windows 10 Enterprise 2016 LTSB N" Id="9f776d83-7156-45b2-8a5c-359b9c9f22a3" Gvlk="QFFDN-GRT3P-VKWWX-X7T3R-8B639" />
</KmsItem>
<KmsItem DisplayName="Windows 10 (Retail)" Id="e1c51358-fe3e-4203-a4a2-3b6b20c9734e" IsRetail="true" DefaultKmsProtocol="6.0" NCountPolicy="25">
<SkuItem DisplayName="Windows 10 Home / Core" Id="58e97c99-f377-4ef1-81d5-4ad5522b5fd8" Gvlk="TX9XD-98N7V-6WMQ6-BX7FG-H8Q99" />
<SkuItem DisplayName="Windows 10 Home / Core Country Specific" Id="a9107544-f4a0-4053-a96a-1479abdef912" Gvlk="PVMJN-6DFY6-9CCP6-7BKTT-D3WVR" />
<SkuItem DisplayName="Windows 10 Home / Core N" Id="7b9e1751-a8da-4f75-9560-5fadfe3d8e38" Gvlk="3KHY7-WNT83-DGQKR-F7HPR-844BM" />
<SkuItem DisplayName="Windows 10 Home / Core Single Language" Id="cd918a57-a41b-4c82-8dce-1a538e221a83" Gvlk="7HNRX-D7KGG-3K4RQ-4WPJ4-YTDFH" />
</KmsItem>
<KmsItem DisplayName="Windows 10 2015 (Volume)" Id="58e2134f-8e11-4d17-9cb2-91069c151148" DefaultKmsProtocol="6.0" NCountPolicy="25">
<SkuItem DisplayName="Windows 10 Education" Id="e0c42288-980c-4788-a014-c080d2e1926e" Gvlk="NW6C2-QMPVW-D7KKK-3GKT6-VCFB2" />
<SkuItem DisplayName="Windows 10 Education N" Id="3c102355-d027-42c6-ad23-2e7ef8a02585" Gvlk="2WH4N-8QGBV-H22JP-CT43Q-MDWWJ" />
<SkuItem DisplayName="Windows 10 Enterprise" Id="73111121-5638-40f6-bc11-f1d7b0d64300" Gvlk="NPPR9-FWDCX-D2C8J-H872K-2YT43" />
<SkuItem DisplayName="Windows 10 Enterprise 2015 LTSB" Id="7b51a46c-0c04-4e8f-9af4-8496cca90d5e" Gvlk="WNMTR-4C88C-JK8YV-HQ7T2-76DF9" />
<SkuItem DisplayName="Windows 10 Enterprise 2015 LTSB N" Id="87b838b7-41b6-4590-8318-5797951d8529" Gvlk="2F77B-TNFGY-69QQF-B8YKP-D69TJ" />
<SkuItem DisplayName="Windows 10 Enterprise N" Id="e272e3e2-732f-4c65-a8f0-484747d0d947" Gvlk="DPH2V-TTNVB-4X9Q3-TJR4H-KHJW4" />
<SkuItem DisplayName="Windows 10 Professional Workstation" Id="82bbc092-bc50-4e16-8e18-b74fc486aec3" Gvlk="NRG8B-VKK3Q-CXVCJ-9G2XF-6Q84J" />
<SkuItem DisplayName="Windows 10 Professional Workstation N" Id="4b1571d3-bafb-4b40-8087-a961be2caf65" Gvlk="9FNHH-K3HBT-3W4TD-6383H-6XYWF" />
<SkuItem DisplayName="Windows 10 Professional" Id="2de67392-b7a7-462a-b1ca-108dd189f588" Gvlk="W269N-WFGWX-YVC9B-4J6C9-T83GX" />
<SkuItem DisplayName="Windows 10 Professional Education" Id="3f1afc82-f8ac-4f6c-8005-1d233e606eee" Gvlk="6TP4R-GNPTD-KYYHQ-7B7DP-J447Y" />
<SkuItem DisplayName="Windows 10 Professional Education N" Id="5300b18c-2e33-4dc2-8291-47ffcec746dd" Gvlk="YVWGF-BXNMC-HTQYQ-CPQ99-66QFC" />
<SkuItem DisplayName="Windows 10 Professional N" Id="a80b5abf-76ad-428b-b05d-a47d2dffeebf" Gvlk="MH37W-N47XK-V7XM9-C7227-GCQG9" />
<SkuItem DisplayName="Windows 10 Professional [Preview]" Id="ff808201-fec6-4fd4-ae16-abbddade5706" Gvlk="XQHPH-N4D9W-M8P96-DPDFP-TMVPY" IsGeneratedGvlk="true" />
<SkuItem DisplayName="Windows 10 Enterprise [Preview]" Id="43f2ab05-7c87-4d56-b27c-44d0f9a3dabd" Gvlk="QNMXX-GCD3W-TCCT4-872RV-G6P4J" IsGeneratedGvlk="true" />
<SkuItem DisplayName="Windows 10 Enterprise for Virtual Desktops" Id="ec868e65-fadf-4759-b23e-93fe37f2cc29" Gvlk="CPWHC-NT2C7-VYW78-DHDB2-PG3GK" />
<SkuItem DisplayName="Windows 10 Remote Server" Id="e4db50ea-bda1-4566-b047-0ca50abc6f07" Gvlk="7NBT4-WGBQX-MP4H7-QXFF8-YP3KX" />
<SkuItem DisplayName="Windows 10 S (Lean)" Id="0df4f814-3f57-4b8b-9a9d-fddadcd69fac" Gvlk="NBTWJ-3DR69-3C4V8-C26MC-GQ9M6" />
</KmsItem>
<KmsItem DisplayName="Windows 7" Id="7fde5219-fbfa-484a-82c9-34d1ad53e856" DefaultKmsProtocol="4.0" NCountPolicy="25">
<SkuItem DisplayName="Windows 7 Enterprise" Id="ae2ee509-1b34-41c0-acb7-6d4650168915" Gvlk="33PXH-7Y6KF-2VJC9-XBBR8-HVTHH" />
<SkuItem DisplayName="Windows 7 Enterprise E" Id="46bbed08-9c7b-48fc-a614-95250573f4ea" Gvlk="C29WB-22CC8-VJ326-GHFJW-H9DH4" />
<SkuItem DisplayName="Windows 7 Enterprise N" Id="1cb6d605-11b3-4e14-bb30-da91c8e3983a" Gvlk="YDRBP-3D83W-TY26F-D46B2-XCKRJ" />
<SkuItem DisplayName="Windows 7 Professional" Id="b92e9980-b9d5-4821-9c94-140f632f6312" Gvlk="FJ82H-XT6CR-J8D7P-XQJJ2-GPDD4" />
<SkuItem DisplayName="Windows 7 Professional E" Id="5a041529-fef8-4d07-b06f-b59b573b32d2" Gvlk="W82YF-2Q76Y-63HXB-FGJG9-GF7QX" />
<SkuItem DisplayName="Windows 7 Professional N" Id="54a09a0d-d57b-4c10-8b69-a842d6590ad5" Gvlk="MRPKT-YTG23-K7D7T-X2JMM-QY7MG" />
<SkuItem DisplayName="Windows 7 Embedded POSReady" Id="db537896-376f-48ae-a492-53d0547773d0" Gvlk="YBYF6-BHCR3-JPKRB-CDW7B-F9BK4" />
<SkuItem DisplayName="Windows 7 Embedded Standard" Id="e1a8296a-db37-44d1-8cce-7bc961d59c54" Gvlk="XGY72-BRBBT-FF8MH-2GG8H-W7KCW" />
<SkuItem DisplayName="Windows 7 ThinPC" Id="aa6dd3aa-c2b4-40e2-a544-a6bbb3f5c395" Gvlk="73KQT-CD9G6-K7TQG-66MRP-CQ22C" />
</KmsItem>
<KmsItem DisplayName="Windows 8 (Retail)" Id="bbb97b3b-8ca4-4a28-9717-89fabd42c4ac" IsRetail="true" DefaultKmsProtocol="5.0" NCountPolicy="25">
<SkuItem DisplayName="Windows 8 Core / Server 2012" Id="c04ed6bf-55c8-4b47-9f8e-5a1f31ceee60" Gvlk="BN3D2-R7TKB-3YPBD-8DRP2-27GG4" />
<SkuItem DisplayName="Windows 8 Core / Server 2012 Country Specific" Id="9d5584a2-2d85-419a-982c-a00888bb9ddf" Gvlk="4K36P-JN4VD-GDC6V-KDT89-DYFKP" />
<SkuItem DisplayName="Windows 8 Core / Server 2012 N" Id="197390a0-65f6-4a95-bdc4-55d58a3b0253" Gvlk="8N2M2-HWPGY-7PGT9-HGDD8-GVGGY" />
<SkuItem DisplayName="Windows 8 Core / Server 2012 Single Language" Id="8860fcd4-a77b-4a20-9045-a150ff11d609" Gvlk="2WN2H-YGCQR-KFX6K-CD6TF-84YXQ" />
<SkuItem DisplayName="Windows 8 Professional WMC" Id="a00018a3-f20f-4632-bf7c-8daa5351c914" Gvlk="GNBB8-YVD74-QJHX6-27H4K-8QHDG" />
</KmsItem>
<KmsItem DisplayName="Windows 8 (Volume)" Id="3c40b358-5948-45af-923b-53d21fcc7e79" DefaultKmsProtocol="5.0" NCountPolicy="25">
<SkuItem DisplayName="Windows 8 Embedded Industry Professional" Id="10018baf-ce21-4060-80bd-47fe74ed4dab" Gvlk="RYXVT-BNQG7-VD29F-DBMRY-HT73M" />
<SkuItem DisplayName="Windows 8 Embedded Industry Enterprise" Id="18db1848-12e0-4167-b9d7-da7fcda507db" Gvlk="NKB3R-R2F8T-3XCDP-7Q2KW-XWYQ2" />
<SkuItem DisplayName="Windows 8 Enterprise" Id="458e1bec-837a-45f6-b9d5-925ed5d299de" Gvlk="32JNW-9KQ84-P47T8-D8GGY-CWCK7" />
<SkuItem DisplayName="Windows 8 Enterprise N" Id="e14997e7-800a-4cf7-ad10-de4b45b578db" Gvlk="JMNMF-RHW7P-DMY6X-RF3DR-X2BQT" />
<SkuItem DisplayName="Windows 8 Professional" Id="a98bcd6d-5343-4603-8afe-5908e4611112" Gvlk="NG4HW-VH26C-733KW-K6F98-J8CK4" />
<SkuItem DisplayName="Windows 8 Professional N" Id="ebf245c1-29a8-4daf-9cb1-38dfc608a8c8" Gvlk="XCVCF-2NXM9-723PB-MHCB7-2RYQQ" />
</KmsItem>
<KmsItem DisplayName="Windows 8.1 (Retail)" Id="6d646890-3606-461a-86ab-598bb84ace82" IsRetail="true" DefaultKmsProtocol="6.0" NCountPolicy="25">
<SkuItem DisplayName="Windows 8.1 Core" Id="fe1c3238-432a-43a1-8e25-97e7d1ef10f3" Gvlk="M9Q9P-WNJJT-6PXPY-DWX8H-6XWKK" />
<SkuItem DisplayName="Windows 8.1 Core ARM" Id="ffee456a-cd87-4390-8e07-16146c672fd0" Gvlk="XYTND-K6QKT-K2MRH-66RTM-43JKP" />
<SkuItem DisplayName="Windows 8.1 Core Country Specific" Id="db78b74f-ef1c-4892-abfe-1e66b8231df6" Gvlk="NCTT7-2RGK8-WMHRF-RY7YQ-JTXG3" />
<SkuItem DisplayName="Windows 8.1 Core N" Id="78558a64-dc19-43fe-a0d0-8075b2a370a3" Gvlk="7B9N3-D94CG-YTVHR-QBPX3-RJP64" />
<SkuItem DisplayName="Windows 8.1 Core Single Language" Id="c72c6a1d-f252-4e7e-bdd1-3fca342acb35" Gvlk="BB6NG-PQ82V-VRDPW-8XVD2-V8P66" />
<SkuItem DisplayName="Windows 8.1 Professional Student" Id="e58d87b5-8126-4580-80fb-861b22f79296" Gvlk="MX3RK-9HNGX-K3QKC-6PJ3F-W8D7B" IsGeneratedGvlk="true" />
<SkuItem DisplayName="Windows 8.1 Professional Student N" Id="cab491c7-a918-4f60-b502-dab75e334f40" Gvlk="TNFGH-2R6PB-8XM3K-QYHX2-J4296" IsGeneratedGvlk="true" />
<SkuItem DisplayName="Windows 8.1 Professional WMC" Id="096ce63d-4fac-48a9-82a9-61ae9e800e5f" Gvlk="789NJ-TQK6T-6XTH8-J39CJ-J8D3P" />
</KmsItem>
<KmsItem DisplayName="Windows 8.1 (Volume)" Id="cb8fc780-2c05-495a-9710-85afffc904d7" DefaultKmsProtocol="6.0" NCountPolicy="25">
<SkuItem DisplayName="Windows 8.1 Core Connected" Id="e9942b32-2e55-4197-b0bd-5ff58cba8860" Gvlk="3PY8R-QHNP9-W7XQD-G6DPH-3J2C9" IsGeneratedGvlk="true" />
<SkuItem DisplayName="Windows 8.1 Core Connected Country Specific" Id="ba998212-460a-44db-bfb5-71bf09d1c68b" Gvlk="R962J-37N87-9VVK2-WJ74P-XTMHR" IsGeneratedGvlk="true" />
<SkuItem DisplayName="Windows 8.1 Core Connected N" Id="c6ddecd6-2354-4c19-909b-306a3058484e" Gvlk="Q6HTR-N24GM-PMJFP-69CD8-2GXKR" IsGeneratedGvlk="true" />
<SkuItem DisplayName="Windows 8.1 Core Connected Single Language" Id="b8f5e3a3-ed33-4608-81e1-37d6c9dcfd9c" Gvlk="KF37N-VDV38-GRRTV-XH8X6-6F3BB" IsGeneratedGvlk="true" />
<SkuItem DisplayName="Windows 8.1 Enterprise" Id="81671aaf-79d1-4eb1-b004-8cbbe173afea" Gvlk="MHF9N-XY6XB-WVXMC-BTDCT-MKKG7" />
<SkuItem DisplayName="Windows 8.1 Enterprise N" Id="113e705c-fa49-48a4-beea-7dd879b46b14" Gvlk="TT4HM-HN7YT-62K67-RGRQJ-JFFXW" />
<SkuItem DisplayName="Windows 8.1 Professional" Id="c06b6981-d7fd-4a35-b7b4-054742b7af67" Gvlk="GCRJD-8NW9H-F2CDX-CCM8D-9D6T9" />
<SkuItem DisplayName="Windows 8.1 Professional N" Id="7476d79f-8e48-49b4-ab63-4d0b813a16e4" Gvlk="HMCNV-VVBFX-7HMBH-CTY9B-B4FXY" />
<SkuItem DisplayName="Windows 8.1 Embedded Industry Professional" Id="0ab82d54-47f4-4acb-818c-cc5bf0ecb649" Gvlk="NMMPB-38DD4-R2823-62W8D-VXKJB" />
<SkuItem DisplayName="Windows 8.1 Embedded Industry Automotive" Id="f7e88590-dfc7-4c78-bccb-6f3865b99d1a" Gvlk="VHXM3-NR6FT-RY6RT-CK882-KW2CJ" />
<SkuItem DisplayName="Windows 8.1 Embedded Industry Enterprise" Id="cd4e2d9f-5059-4a50-a92d-05d5bb1267c7" Gvlk="FNFKF-PWTVT-9RC8H-32HB2-JB34X" />
</KmsItem>
<KmsItem DisplayName="Windows Preview" Id="5f94a0bb-d5a0-4081-a685-5819418b2fe0" DefaultKmsProtocol="5.0" NCountPolicy="25">
<SkuItem DisplayName="Windows 8.1 Enterprise [Preview]" Id="cde952c7-2f96-4d9d-8f2b-2d349f64fc51" Gvlk="2MP7K-98NK8-WPVF3-Q2WDG-VMD98" />
<SkuItem DisplayName="Windows 8.1 Professional (Blue) [Preview]" Id="a4383e6b-dada-423d-a43d-f25678429676" Gvlk="MTWNQ-CKDHJ-3HXW9-Q2PFX-WB2HQ" />
<SkuItem DisplayName="Windows 8 Professional WMC [Preview]" Id="cf59a07b-1a2a-4be0-bfe0-423b5823e663" Gvlk="MY4N9-TGH34-4X4VY-8FG2T-RRDPV" />
<SkuItem DisplayName="Windows 8.x [Preview]" Id="2b9c337f-7a1d-4271-90a3-c6855a2b8a1c" Gvlk="MPWP3-DXNP9-BRD79-W8WFP-3YFJ6" />
<SkuItem DisplayName="Windows 8.x ARM [Preview]" Id="631ead72-a8ab-4df8-bbdf-372029989bdd" />
</KmsItem>
<KmsItem DisplayName="Windows Server 2008 A (Web and HPC)" Id="33e156e4-b76f-4a52-9f91-f641dd95ac48" DefaultKmsProtocol="4.0" NCountPolicy="5">
<SkuItem DisplayName="Windows Server 2008 Web" Id="ddfa9f7c-f09e-40b9-8c1a-be877a9a7f4b" Gvlk="WYR28-R7TFJ-3X2YQ-YCY4H-M249D" />
<SkuItem DisplayName="Windows Server 2008 Compute Cluster" Id="7afb1156-2c1d-40fc-b260-aab7442b62fe" Gvlk="RCTX3-KWVHP-BR6TB-RB6DM-6X7HP" />
</KmsItem>
<KmsItem DisplayName="Windows Server 2008 B (Standard and Enterprise)" Id="8fe53387-3087-4447-8985-f75132215ac9" DefaultKmsProtocol="4.0" NCountPolicy="5">
<SkuItem DisplayName="Windows Server 2008 Standard" Id="ad2542d4-9154-4c6d-8a44-30f11ee96989" Gvlk="TM24T-X9RMF-VWXK6-X8JC9-BFGM2" />
<SkuItem DisplayName="Windows Server 2008 Standard without Hyper-V" Id="2401e3d0-c50a-4b58-87b2-7e794b7d2607" Gvlk="W7VD6-7JFBR-RX26B-YKQ3Y-6FFFJ" />
<SkuItem DisplayName="Windows Server 2008 Enterprise" Id="c1af4d90-d1bc-44ca-85d4-003ba33db3b9" Gvlk="YQGMW-MPWTJ-34KDK-48M3W-X4Q6V" />
<SkuItem DisplayName="Windows Server 2008 Enterprise without Hyper-V" Id="8198490a-add0-47b2-b3ba-316b12d647b4" Gvlk="39BXF-X8Q23-P2WWT-38T2F-G3FPG" />
</KmsItem>
<KmsItem DisplayName="Windows Server 2008 C (Datacenter)" Id="8a21fdf3-cbc5-44eb-83f3-fe284e6680a7" DefaultKmsProtocol="4.0" NCountPolicy="5">
<SkuItem DisplayName="Windows Server 2008 Datacenter" Id="68b6e220-cf09-466b-92d3-45cd964b9509" Gvlk="7M67G-PC374-GR742-YH8V4-TCBY3" />
<SkuItem DisplayName="Windows Server 2008 Datacenter without Hyper-V" Id="fd09ef77-5647-4eff-809c-af2b64659a45" Gvlk="22XQ2-VRXRG-P8D42-K34TD-G3QQC" />
<SkuItem DisplayName="Windows Server 2008 for Itanium" Id="01ef176b-3e0d-422a-b4f8-4ea880035e8f" Gvlk="4DWFP-JF3DJ-B7DTH-78FJB-PDRHK" />
</KmsItem>
<KmsItem DisplayName="Windows Server 2008 R2 A (Web and HPC)" Id="0fc6ccaf-ff0e-4fae-9d08-4370785bf7ed" DefaultKmsProtocol="4.0" NCountPolicy="5">
<SkuItem DisplayName="Windows MultiPoint Server 2010" Id="f772515c-0e87-48d5-a676-e6962c3e1195" Gvlk="736RG-XDKJK-V34PF-BHK87-J6X3K" />
<SkuItem DisplayName="Windows Server 2008 R2 Web" Id="a78b8bd9-8017-4df5-b86a-09f756affa7c" Gvlk="6TPJF-RBVHG-WBW2R-86QPH-6RTM4" />
<SkuItem DisplayName="Windows Server 2008 R2 HPC Edition" Id="cda18cf3-c196-46ad-b289-60c072869994" Gvlk="TT8MH-CG224-D3D7Q-498W2-9QCTX" />
</KmsItem>
<KmsItem DisplayName="Windows Server 2008 R2 B (Standard and Enterprise)" Id="ca87f5b6-cd46-40c0-b06d-8ecd57a4373f" DefaultKmsProtocol="4.0" NCountPolicy="5">
<SkuItem DisplayName="Windows Server 2008 R2 Standard" Id="68531fb9-5511-4989-97be-d11a0f55633f" Gvlk="YC6KT-GKW9T-YTKYR-T4X34-R7VHC" />
<SkuItem DisplayName="Windows Server 2008 R2 Enterprise" Id="620e2b3d-09e7-42fd-802a-17a13652fe7a" Gvlk="489J6-VHDMP-X63PK-3K798-CPX3Y" />
</KmsItem>
<KmsItem DisplayName="Windows Server 2008 R2 C (Datacenter)" Id="b2ca2689-a9a8-42d7-938d-cf8e9f201958" DefaultKmsProtocol="4.0" NCountPolicy="5">
<SkuItem DisplayName="Windows Server 2008 R2 Datacenter" Id="7482e61b-c589-4b7f-8ecc-46d455ac3b87" Gvlk="74YFP-3QFB3-KQT8W-PMXWJ-7M648" />
<SkuItem DisplayName="Windows Server 2008 R2 for Itanium Enterprise" Id="8a26851c-1c7e-48d3-a687-fbca9b9ac16b" Gvlk="GT63C-RJFQ3-4GMB6-BRFB9-CB83V" />
</KmsItem>
<KmsItem DisplayName="Windows Server 2012" Id="8665cb71-468c-4aa3-a337-cb9bc9d5eaac" DefaultKmsProtocol="5.0" NCountPolicy="5">
<SkuItem DisplayName="Windows Server 2012 Datacenter" Id="d3643d60-0c42-412d-a7d6-52e6635327f6" Gvlk="48HP8-DN98B-MYWDG-T2DCC-8W83P" />
<SkuItem DisplayName="Windows Server 2012 MultiPoint Premium" Id="95fd1c83-7df5-494a-be8b-1300e1c9d1cd" Gvlk="XNH6W-2V9GX-RGJ4K-Y8X6F-QGJ2G" />
<SkuItem DisplayName="Windows Server 2012 MultiPoint Standard" Id="7d5486c7-e120-4771-b7f1-7b56c6d3170c" Gvlk="HM7DN-YVMH3-46JC3-XYTG7-CYQJJ" />
<SkuItem DisplayName="Windows Server 2012 Standard" Id="f0f5ec41-0d55-4732-af02-440a44a3cf0f" Gvlk="XC9B7-NBPP2-83J2H-RHMBY-92BT4" />
</KmsItem>
<KmsItem DisplayName="Windows Server 2012 R2" Id="8456efd3-0c04-4089-8740-5b7238535a65" DefaultKmsProtocol="6.0" NCountPolicy="5">
<SkuItem DisplayName="Windows Server 2012 R2 Cloud Storage" Id="b743a2be-68d4-4dd3-af32-92425b7bb623" Gvlk="3NPTF-33KPT-GGBPR-YX76B-39KDD" />
<SkuItem DisplayName="Windows Server 2012 R2 Datacenter" Id="00091344-1ea4-4f37-b789-01750ba6988c" Gvlk="W3GGN-FT8W3-Y4M27-J84CP-Q3VJ9" />
<SkuItem DisplayName="Windows Server 2012 R2 Essentials" Id="21db6ba4-9a7b-4a14-9e29-64a60c59301d" Gvlk="KNC87-3J2TX-XB4WP-VCPJV-M4FWM" />
<SkuItem DisplayName="Windows Server 2012 R2 Standard" Id="b3ca044e-a358-4d68-9883-aaa2941aca99" Gvlk="D2N9P-3P6X9-2R39C-7RTCD-MDVJX" />
</KmsItem>
<KmsItem DisplayName="Windows Server 2016" Id="6e9fc069-257d-4bc4-b4a7-750514d32743" DefaultKmsProtocol="6.0" NCountPolicy="5">
<SkuItem DisplayName="Windows Server 2016 Azure Core" Id="3dbf341b-5f6c-4fa7-b936-699dce9e263f" Gvlk="VP34G-4NPPG-79JTQ-864T4-R3MQX" />
<SkuItem DisplayName="Windows Server 2016 Cloud Storage" Id="7b4433f4-b1e7-4788-895a-c45378d38253" Gvlk="QN4C6-GBJD2-FB422-GHWJK-GJG2R" />
<SkuItem DisplayName="Windows Server 2016 Datacenter" Id="21c56779-b449-4d20-adfc-eece0e1ad74b" Gvlk="CB7KF-BWN84-R7R2Y-793K2-8XDDG" />
<SkuItem DisplayName="Windows Server 2016 Essentials" Id="2b5a1b0f-a5ab-4c54-ac2f-a6d94824a283" Gvlk="JCKRF-N37P4-C2D82-9YXRT-4M63B" />
<SkuItem DisplayName="Windows Server 2016 Standard" Id="8c1c5410-9f39-4805-8c9d-63a07706358f" Gvlk="WC2BQ-8NRM3-FDDYY-2BFGV-KHKQY" />
<SkuItem DisplayName="Windows Server 2016 ARM64" Id="43d9af6e-5e86-4be8-a797-d072a046896c" Gvlk="K9FYF-G6NCK-73M32-XMVPY-F9DRR" />
<SkuItem DisplayName="Windows Server 2016 Datacenter (Semi-Annual Channel v.1803)" Id="e49c08e7-da82-42f8-bde2-b570fbcae76c" Gvlk="2HXDN-KRXHB-GPYC7-YCKFJ-7FVDG" />
<SkuItem DisplayName="Windows Server 2016 Standard (Semi-Annual Channel v.1803)" Id="61c5ef22-f14f-4553-a824-c4b31e84b100" Gvlk="PTXN8-JFHJM-4WC78-MPCBR-9W4KR" />
</KmsItem>
<KmsItem DisplayName="Windows Server Preview" Id="6d5f5270-31ac-433e-b90a-39892923c657" IsPreview="true" DefaultKmsProtocol="6.0" NCountPolicy="5">
<SkuItem DisplayName="Windows Server 2016 Datacenter [Preview]" Id="ba947c44-d19d-4786-b6ae-22770bc94c54" Gvlk="VRDD2-NVGDP-K7QG8-69BR4-TVFHB" />
</KmsItem>
<KmsItem DisplayName="Windows Vista" Id="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" DefaultKmsProtocol="4.0" NCountPolicy="25">
<SkuItem DisplayName="Windows Vista Business" Id="4f3d1606-3fea-4c01-be3c-8d671c401e3b" Gvlk="YFKBB-PQJJV-G996G-VWGXY-2V3X8" />
<SkuItem DisplayName="Windows Vista Business N" Id="2c682dc2-8b68-4f63-a165-ae291d4cf138" Gvlk="HMBQG-8H2RH-C77VX-27R82-VMQBT" />
<SkuItem DisplayName="Windows Vista Enterprise" Id="cfd8ff08-c0d7-452b-9f60-ef5c70c32094" Gvlk="VKK3X-68KWM-X2YGT-QR4M6-4BWMV" />
<SkuItem DisplayName="Windows Vista Enterprise N" Id="d4f54950-26f2-4fb4-ba21-ffab16afcade" Gvlk="VTC42-BM838-43QHV-84HX6-XJXKV" />
</KmsItem>
</AppItem>
<AppItem DisplayName="Office 14 (2010)" VlmcsdIndex="1" MinActiveClients="10" Id="59a52881-a989-479d-af46-f275c6370663">
<KmsItem DisplayName="Office 2010" Id="e85af946-2e25-47b7-83e1-bebcebeac611" CanMapToDefaultCsvlk="false" DefaultKmsProtocol="4.0" NCountPolicy="5">
<SkuItem DisplayName="Office Access 2010" Id="8ce7e872-188c-4b98-9d90-f8f90b7aad02" Gvlk="V7Y44-9T38C-R2VJK-666HK-T7DDX" />
<SkuItem DisplayName="Office Excel 2010" Id="cee5d470-6e3b-4fcc-8c2b-d17428568a9f" Gvlk="H62QG-HXVKF-PP4HP-66KMR-CW9BM" />
<SkuItem DisplayName="Office Groove (SharePoint Workspace) 2010" Id="8947d0b8-c33b-43e1-8c56-9b674c052832" Gvlk="QYYW6-QP4CB-MBV6G-HYMCJ-4T3J4" />
<SkuItem DisplayName="Office InfoPath 2010" Id="ca6b6639-4ad6-40ae-a575-14dee07f6430" Gvlk="K96W8-67RPQ-62T9Y-J8FQJ-BT37T" />
<SkuItem DisplayName="Office Mondo 1 2010" Id="09ed9640-f020-400a-acd8-d7d867dfd9c2" Gvlk="YBJTT-JG6MD-V9Q7P-DBKXJ-38W9R" />
<SkuItem DisplayName="Office Mondo 2 2010" Id="ef3d4e49-a53d-4d81-a2b1-2ca6c2556b2c" Gvlk="7TC2V-WXF6P-TD7RT-BQRXR-B8K32" />
<SkuItem DisplayName="Office OneNote 2010" Id="ab586f5c-5256-4632-962f-fefd8b49e6f4" Gvlk="Q4Y4M-RHWJM-PY37F-MTKWH-D3XHX" />
<SkuItem DisplayName="Office OutLook 2010" Id="ecb7c192-73ab-4ded-acf4-2399b095d0cc" Gvlk="7YDC2-CWM8M-RRTJC-8MDVC-X3DWQ" />
<SkuItem DisplayName="Office PowerPoint 2010" Id="45593b1d-dfb1-4e91-bbfb-2d5d0ce2227a" Gvlk="RC8FX-88JRY-3PF7C-X8P67-P4VTT" />
<SkuItem DisplayName="Office Professional Plus 2010" Id="6f327760-8c5c-417c-9b61-836a98287e0c" Gvlk="VYBBJ-TRJPB-QFQRF-QFT4D-H3GVB" />
<SkuItem DisplayName="Office Project Professional 2010" Id="df133ff7-bf14-4f95-afe3-7b48e7e331ef" Gvlk="YGX6F-PGV49-PGW3J-9BTGG-VHKC6" />
<SkuItem DisplayName="Office Project Standard 2010" Id="5dc7bf61-5ec9-4996-9ccb-df806a2d0efe" Gvlk="4HP3K-88W3F-W2K3D-6677X-F9PGB" />
<SkuItem DisplayName="Office Publisher 2010" Id="b50c4f75-599b-43e8-8dcd-1081a7967241" Gvlk="BFK7F-9MYHM-V68C7-DRQ66-83YTP" />
<SkuItem DisplayName="Office Small Business Basics 2010" Id="ea509e87-07a1-4a45-9edc-eba5a39f36af" Gvlk="D6QFG-VBYP2-XQHM7-J97RH-VVRCK" />
<SkuItem DisplayName="Office Standard 2010" Id="9da2a678-fb6b-4e67-ab84-60dd6a9c819a" Gvlk="V7QKV-4XVVR-XYV4D-F7DFM-8R6BM" />
<SkuItem DisplayName="Office Visio Premium 2010" Id="92236105-bb67-494f-94c7-7f7a607929bd" Gvlk="D9DWC-HPYVV-JGF4P-BTWQB-WX8BJ" />
<SkuItem DisplayName="Office Visio Professional 2010" Id="e558389c-83c3-4b29-adfe-5e4d7f46c358" Gvlk="7MCW8-VRQVK-G677T-PDJCM-Q8TCP" />
<SkuItem DisplayName="Office Visio Standard 2010" Id="9ed833ff-4f92-4f36-b370-8683a4f13275" Gvlk="767HD-QGMWX-8QTDB-9G3R2-KHFGJ" />
<SkuItem DisplayName="Office Word 2010" Id="2d0882e7-a4e7-423b-8ccc-70d91e0158b1" Gvlk="HVHB3-C6FV7-KQX9W-YQG79-CRY7T" />
</KmsItem>
</AppItem>
<AppItem DisplayName="Office 15 (2013) / 16 (2016) / 17 (2019)" VlmcsdIndex="5" MinActiveClients="10" Id="0ff1ce15-a989-479d-af46-f275c6370663">
<KmsItem DisplayName="Office 2013" Id="e6a6f1bf-9d40-40c3-aa9f-c77ba21578c0" CanMapToDefaultCsvlk="false" DefaultKmsProtocol="5.0" NCountPolicy="5">
<SkuItem DisplayName="Office Access 2013" Id="6ee7622c-18d8-4005-9fb7-92db644a279b" Gvlk="NG2JY-H4JBT-HQXYP-78QH9-4JM2D" />
<SkuItem DisplayName="Office Excel 2013" Id="f7461d52-7c2b-43b2-8744-ea958e0bd09a" Gvlk="VGPNG-Y7HQW-9RHP7-TKPV3-BG7GB" />
<SkuItem DisplayName="Office InfoPath 2013" Id="a30b8040-d68a-423f-b0b5-9ce292ea5a8f" Gvlk="DKT8B-N7VXH-D963P-Q4PHY-F8894" />
<SkuItem DisplayName="Office Lync 2013" Id="1b9f11e3-c85c-4e1b-bb29-879ad2c909e3" Gvlk="2MG3G-3BNTT-3MFW9-KDQW3-TCK7R" />
<SkuItem DisplayName="Office Mondo 2013" Id="dc981c6b-fc8e-420f-aa43-f8f33e5c0923" Gvlk="42QTK-RN8M7-J3C4G-BBGYM-88CYV" />
<SkuItem DisplayName="Office OneNote 2013" Id="efe1f3e6-aea2-4144-a208-32aa872b6545" Gvlk="TGN6P-8MMBC-37P2F-XHXXK-P34VW" />
<SkuItem DisplayName="Office OutLook 2013" Id="771c3afa-50c5-443f-b151-ff2546d863a0" Gvlk="QPN8Q-BJBTJ-334K3-93TGY-2PMBT" />
<SkuItem DisplayName="Office PowerPoint 2013" Id="8c762649-97d1-4953-ad27-b7e2c25b972e" Gvlk="4NT99-8RJFH-Q2VDH-KYG2C-4RD4F" />
<SkuItem DisplayName="Office Professional Plus 2013" Id="b322da9c-a2e2-4058-9e4e-f59a6970bd69" Gvlk="YC7DK-G2NP3-2QQC3-J6H88-GVGXT" />
<SkuItem DisplayName="Office Project Professional 2013" Id="4a5d124a-e620-44ba-b6ff-658961b33b9a" Gvlk="FN8TT-7WMH6-2D4X9-M337T-2342K" />
<SkuItem DisplayName="Office Project Standard 2013" Id="427a28d1-d17c-4abf-b717-32c780ba6f07" Gvlk="6NTH3-CW976-3G3Y2-JK3TX-8QHTT" />
<SkuItem DisplayName="Office Publisher 2013" Id="00c79ff1-6850-443d-bf61-71cde0de305f" Gvlk="PN2WF-29XG2-T9HJ7-JQPJR-FCXK4" />
<SkuItem DisplayName="Office Standard 2013" Id="b13afb38-cd79-4ae5-9f7f-eed058d750ca" Gvlk="KBKQT-2NMXY-JJWGP-M62JB-92CD4" />
<SkuItem DisplayName="Office Visio Professional 2013" Id="e13ac10e-75d0-4aff-a0cd-764982cf541c" Gvlk="C2FG9-N6J68-H8BTJ-BW3QX-RM3B3" />
<SkuItem DisplayName="Office Visio Standard 2013" Id="ac4efaf0-f81f-4f61-bdf7-ea32b02ab117" Gvlk="J484Y-4NKBF-W2HMG-DBMJC-PGWR7" />
<SkuItem DisplayName="Office Word 2013" Id="d9f5b1c6-5386-495a-88f9-9ad6b41ac9b3" Gvlk="6Q7VD-NX8JD-WJ2VH-88V73-4GBJ7" />
</KmsItem>
<KmsItem DisplayName="Office 2013 [Pre-Release]" Id="aa4c7968-b9da-4680-92b6-acb25e2f866c" IsPreview="true" CanMapToDefaultCsvlk="false" DefaultKmsProtocol="5.0" NCountPolicy="5">
<SkuItem DisplayName="Office Access 2013 [Pre-Release]" Id="44b538e2-fb34-4732-81e4-644c17d2e746" Gvlk="DJBH8-RGN7Q-836KD-DMP3M-DM9MF" />
<SkuItem DisplayName="Office Excel 2013 [Pre-Release]" Id="9373bfa0-97b3-4587-ab73-30934461d55c" Gvlk="Q3BNP-3WXDT-GG8HF-24KMW-HMDBK" />
<SkuItem DisplayName="Office Groove (SharePoint Workspace) 2013 [Pre-Release]" Id="aa286eb4-556f-4eeb-967c-c1b771b7673e" Gvlk="WVCGG-NK4FG-7XKXM-BD4WF-3C624" />
<SkuItem DisplayName="Office InfoPath 2013 [Pre-Release]" Id="7ccc8256-fbaa-49c6-b2a9-f5afb4257cd2" Gvlk="7KPJJ-N8TT7-CK3KR-QTV98-YPVXQ" />
<SkuItem DisplayName="Office Lync 2013 [Pre-Release]" Id="c53dfe17-cc00-4967-b188-a088a965494d" Gvlk="XNVD3-RYC7T-7R6BT-WX6CF-8BYH7" />
<SkuItem DisplayName="Office Mondo 2013 [Pre-Release]" Id="2816a87d-e1ed-4097-b311-e2341c57b179" Gvlk="GCGCN-6FJRM-TR9Q3-BGMWJ-78KQV" />
<SkuItem DisplayName="Office OneNote 2013 [Pre-Release]" Id="67c0f908-184f-4f64-8250-12db797ab3c3" Gvlk="VYNYX-8GPBC-7FQMD-D6B7B-7MDFD" />
<SkuItem DisplayName="Office Outlook 2013 [Pre-Release]" Id="7bce4e7a-dd80-4682-98fa-f993725803d2" Gvlk="X2KNB-FRRG2-WXDPH-739DM-DM9RH" />
<SkuItem DisplayName="Office PowerPoint 2013 [Pre-Release]" Id="1ec10c0a-54f6-453e-b85a-6fa1bbfea9b7" Gvlk="B8CT8-BTNFQ-XQXBK-BFWV8-HMDFQ" />
<SkuItem DisplayName="Office Professional Plus 2013 [Pre-Release]" Id="87d2b5bf-d47b-41fb-af62-71c382f5cc85" Gvlk="PGD67-JN23K-JGVWV-KTHP4-GXR9G" />
<SkuItem DisplayName="Office Project Professional 2013 [Pre-Release]" Id="3cfe50a9-0e03-4b29-9754-9f193f07b71f" Gvlk="NFKVM-DVG7F-TYWYR-3RPHY-F872K" />
<SkuItem DisplayName="Office Project Standard 2013 [Pre-Release]" Id="39e49e57-ae68-4ee3-b098-26480df3da96" Gvlk="N89QF-GGB8J-BKD28-C4V28-W4XTK" />
<SkuItem DisplayName="Office Publisher 2013 [Pre-Release]" Id="15aa2117-8f79-49a8-8317-753026d6a054" Gvlk="NB67P-J8XP4-XDK9B-V73VH-M4CKR" />
<SkuItem DisplayName="Office Visio Professional 2013 [Pre-Release]" Id="cfbfd60e-0b5f-427d-917c-a4df42a80e44" Gvlk="B3C7Q-D6NH2-2VRFW-HHWDG-FVQB6" />
<SkuItem DisplayName="Office Visio Standard 2013 [Pre-Release]" Id="7012cc81-8887-42e9-b17d-4e5e42760f0d" Gvlk="9MKNF-J9XQ6-JV4XB-FJQPY-43F43" />
<SkuItem DisplayName="Office Word 2013 [Pre-Release]" Id="de9c7eb6-5a85-420d-9703-fff11bdd4d43" Gvlk="JBGD4-3JNG7-JWWGV-CR6TP-DC62Q" />
</KmsItem>
<KmsItem DisplayName="Office 2016" Id="85b5f61b-320b-4be3-814a-b76b2bfafc82" CanMapToDefaultCsvlk="false" DefaultKmsProtocol="6.0" NCountPolicy="5">
<SkuItem DisplayName="Office Access 2016" Id="67c0fc0c-deba-401b-bf8b-9c8ad8395804" Gvlk="GNH9Y-D2J4T-FJHGG-QRVH7-QPFDW" />
<SkuItem DisplayName="Office Excel 2016" Id="c3e65d36-141f-4d2f-a303-a842ee756a29" Gvlk="9C2PK-NWTVB-JMPW8-BFT28-7FTBF" />
<SkuItem DisplayName="Office Mondo 2016" Id="9caabccb-61b1-4b4b-8bec-d10a3c3ac2ce" Gvlk="HFTND-W9MK4-8B7MJ-B6C4G-XQBR2" />
<SkuItem DisplayName="Office Mondo Retail 2016" Id="e914ea6e-a5fa-4439-a394-a9bb3293ca09" Gvlk="DMTCJ-KNRKX-26982-JYCKT-P7KB6" />
<SkuItem DisplayName="Office OneNote 2016" Id="d8cace59-33d2-4ac7-9b1b-9b72339c51c8" Gvlk="DR92N-9HTF2-97XKM-XW2WJ-XW3J6" />
<SkuItem DisplayName="Office Outlook 2016" Id="ec9d9265-9d1e-4ed0-838a-cdc20f2551a1" Gvlk="R69KK-NTPKF-7M3Q4-QYBHW-6MT9B" />
<SkuItem DisplayName="Office Powerpoint 2016" Id="d70b1bba-b893-4544-96e2-b7a318091c33" Gvlk="J7MQP-HNJ4Y-WJ7YM-PFYGF-BY6C6" />
<SkuItem DisplayName="Office Professional Plus 2016" Id="d450596f-894d-49e0-966a-fd39ed4c4c64" Gvlk="XQNVK-8JYDB-WJ9W3-YJ8YR-WFG99" />
<SkuItem DisplayName="Office Project Professional 2016" Id="4f414197-0fc2-4c01-b68a-86cbb9ac254c" Gvlk="YG9NW-3K39V-2T3HJ-93F3Q-G83KT" />
<SkuItem DisplayName="Office Project Professional 2016 C2R [Preview]" Id="829b8110-0e6f-4349-bca4-42803577788d" Gvlk="WGT24-HCNMF-FQ7XH-6M8K7-DRTW9" />
<SkuItem DisplayName="Office Project Standard 2016" Id="da7ddabc-3fbe-4447-9e01-6ab7440b4cd4" Gvlk="GNFHQ-F6YQM-KQDGJ-327XX-KQBVC" />
<SkuItem DisplayName="Office Project Standard 2016 C2R [Preview]" Id="cbbaca45-556a-4416-ad03-bda598eaa7c8" Gvlk="D8NRQ-JTYM3-7J2DX-646CT-6836M" />
<SkuItem DisplayName="Office Publisher 2016" Id="041a06cb-c5b8-4772-809f-416d03d16654" Gvlk="F47MM-N3XJP-TQXJ9-BP99D-8K837" />
<SkuItem DisplayName="Office Skype for Business 2016" Id="83e04ee1-fa8d-436d-8994-d31a862cab77" Gvlk="869NQ-FJ69K-466HW-QYCP2-DDBV6" />
<SkuItem DisplayName="Office Standard 2016" Id="dedfa23d-6ed1-45a6-85dc-63cae0546de6" Gvlk="JNRGM-WHDWX-FJJG3-K47QV-DRTFM" />
<SkuItem DisplayName="Office Visio Professional 2016" Id="6bf301c1-b94a-43e9-ba31-d494598c47fb" Gvlk="PD3PC-RHNGV-FXJ29-8JK7D-RJRJK" />
<SkuItem DisplayName="Office Visio Professional 2016 C2R [Preview]" Id="b234abe3-0857-4f9c-b05a-4dc314f85557" Gvlk="69WXN-MBYV6-22PQG-3WGHK-RM6XC" />
<SkuItem DisplayName="Office Visio Standard 2016" Id="aa2a7821-1827-4c2c-8f1d-4513a34dda97" Gvlk="7WHWN-4T7MP-G96JF-G33KR-W8GF4" />
<SkuItem DisplayName="Office Visio Standard 2016 C2R [Preview]" Id="361fe620-64f4-41b5-ba77-84f8e079b1f7" Gvlk="NY48V-PPYYH-3F4PX-XJRKJ-W4423" />
<SkuItem DisplayName="Office Word 2016" Id="bb11badf-d8aa-470e-9311-20eaf80fe5cc" Gvlk="WXY84-JN2Q9-RBCCQ-3Q3J3-3PFJ6" />
<SkuItem DisplayName="Office Professional Plus 2019 C2R [Preview]" Id="0bc88885-718c-491d-921f-6f214349e79c" Gvlk="VQ9DP-NVHPH-T9HJC-J9PDT-KTQRG" />
<SkuItem DisplayName="Office Project Professional 2019 C2R [Preview]" Id="fc7c4d0c-2e85-4bb9-afd4-01ed1476b5e9" Gvlk="XM2V9-DN9HH-QB449-XDGKC-W2RMW" />
<SkuItem DisplayName="Office Visio Professional 2019 C2R [Preview]" Id="500f6619-ef93-4b75-bcb4-82819998a3ca" Gvlk="N2CG9-YD3YK-936X4-3WR82-Q3X4H" />
</KmsItem>
<KmsItem DisplayName="Office 2019" Id="617d9eb1-ef36-4f82-86e0-a65ae07b96c6" CanMapToDefaultCsvlk="false" DefaultKmsProtocol="6.0" NCountPolicy="5">
<SkuItem DisplayName="Office Access 2019" Id="9e9bceeb-e736-4f26-88de-763f87dcc485" Gvlk="9N9PT-27V4Y-VJ2PD-YXFMF-YTFQT" />
<SkuItem DisplayName="Office Excel 2019" Id="237854e9-79fc-4497-a0c1-a70969691c6b" Gvlk="TMJWT-YYNMB-3BKTF-644FC-RVXBD" />
<SkuItem DisplayName="Office Outlook 2019" Id="c8f8a301-19f5-4132-96ce-2de9d4adbd33" Gvlk="7HD7K-N4PVK-BHBCQ-YWQRW-XW4VK" />
<SkuItem DisplayName="Office Powerpoint 2019" Id="3131fd61-5e4f-4308-8d6d-62be1987c92c" Gvlk="RRNCX-C64HY-W2MM7-MCH9G-TJHMQ" />
<SkuItem DisplayName="Office Professional Plus 2019" Id="85dd8b5f-eaa4-4af3-a628-cce9e77c9a03" Gvlk="NMMKJ-6RK4F-KMJVX-8D9MJ-6MWKP" />
<SkuItem DisplayName="Office Project Professional 2019" Id="2ca2bf3f-949e-446a-82c7-e25a15ec78c4" Gvlk="B4NPR-3FKK7-T2MBV-FRQ4W-PKD2B" />
<SkuItem DisplayName="Office Project Standard 2019" Id="1777f0e3-7392-4198-97ea-8ae4de6f6381" Gvlk="C4F7P-NCP8C-6CQPT-MQHV9-JXD2M" />
<SkuItem DisplayName="Office Publisher 2019" Id="9d3e4cca-e172-46f1-a2f4-1d2107051444" Gvlk="G2KWX-3NW6P-PY93R-JXK2T-C9Y9V" />
<SkuItem DisplayName="Office Skype for Business 2019" Id="734c6c6e-b0ba-4298-a891-671772b2bd1b" Gvlk="NCJ33-JHBBY-HTK98-MYCV8-HMKHJ" />
<SkuItem DisplayName="Office Standard 2019" Id="6912a74b-a5fb-401a-bfdb-2e3ab46f4b02" Gvlk="6NWWJ-YQWMR-QKGCB-6TMB3-9D9HK" />
<SkuItem DisplayName="Office Visio Professional 2019" Id="5b5cf08f-b81a-431d-b080-3450d8620565" Gvlk="9BGNQ-K37YR-RQHF2-38RQ3-7VCBB" />
<SkuItem DisplayName="Office Visio Standard 2019" Id="e06d7df3-aad0-419d-8dfb-0ac37e2bdf39" Gvlk="7TQNQ-K3YQQ-3PFH7-CCPPM-X4VQ2" />
<SkuItem DisplayName="Office Word 2019" Id="059834fe-a8ea-4bff-b67b-4d006b5447d3" Gvlk="PBX3G-NWMT6-Q7XBW-PYJGG-WXD33" />
</KmsItem>
</AppItem>
</AppItems>
</KmsData>

View File

@ -3,7 +3,8 @@
# aes.py: implements AES - Advanced Encryption Standard # aes.py: implements AES - Advanced Encryption Standard
# from the SlowAES project, http://code.google.com/p/slowaes/ # from the SlowAES project, http://code.google.com/p/slowaes/
# #
# Copyright (c) 2008 Josh Davis ( http://www.josh-davis.org ), Alex Martelli ( http://www.aleax.it ) # Copyright (c) 2008 Josh Davis ( http://www.josh-davis.org )
# Alex Martelli ( http://www.aleax.it )
# #
# Ported from C code written by Laurent Haan ( http://www.progressive-coding.com ) # Ported from C code written by Laurent Haan ( http://www.progressive-coding.com )
@ -12,8 +13,8 @@
# #
""" """
Modified for py-kms;
Ported to Python3 with minimal changements. Ported to Python3 with minimal changements.
© Copyright 2018 Matteo an <SystemRage@protonmail.com>
""" """
import os import os
@ -160,7 +161,7 @@ class AES( object ):
def expandKey(self, key, size, expandedKeySize): def expandKey(self, key, size, expandedKeySize):
""" Method performing Rijndael's key expansion. """ Method performing Rijndael's key expansion.
Expands an 128, 192, 256 key into an 176, 208, 240 bit key. Expands an 128, 192, 256 key into an 176, 208, 240 bytes key.
""" """
# Current expanded keySize, in bytes. # Current expanded keySize, in bytes.
currentSize = 0 currentSize = 0
@ -238,14 +239,12 @@ class AES( object ):
state[i] = getter(state[i]) state[i] = getter(state[i])
return state return state
def shiftRows(self, state, isInv): def shiftRows(self, state, isInv):
""" Method to iterate over the 4 rows and call shiftRow(...) with that row. """ """ Method to iterate over the 4 rows and call shiftRow(...) with that row. """
for i in range(4): for i in range(4):
state = self.shiftRow(state, i * 4, i, isInv) state = self.shiftRow(state, i * 4, i, isInv)
return state return state
def shiftRow(self, state, statePointer, nbr, isInv): def shiftRow(self, state, statePointer, nbr, isInv):
""" Method to shift the row to the left. """ """ Method to shift the row to the left. """
for i in range(nbr): for i in range(nbr):

View File

@ -1,16 +1,17 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import re
import argparse import argparse
import binascii import binascii
import datetime import datetime
import random import random
import socket import socket
import string import string
import struct
import sys import sys
import uuid import uuid
import logging import logging
import os import os
import errno
import filetimes, rpcBind, rpcRequest import filetimes, rpcBind, rpcRequest
from dcerpc import MSRPCHeader, MSRPCBindNak, MSRPCRequestHeader, MSRPCRespHeader from dcerpc import MSRPCHeader, MSRPCBindNak, MSRPCRequestHeader, MSRPCRespHeader
@ -19,6 +20,7 @@ from kmsRequestV4 import kmsRequestV4
from kmsRequestV5 import kmsRequestV5 from kmsRequestV5 import kmsRequestV5
from kmsRequestV6 import kmsRequestV6 from kmsRequestV6 import kmsRequestV6
from rpcBase import rpcBase from rpcBase import rpcBase
from kmsDB2Dict import kmsDB2Dict
from formatText import shell_message, justify, byterize from formatText import shell_message, justify, byterize
config = {} config = {}
@ -29,7 +31,8 @@ def main():
parser.add_argument("port", nargs="?", action="store", default=1688, parser.add_argument("port", nargs="?", action="store", default=1688,
help='The port the KMS service is listening on. The default is \"1688\".', type=int) help='The port the KMS service is listening on. The default is \"1688\".', type=int)
parser.add_argument("-m", "--mode", dest="mode", parser.add_argument("-m", "--mode", dest="mode",
choices=["WindowsVista","Windows7","Windows8","Windows81","Windows10","Office2010","Office2013","Office2016"], default="Windows7", choices=["WindowsVista","Windows7","Windows8","Windows8.1","Windows10",
"Office2010","Office2013","Office2016","Office2019"], default="Windows8.1",
help='Use this flag to manually specify a Microsoft product for testing the server. The default is \"Windows81\".', type=str) help='Use this flag to manually specify a Microsoft product for testing the server. The default is \"Windows81\".', type=str)
parser.add_argument("-c", "--cmid", dest="cmid", default=None, parser.add_argument("-c", "--cmid", dest="cmid", default=None,
help='Use this flag to manually specify a CMID to use. If no CMID is specified, a random CMID will be generated.', type=str) help='Use this flag to manually specify a CMID to use. If no CMID is specified, a random CMID will be generated.', type=str)
@ -54,15 +57,15 @@ a random machineName will be generated.', type=str)
s.connect((config['ip'], config['port'])) s.connect((config['ip'], config['port']))
logging.info("Connection successful !") logging.info("Connection successful !")
binder = rpcBind.handler(None, config) binder = rpcBind.handler(None, config)
RPC_Bind = str(binder.generateRequest()).encode('latin-1') #*2to3* RPC_Bind = str(binder.generateRequest()).encode('latin-1')
logging.info("Sending RPC bind request...") logging.info("Sending RPC bind request...")
shell_message(nshell = [-1, 1]) shell_message(nshell = [-1, 1])
s.send(RPC_Bind) s.send(RPC_Bind)
try: try:
shell_message(nshell = [-4, 7]) shell_message(nshell = [-4, 7])
bindResponse = s.recv(1024) bindResponse = s.recv(1024)
except socket.error as e: #*2to3* except socket.error as e:
if e[0] == 104: if e.errno == errno.ECONNRESET:
logging.error("Connection reset by peer. Exiting...") logging.error("Connection reset by peer. Exiting...")
sys.exit() sys.exit()
else: else:
@ -76,10 +79,10 @@ a random machineName will be generated.', type=str)
shell_message(nshell = 8) shell_message(nshell = 8)
kmsRequest = createKmsRequest() kmsRequest = createKmsRequest()
requester = rpcRequest.handler(kmsRequest, config) requester = rpcRequest.handler(kmsRequest, config)
s.send(str(requester.generateRequest()).encode('latin-1')) #*2to3* s.send(str(requester.generateRequest()).encode('latin-1'))
shell_message(nshell = [-1, 12]) shell_message(nshell = [-1, 12])
response = s.recv(1024) response = s.recv(1024)
logging.debug("Response: \n%s\n" % justify(binascii.b2a_hex(response).decode('latin-1'))) #*2to3* logging.debug("Response: \n%s\n" % justify(binascii.b2a_hex(response).decode('latin-1')))
shell_message(nshell = [-4, 20]) shell_message(nshell = [-4, 20])
parsed = MSRPCRespHeader(response) parsed = MSRPCRespHeader(response)
kmsData = readKmsResponse(parsed['pduData'], kmsRequest, config) kmsData = readKmsResponse(parsed['pduData'], kmsRequest, config)
@ -87,12 +90,10 @@ a random machineName will be generated.', type=str)
try: try:
hwid = kmsData['hwid'] hwid = kmsData['hwid']
except: logging.info("KMS Host HWID: %s" % binascii.b2a_hex(hwid.encode('latin-1')).upper().decode('utf-8'))
hwid = None except KeyError:
logging.info("KMS Host ePID: %s" % kmsResp['kmsEpid'].encode('utf-8').decode('utf-16le')) #*2to3* pass
if hwid is not None: logging.info("KMS Host ePID: %s" % kmsResp['kmsEpid'].encode('utf-8').decode('utf-16le'))
logging.info("KMS Host HWID: %s" % binascii.b2a_hex(hwid.encode('latin-1')).upper().decode('utf-8')) #*2to3*
logging.info("KMS Host Current Client Count: %s" % kmsResp['currentClientCount']) logging.info("KMS Host Current Client Count: %s" % kmsResp['currentClientCount'])
logging.info("KMS VL Activation Interval: %s" % kmsResp['vLActivationInterval']) logging.info("KMS VL Activation Interval: %s" % kmsResp['vLActivationInterval'])
logging.info("KMS VL Renewal Interval: %s" % kmsResp['vLRenewalInterval']) logging.info("KMS VL Renewal Interval: %s" % kmsResp['vLRenewalInterval'])
@ -110,79 +111,44 @@ def checkConfig():
if config['cmid'] is not None: if config['cmid'] is not None:
try: try:
uuid.UUID(config['cmid']) uuid.UUID(config['cmid'])
except: except ValueError:
logging.error("Bad CMID. Exiting...") logging.error("Bad CMID. Exiting...")
sys.exit() sys.exit()
if config['machineName'] is not None: if config['machineName'] is not None:
if len(config['machineName']) < 2 or len(config['machineName']) > 63: if len(config['machineName']) < 2 or len(config['machineName']) > 63:
logging.error("machineName must be between 2 and 63 characters in length.") logging.error("Error: machineName must be between 2 and 63 characters in length.")
sys.exit() sys.exit()
def updateConfig(): def updateConfig():
if config['mode'] == 'WindowsVista': kmsdb = kmsDB2Dict()
config['RequiredClientCount'] = 25
config['KMSProtocolMajorVersion'] = 4 appitems = kmsdb[2]
for appitem in appitems:
kmsitems = appitem['KmsItems']
for kmsitem in kmsitems:
# Threshold.
try:
count = int(kmsitem['NCountPolicy'])
except KeyError:
count = 25
name = re.sub('\(.*\)', '', kmsitem['DisplayName']).replace('2015', '').replace(' ', '')
if name == config['mode']:
skuitems = kmsitem['SkuItems']
# Select 'Enterprise' for Windows or 'Professional Plus' for Office.
# (improvement: choice could be also random: skuitem = random.choice(skuitems))
for skuitem in skuitems:
if skuitem['DisplayName'].replace(' ','') == name + 'Enterprise' or \
skuitem['DisplayName'].replace(' ','') == name[:6] + 'ProfessionalPlus' + name[6:]:
config['KMSClientSkuID'] = skuitem['Id']
config['RequiredClientCount'] = count
config['KMSProtocolMajorVersion'] = int(float(kmsitem['DefaultKmsProtocol']))
config['KMSProtocolMinorVersion'] = 0 config['KMSProtocolMinorVersion'] = 0
config['KMSClientLicenseStatus'] = 2 config['KMSClientLicenseStatus'] = 2
config['KMSClientAppID'] = "55c92734-d682-4d71-983e-d6ec3f16059f" config['KMSClientAppID'] = appitem['Id']
config['KMSClientSkuID'] = "cfd8ff08-c0d7-452b-9f60-ef5c70c32094" config['KMSClientKMSCountedID'] = kmsitem['Id']
config['KMSClientKMSCountedID'] = "212a64dc-43b1-4d3d-a30c-2fc69d2095c6" break
elif config['mode'] == 'Windows7':
config['RequiredClientCount'] = 25
config['KMSProtocolMajorVersion'] = 4
config['KMSProtocolMinorVersion'] = 0
config['KMSClientLicenseStatus'] = 2
config['KMSClientAppID'] = "55c92734-d682-4d71-983e-d6ec3f16059f"
config['KMSClientSkuID'] = "ae2ee509-1b34-41c0-acb7-6d4650168915"
config['KMSClientKMSCountedID'] = "7fde5219-fbfa-484a-82c9-34d1ad53e856"
elif config['mode'] == 'Windows8':
config['RequiredClientCount'] = 25
config['KMSProtocolMajorVersion'] = 5
config['KMSProtocolMinorVersion'] = 0
config['KMSClientLicenseStatus'] = 2
config['KMSClientAppID'] = "55c92734-d682-4d71-983e-d6ec3f16059f"
config['KMSClientSkuID'] = "458e1bec-837a-45f6-b9d5-925ed5d299de"
config['KMSClientKMSCountedID'] = "3c40b358-5948-45af-923b-53d21fcc7e79"
elif config['mode'] == 'Windows81':
config['RequiredClientCount'] = 25
config['KMSProtocolMajorVersion'] = 6
config['KMSProtocolMinorVersion'] = 0
config['KMSClientLicenseStatus'] = 2
config['KMSClientAppID'] = "55c92734-d682-4d71-983e-d6ec3f16059f"
config['KMSClientSkuID'] = "81671aaf-79d1-4eb1-b004-8cbbe173afea"
config['KMSClientKMSCountedID'] = "cb8fc780-2c05-495a-9710-85afffc904d7"
elif config['mode'] == 'Windows10':
config['RequiredClientCount'] = 25
config['KMSProtocolMajorVersion'] = 6
config['KMSProtocolMinorVersion'] = 0
config['KMSClientLicenseStatus'] = 2
config['KMSClientAppID'] = "55c92734-d682-4d71-983e-d6ec3f16059f"
config['KMSClientSkuID'] = "73111121-5638-40f6-bc11-f1d7b0d64300"
config['KMSClientKMSCountedID'] = "58e2134f-8e11-4d17-9cb2-91069c151148"
elif config['mode'] == 'Office2010':
config['RequiredClientCount'] = 5
config['KMSProtocolMajorVersion'] = 4
config['KMSProtocolMinorVersion'] = 0
config['KMSClientLicenseStatus'] = 2
config['KMSClientAppID'] = "59a52881-a989-479d-af46-f275c6370663"
config['KMSClientSkuID'] = "6f327760-8c5c-417c-9b61-836a98287e0c"
config['KMSClientKMSCountedID'] = "e85af946-2e25-47b7-83e1-bebcebeac611"
elif config['mode'] == 'Office2013':
config['RequiredClientCount'] = 5
config['KMSProtocolMajorVersion'] = 5
config['KMSProtocolMinorVersion'] = 0
config['KMSClientLicenseStatus'] = 2
config['KMSClientAppID'] = "0ff1ce15-a989-479d-af46-f275c6370663"
config['KMSClientSkuID'] = "b322da9c-a2e2-4058-9e4e-f59a6970bd69"
config['KMSClientKMSCountedID'] = "e6a6f1bf-9d40-40c3-aa9f-c77ba21578c0"
elif config['mode'] == 'Office2016':
config['RequiredClientCount'] = 5
config['KMSProtocolMajorVersion'] = 6
config['KMSProtocolMinorVersion'] = 0
config['KMSClientLicenseStatus'] = 2
config['KMSClientAppID'] = "0ff1ce15-a989-479d-af46-f275c6370663"
config['KMSClientSkuID'] = "d450596f-894d-49e0-966a-fd39ed4c4c64"
config['KMSClientKMSCountedID'] = "85b5f61b-320b-4be3-814a-b76b2bfafc82"
def createKmsRequestBase(): def createKmsRequestBase():
requestDict = kmsBase.kmsRequestStruct() requestDict = kmsBase.kmsRequestStruct()
@ -243,9 +209,9 @@ def readKmsResponse(data, request, config):
def readKmsResponseV4(data, request): def readKmsResponseV4(data, request):
response = kmsRequestV4.ResponseV4(data) response = kmsRequestV4.ResponseV4(data)
hashed = kmsRequestV4(data, config).generateHash(bytearray(str(response['response']).encode('latin-1'))) #*2to3* hashed = kmsRequestV4(data, config).generateHash(bytearray(str(response['response']).encode('latin-1')))
if hashed.decode('latin-1') == response['hash']: if hashed.decode('latin-1') == response['hash']:
logging.info("Response Hash has expected value !!") logging.info("Response Hash has expected value !")
return response return response
def readKmsResponseV5(data): def readKmsResponseV5(data):

View File

@ -1,6 +1,6 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# Copyright (c) 2003-2014 CORE Security Technologies # Copyright (c) 2003-2016 CORE Security Technologies
# #
# This software is provided under under a slightly modified version # This software is provided under under a slightly modified version
# of the Apache Software License. See the accompanying LICENSE file # of the Apache Software License. See the accompanying LICENSE file
@ -20,11 +20,10 @@
# #
""" """
Stripped down version of `https://github.com/CoreSecurity/impacket/blob/master/impacket/dcerpc/v5/rpcrt.py`, Stripped down version of: https://github.com/SecureAuthCorp/impacket/blob/python36/impacket/dcerpc/v5/rpcrt.py
modified for Python3.
""" """
from structure import Structure, pack, unpack from structure import Structure
# MS/RPC Constants # MS/RPC Constants
MSRPC_REQUEST = 0x00 MSRPC_REQUEST = 0x00
@ -49,8 +48,8 @@ MSRPC_CO_CANCEL = 0x12
MSRPC_ORPHANED = 0x13 MSRPC_ORPHANED = 0x13
# MS/RPC Packet Flags # MS/RPC Packet Flags
MSRPC_FIRSTFRAG = 0x01 PFC_FIRST_FRAG = 0x01
MSRPC_LASTFRAG = 0x02 PFC_LAST_FRAG = 0x02
# For PDU types bind, bind_ack, alter_context, and # For PDU types bind, bind_ack, alter_context, and
# alter_context_resp, this flag MUST be interpreted as PFC_SUPPORT_HEADER_SIGN # alter_context_resp, this flag MUST be interpreted as PFC_SUPPORT_HEADER_SIGN
@ -60,12 +59,11 @@ MSRPC_SUPPORT_SIGN = 0x04
#remaining PDU types, this flag MUST be interpreted as PFC_PENDING_CANCEL. #remaining PDU types, this flag MUST be interpreted as PFC_PENDING_CANCEL.
MSRPC_PENDING_CANCEL= 0x04 MSRPC_PENDING_CANCEL= 0x04
MSRPC_NOTAFRAG = 0x04 PFC_RESERVED_1 = 0x08
MSRPC_RECRESPOND = 0x08 PFC_CONC_MPX = 0x10
MSRPC_NOMULTIPLEX = 0x10 PFC_DID_NOT_EXECUTE = 0x20
MSRPC_NOTFORIDEMP = 0x20 PFC_MAYBE = 0x40
MSRPC_NOTFORBCAST = 0x40 PFC_OBJECT_UUID = 0x80
MSRPC_NOUUID = 0x80
# Auth Types - Security Providers # Auth Types - Security Providers
RPC_C_AUTHN_NONE = 0x00 RPC_C_AUTHN_NONE = 0x00
@ -112,7 +110,6 @@ rpc_cont_def_result = {
#winerror.h #winerror.h
#http://www.opengroup.org/onlinepubs/9629399/apdxn.htm #http://www.opengroup.org/onlinepubs/9629399/apdxn.htm
#*2to3* 0x00000005L -> 0x00000005.....
rpc_status_codes = { rpc_status_codes = {
0x00000005 : 'rpc_s_access_denied', 0x00000005 : 'rpc_s_access_denied',
0x00000008 : 'Authentication type not recognized', 0x00000008 : 'Authentication type not recognized',
@ -537,28 +534,6 @@ rpc_status_codes = {
0x16c9a171 : "rpc_s_no_context_available", 0x16c9a171 : "rpc_s_no_context_available",
} }
class Exception(Exception):
pass
##class DCERPCException(Exception):
## def __init__( self, error_code):
## Exception.__init__(self)
## self.error_code = error_code
##
## def get_error_code( self ):
## return self.error_code
##
## def get_packet( self ):
## return self.packet
##
## def __str__( self ):
## key = self.error_code
## if (rpc_status_codes.has_key(key)):
## error_msg_short = rpc_status_codes[key]
## return 'DCERPC Runtime Error: code: 0x%x - %s ' % (self.error_code, error_msg_short)
## else:
## return 'DCERPC Runtime Error: unknown error code: 0x%x' % (self.error_code)
# Context Item # Context Item
class CtxItem(Structure): class CtxItem(Structure):
structure = ( structure = (
@ -569,7 +544,6 @@ class CtxItem(Structure):
('TransferSyntax','20s=""'), ('TransferSyntax','20s=""'),
) )
class CtxItemResult(Structure): class CtxItemResult(Structure):
structure = ( structure = (
('Result','<H=0'), ('Result','<H=0'),
@ -577,7 +551,6 @@ class CtxItemResult(Structure):
('TransferSyntax','20s=""'), ('TransferSyntax','20s=""'),
) )
class SEC_TRAILER(Structure): class SEC_TRAILER(Structure):
commonHdr = ( commonHdr = (
('auth_type', 'B=10'), ('auth_type', 'B=10'),
@ -587,7 +560,6 @@ class SEC_TRAILER(Structure):
('auth_ctx_id','<L=747920'), ('auth_ctx_id','<L=747920'),
) )
class MSRPCHeader(Structure): class MSRPCHeader(Structure):
_SIZE = 16 _SIZE = 16
commonHdr = ( commonHdr = (
@ -617,20 +589,20 @@ class MSRPCHeader(Structure):
if data is None: if data is None:
self['ver_major'] = 5 self['ver_major'] = 5
self['ver_minor'] = 0 self['ver_minor'] = 0
self['flags'] = MSRPC_FIRSTFRAG | MSRPC_LASTFRAG self['flags'] = PFC_FIRST_FRAG | PFC_LAST_FRAG
self['type'] = MSRPC_REQUEST self['type'] = MSRPC_REQUEST
self.__frag_len_set = 0 self.__frag_len_set = 0
self['auth_len'] = 0 self['auth_len'] = 0
self['pduData'] = '' self['pduData'] = b''
self['auth_data'] = '' self['auth_data'] = b''
self['sec_trailer'] = '' self['sec_trailer'] = b''
self['pad'] = '' self['pad'] = b''
def get_header_size(self): def get_header_size(self):
return self._SIZE + (16 if (self["flags"] & MSRPC_NOUUID) > 0 else 0) return self._SIZE + (16 if (self["flags"] & PFC_OBJECT_UUID) > 0 else 0)
def get_packet(self): def get_packet(self):
if self['auth_data'] != '': if self['auth_data'] != b'':
self['auth_len'] = len(self['auth_data']) self['auth_len'] = len(self['auth_data'])
# The sec_trailer structure MUST be 4-byte aligned with respect to # The sec_trailer structure MUST be 4-byte aligned with respect to
# the beginning of the PDU. Padding octets MUST be used to align the # the beginning of the PDU. Padding octets MUST be used to align the
@ -639,7 +611,6 @@ class MSRPCHeader(Structure):
return self.getData() return self.getData()
class MSRPCRequestHeader(MSRPCHeader): class MSRPCRequestHeader(MSRPCHeader):
_SIZE = 24 _SIZE = 24
commonHdr = MSRPCHeader.commonHdr + ( commonHdr = MSRPCHeader.commonHdr + (
@ -655,8 +626,7 @@ class MSRPCRequestHeader(MSRPCHeader):
if data is None: if data is None:
self['type'] = MSRPC_REQUEST self['type'] = MSRPC_REQUEST
self['ctx_id'] = 0 self['ctx_id'] = 0
self['uuid'] = '' self['uuid'] = b''
class MSRPCRespHeader(MSRPCHeader): class MSRPCRespHeader(MSRPCHeader):
_SIZE = 24 _SIZE = 24
@ -673,7 +643,6 @@ class MSRPCRespHeader(MSRPCHeader):
self['type'] = MSRPC_RESPONSE self['type'] = MSRPC_RESPONSE
self['ctx_id'] = 0 self['ctx_id'] = 0
class MSRPCBind(Structure): class MSRPCBind(Structure):
_CTX_ITEM_LEN = len(CtxItem()) _CTX_ITEM_LEN = len(CtxItem())
structure = ( structure = (
@ -694,7 +663,7 @@ class MSRPCBind(Structure):
self['max_rfrag'] = 4280 self['max_rfrag'] = 4280
self['assoc_group'] = 0 self['assoc_group'] = 0
self['ctx_num'] = 1 self['ctx_num'] = 1
self['ctx_items'] = '' self['ctx_items'] = b''
self.__ctx_items = [] self.__ctx_items = []
def addCtxItem(self, item): def addCtxItem(self, item):
@ -706,7 +675,6 @@ class MSRPCBind(Structure):
self['ctx_items'] += i.getData() self['ctx_items'] += i.getData()
return Structure.getData(self) return Structure.getData(self)
class MSRPCBindAck(MSRPCHeader): class MSRPCBindAck(MSRPCHeader):
_SIZE = 26 # Up to SecondaryAddr _SIZE = 26 # Up to SecondaryAddr
_CTX_ITEM_LEN = len(CtxItemResult()) _CTX_ITEM_LEN = len(CtxItemResult())
@ -732,10 +700,10 @@ class MSRPCBindAck(MSRPCHeader):
self.__ctx_items = [] self.__ctx_items = []
MSRPCHeader.__init__(self,data,alignment) MSRPCHeader.__init__(self,data,alignment)
if data is None: if data is None:
self['Pad'] = '' self['Pad'] = b''
self['ctx_items'] = '' self['ctx_items'] = b''
self['sec_trailer'] = '' self['sec_trailer'] = b''
self['auth_data'] = '' self['auth_data'] = b''
def getCtxItems(self): def getCtxItems(self):
return self.__ctx_items return self.__ctx_items
@ -752,7 +720,6 @@ class MSRPCBindAck(MSRPCHeader):
self.__ctx_items.append(item) self.__ctx_items.append(item)
data = data[len(item):] data = data[len(item):]
class MSRPCBindNak(Structure): class MSRPCBindNak(Structure):
structure = ( structure = (
('RejectedReason','<H=0'), ('RejectedReason','<H=0'),
@ -761,5 +728,4 @@ class MSRPCBindNak(Structure):
def __init__(self, data = None, alignment = 0): def __init__(self, data = None, alignment = 0):
Structure.__init__(self,data,alignment) Structure.__init__(self,data,alignment)
if data is None: if data is None:
self['SupportedVersions'] = '' self['SupportedVersions'] = b''

View File

@ -103,4 +103,3 @@ if __name__ == "__main__":
import doctest import doctest
doctest.testmod() doctest.testmod()

View File

@ -1,7 +1,5 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import sys
def byterize(obj): def byterize(obj):
objdict = obj.__dict__['fields'] objdict = obj.__dict__['fields']
@ -70,8 +68,6 @@ class ShellStyle(object):
return self.style(s, '\033[4m') return self.style(s, '\033[4m')
def shell_message(nshell): def shell_message(nshell):
shelldict = {0: ShellStyle().yellow("Client generating RPC Bind Request..."), shelldict = {0: ShellStyle().yellow("Client generating RPC Bind Request..."),
@ -108,6 +104,3 @@ def shell_message(nshell):
else: else:
print(shelldict[nshell]) print(shelldict[nshell])

View File

@ -2,25 +2,23 @@
import binascii import binascii
import logging import logging
import datetime
import os import os
import struct
import sys import sys
import time import time
import uuid import uuid
from structure import Structure from structure import Structure
import filetimes from kmsDB2Dict import kmsDB2Dict
import kmsPidGenerator import kmsPidGenerator
import filetimes
from formatText import justify, shell_message, byterize from formatText import justify, shell_message, byterize
# sqlite3 is optional # sqlite3 is optional
try: try:
import sqlite3 import sqlite3
except: except ImportError:
pass pass
class UUID(Structure): class UUID(Structure):
commonHdr = () commonHdr = ()
structure = ( structure = (
@ -28,9 +26,13 @@ class UUID(Structure):
) )
def get(self): def get(self):
return uuid.UUID(bytes_le=str(self).encode('latin-1')) #*2to3* return uuid.UUID(bytes_le=str(self).encode('latin-1'))
class kmsBase: class kmsBase:
def __init__(self, data, config):
self.data = data
self.config = config
class kmsRequestStruct(Structure): class kmsRequestStruct(Structure):
commonHdr = () commonHdr = ()
structure = ( structure = (
@ -81,359 +83,6 @@ class kmsBase:
('remainder', '_'), ('remainder', '_'),
) )
appIds = {
uuid.UUID("55C92734-D682-4D71-983E-D6EC3F16059F") : "Windows",
uuid.UUID("59A52881-A989-479D-AF46-F275C6370663") : "Office 14 (2010)",
uuid.UUID("0FF1CE15-A989-479D-AF46-F275C6370663") : "Office 15 (2013) / Office 16 (2016)"
}
skuIds = {
#########################
## Windows Server 2019 ##
#########################
uuid.UUID("34e1ae55-27f8-4950-8877-7a03be5fb181") : "Windows Server 2019 Datacenter",
uuid.UUID("de32eafd-aaee-4662-9444-c1befb41bde2") : "Windows Server 2019 Standard",
uuid.UUID("034d3cbb-5d4b-4245-b3f8-f84571314078") : "Windows Server 2019 Essentials",
uuid.UUID("a99cc1f0-7719-4306-9645-294102fbff95") : "Windows Server 2019 Azure Core",
#########################
## Windows Server 2016 ##
#########################
uuid.UUID("21c56779-b449-4d20-adfc-eece0e1ad74b") : "Windows Server 2016 Datacenter",
uuid.UUID("8c1c5410-9f39-4805-8c9d-63a07706358f") : "Windows Server 2016 Standard",
uuid.UUID("2b5a1b0f-a5ab-4c54-ac2f-a6d94824a283") : "Windows Server 2016 Essentials",
uuid.UUID("7b4433f4-b1e7-4788-895a-c45378d38253") : "Windows Server 2016 Cloud Storage",
uuid.UUID("3dbf341b-5f6c-4fa7-b936-699dce9e263f") : "Windows Server 2016 Azure Core",
################
## Windows 10 ##
################
uuid.UUID("2de67392-b7a7-462a-b1ca-108dd189f588") : "Windows 10 Professional",
uuid.UUID("a80b5abf-76ad-428b-b05d-a47d2dffeebf") : "Windows 10 Professional N",
uuid.UUID("3f1afc82-f8ac-4f6c-8005-1d233e606eee") : "Windows 10 Professional Education",
uuid.UUID("5300b18c-2e33-4dc2-8291-47ffcec746dd") : "Windows 10 Professional Education N",
uuid.UUID("e0c42288-980c-4788-a014-c080d2e1926e") : "Windows 10 Education",
uuid.UUID("3c102355-d027-42c6-ad23-2e7ef8a02585") : "Windows 10 Education N",
uuid.UUID("73111121-5638-40f6-bc11-f1d7b0d64300") : "Windows 10 Enterprise",
uuid.UUID("e272e3e2-732f-4c65-a8f0-484747d0d947") : "Windows 10 Enterprise N",
uuid.UUID("7b51a46c-0c04-4e8f-9af4-8496cca90d5e") : "Windows 10 Enterprise 2015 LTSB",
uuid.UUID("87b838b7-41b6-4590-8318-5797951d8529") : "Windows 10 Enterprise 2015 LTSB N",
uuid.UUID("2d5a5a60-3040-48bf-beb0-fcd770c20ce0") : "Windows 10 Enterprise 2016 LTSB",
uuid.UUID("9f776d83-7156-45b2-8a5c-359b9c9f22a3") : "Windows 10 Enterprise 2016 LTSB N",
uuid.UUID("58e97c99-f377-4ef1-81d5-4ad5522b5fd8") : "Windows 10 Home / Core",
uuid.UUID("7b9e1751-a8da-4f75-9560-5fadfe3d8e38") : "Windows 10 Home / Core N",
uuid.UUID("cd918a57-a41b-4c82-8dce-1a538e221a83") : "Windows 10 Home / Core Single Language",
uuid.UUID("a9107544-f4a0-4053-a96a-1479abdef912") : "Windows 10 Home / Core Country Specific",
############################
## Windows Server 2012 R2 ##
############################
uuid.UUID("b3ca044e-a358-4d68-9883-aaa2941aca99") : "Windows Server 2012 R2 Standard",
uuid.UUID("00091344-1ea4-4f37-b789-01750ba6988c") : "Windows Server 2012 R2 Datacenter",
uuid.UUID("21db6ba4-9a7b-4a14-9e29-64a60c59301d") : "Windows Server 2012 R2 Essentials",
uuid.UUID("b743a2be-68d4-4dd3-af32-92425b7bb623") : "Windows Server 2012 R2 Cloud Storage",
#################
## Windows 8.1 ##
#################
uuid.UUID("c06b6981-d7fd-4a35-b7b4-054742b7af67") : "Windows 8.1 Professional",
uuid.UUID("7476d79f-8e48-49b4-ab63-4d0b813a16e4") : "Windows 8.1 Professional N",
uuid.UUID("096ce63d-4fac-48a9-82a9-61ae9e800e5f") : "Windows 8.1 Professional WMC",
uuid.UUID("81671aaf-79d1-4eb1-b004-8cbbe173afea") : "Windows 8.1 Enterprise",
uuid.UUID("113e705c-fa49-48a4-beea-7dd879b46b14") : "Windows 8.1 Enterprise N",
uuid.UUID("f7e88590-dfc7-4c78-bccb-6f3865b99d1a") : "Windows 8.1 Embedded Industry Automotive",
uuid.UUID("cd4e2d9f-5059-4a50-a92d-05d5bb1267c7") : "Windows 8.1 Embedded Industry Enterprise",
uuid.UUID("0ab82d54-47f4-4acb-818c-cc5bf0ecb649") : "Windows 8.1 Embedded Industry Professional",
uuid.UUID("fe1c3238-432a-43a1-8e25-97e7d1ef10f3") : "Windows 8.1 Core",
uuid.UUID("78558a64-dc19-43fe-a0d0-8075b2a370a3") : "Windows 8.1 Core N",
uuid.UUID("c72c6a1d-f252-4e7e-bdd1-3fca342acb35") : "Windows 8.1 Core Single Language",
uuid.UUID("db78b74f-ef1c-4892-abfe-1e66b8231df6") : "Windows 8.1 Core Country Specific",
uuid.UUID("ffee456a-cd87-4390-8e07-16146c672fd0") : "Windows 8.1 Core ARM",
uuid.UUID("e9942b32-2e55-4197-b0bd-5ff58cba8860") : "Windows 8.1 Core Connected",
uuid.UUID("c6ddecd6-2354-4c19-909b-306a3058484e") : "Windows 8.1 Core Connected N",
uuid.UUID("ba998212-460a-44db-bfb5-71bf09d1c68b") : "Windows 8.1 Core Connected Country Specific",
uuid.UUID("b8f5e3a3-ed33-4608-81e1-37d6c9dcfd9c") : "Windows 8.1 Core Connected Single Language",
uuid.UUID("e58d87b5-8126-4580-80fb-861b22f79296") : "Windows 8.1 Professional Student",
uuid.UUID("cab491c7-a918-4f60-b502-dab75e334f40") : "Windows 8.1 Professional Student N",
#########################
## Windows Server 2012 ##
#########################
uuid.UUID("c04ed6bf-55c8-4b47-9f8e-5a1f31ceee60") : "Windows Server 2012 / Windows 8 Core",
uuid.UUID("197390a0-65f6-4a95-bdc4-55d58a3b0253") : "Windows Server 2012 N / Windows 8 Core N",
uuid.UUID("8860fcd4-a77b-4a20-9045-a150ff11d609") : "Windows Server 2012 Single Language / Windows 8 Core Single Language",
uuid.UUID("9d5584a2-2d85-419a-982c-a00888bb9ddf") : "Windows Server 2012 Country Specific / Windows 8 Core Country Specific",
uuid.UUID("f0f5ec41-0d55-4732-af02-440a44a3cf0f") : "Windows Server 2012 Standard",
uuid.UUID("7d5486c7-e120-4771-b7f1-7b56c6d3170c") : "Windows Server 2012 MultiPoint Standard",
uuid.UUID("95fd1c83-7df5-494a-be8b-1300e1c9d1cd") : "Windows Server 2012 MultiPoint Premium",
uuid.UUID("d3643d60-0c42-412d-a7d6-52e6635327f6") : "Windows Server 2012 Datacenter",
#########################
## Windows Server 2010 ##
#########################
uuid.UUID("f772515c-0e87-48d5-a676-e6962c3e1195") : "Windows MultiPoint Server 2010",
###############
## Windows 8 ##
###############
uuid.UUID("a98bcd6d-5343-4603-8afe-5908e4611112") : "Windows 8 Professional",
uuid.UUID("ebf245c1-29a8-4daf-9cb1-38dfc608a8c8") : "Windows 8 Professional N",
uuid.UUID("a00018a3-f20f-4632-bf7c-8daa5351c914") : "Windows 8 Professional WMC",
uuid.UUID("458e1bec-837a-45f6-b9d5-925ed5d299de") : "Windows 8 Enterprise",
uuid.UUID("e14997e7-800a-4cf7-ad10-de4b45b578db") : "Windows 8 Enterprise N",
uuid.UUID("10018baf-ce21-4060-80bd-47fe74ed4dab") : "Windows 8 Embedded Industry Professional",
uuid.UUID("18db1848-12e0-4167-b9d7-da7fcda507db") : "Windows 8 Embedded Industry Enterprise",
uuid.UUID("af35d7b7-5035-4b63-8972-f0b747b9f4dc") : "Windows 8 Core ARM",
############################
## Windows Server 2008 R2 ##
############################
uuid.UUID("a78b8bd9-8017-4df5-b86a-09f756affa7c") : "Windows Server 2008 R2 Web",
uuid.UUID("cda18cf3-c196-46ad-b289-60c072869994") : "Windows Server 2008 R2 HPC Edition (Compute Cluster)",
uuid.UUID("68531fb9-5511-4989-97be-d11a0f55633f") : "Windows Server 2008 R2 Standard",
uuid.UUID("620e2b3d-09e7-42fd-802a-17a13652fe7a") : "Windows Server 2008 R2 Enterprise",
uuid.UUID("7482e61b-c589-4b7f-8ecc-46d455ac3b87") : "Windows Server 2008 R2 Datacenter",
uuid.UUID("8a26851c-1c7e-48d3-a687-fbca9b9ac16b") : "Windows Server 2008 R2 for Itanium-based Systems",
###############
## Windows 7 ##
###############
uuid.UUID("b92e9980-b9d5-4821-9c94-140f632f6312") : "Windows 7 Professional",
uuid.UUID("54a09a0d-d57b-4c10-8b69-a842d6590ad5") : "Windows 7 Professional N",
uuid.UUID("5a041529-fef8-4d07-b06f-b59b573b32d2") : "Windows 7 Professional E",
uuid.UUID("ae2ee509-1b34-41c0-acb7-6d4650168915") : "Windows 7 Enterprise",
uuid.UUID("1cb6d605-11b3-4e14-bb30-da91c8e3983a") : "Windows 7 Enterprise N",
uuid.UUID("46bbed08-9c7b-48fc-a614-95250573f4ea") : "Windows 7 Enterprise E",
uuid.UUID("db537896-376f-48ae-a492-53d0547773d0") : "Windows 7 Embedded POSReady",
uuid.UUID("aa6dd3aa-c2b4-40e2-a544-a6bbb3f5c395") : "Windows 7 Embedded ThinPC",
uuid.UUID("e1a8296a-db37-44d1-8cce-7bc961d59c54") : "Windows 7 Embedded Standard",
#########################
## Windows Server 2008 ##
#########################
uuid.UUID("ddfa9f7c-f09e-40b9-8c1a-be877a9a7f4b") : "Windows Server 2008 Web",
uuid.UUID("ad2542d4-9154-4c6d-8a44-30f11ee96989") : "Windows Server 2008 Standard",
uuid.UUID("2401e3d0-c50a-4b58-87b2-7e794b7d2607") : "Windows Server 2008 Standard without Hyper-V",
uuid.UUID("c1af4d90-d1bc-44ca-85d4-003ba33db3b9") : "Windows Server 2008 Enterprise",
uuid.UUID("8198490a-add0-47b2-b3ba-316b12d647b4") : "Windows Server 2008 Enterprise without Hyper-V",
uuid.UUID("7afb1156-2c1d-40fc-b260-aab7442b62fe") : "Windows Server 2008 HPC Edition (Compute Cluster)",
uuid.UUID("68b6e220-cf09-466b-92d3-45cd964b9509") : "Windows Server 2008 Datacenter",
uuid.UUID("fd09ef77-5647-4eff-809c-af2b64659a45") : "Windows Server 2008 Datacenter without Hyper-V",
uuid.UUID("01ef176b-3e0d-422a-b4f8-4ea880035e8f") : "Windows Server 2008 for Itanium-based Systems",
###################
## Windows Vista ##
###################
uuid.UUID("4f3d1606-3fea-4c01-be3c-8d671c401e3b") : "Windows Vista Business",
uuid.UUID("2c682dc2-8b68-4f63-a165-ae291d4cf138") : "Windows Vista Business N",
uuid.UUID("cfd8ff08-c0d7-452b-9f60-ef5c70c32094") : "Windows Vista Enterprise",
uuid.UUID("d4f54950-26f2-4fb4-ba21-ffab16afcade") : "Windows Vista Enterprise N",
#################
## Office 2019 ##
#################
uuid.UUID("0bc88885-718c-491d-921f-6f214349e79c") : "Office Professional Plus 2019 [Click-to-Run]",
uuid.UUID("fc7c4d0c-2e85-4bb9-afd4-01ed1476b5e9") : "Office Project Professional 2019 [Click-to-Run]",
uuid.UUID("500f6619-ef93-4b75-bcb4-82819998a3ca") : "Office Visio Professional 2019 [Click-to-Run]",
uuid.UUID("85dd8b5f-eaa4-4af3-a628-cce9e77c9a03") : "Office Professional Plus 2019",
uuid.UUID("6912a74b-a5fb-401a-bfdb-2e3ab46f4b02") : "Office Standard 2019",
uuid.UUID("2ca2bf3f-949e-446a-82c7-e25a15ec78c4") : "Office Project Professional 2019",
uuid.UUID("1777f0e3-7392-4198-97ea-8ae4de6f6381") : "Office Project Standard 2019",
uuid.UUID("5b5cf08f-b81a-431d-b080-3450d8620565") : "Office Visio Professional 2019",
uuid.UUID("e06d7df3-aad0-419d-8dfb-0ac37e2bdf39") : "Office Visio Standard 2019",
uuid.UUID("9e9bceeb-e736-4f26-88de-763f87dcc485") : "Office Access 2019",
uuid.UUID("237854e9-79fc-4497-a0c1-a70969691c6b") : "Office Excel 2019",
uuid.UUID("c8f8a301-19f5-4132-96ce-2de9d4adbd33") : "Office Outlook 2019",
uuid.UUID("3131fd61-5e4f-4308-8d6d-62be1987c92c") : "Office PowerPoint 2019",
uuid.UUID("9d3e4cca-e172-46f1-a2f4-1d2107051444") : "Office Publisher 2019",
uuid.UUID("734c6c6e-b0ba-4298-a891-671772b2bd1b") : "Office Skype for Business 2019",
uuid.UUID("059834fe-a8ea-4bff-b67b-4d006b5447d3") : "Office Word 2019",
#################
## Office 2016 ##
#################
uuid.UUID("d450596f-894d-49e0-966a-fd39ed4c4c64") : "Office Professional Plus 2016",
uuid.UUID("dedfa23d-6ed1-45a6-85dc-63cae0546de6") : "Office Standard 2016",
uuid.UUID("4f414197-0fc2-4c01-b68a-86cbb9ac254c") : "Office Project Professional 2016",
uuid.UUID("829b8110-0e6f-4349-bca4-42803577788d") : "Office Project Professional 2016 [Click-to-Run]",
uuid.UUID("da7ddabc-3fbe-4447-9e01-6ab7440b4cd4") : "Office Project Standard 2016",
uuid.UUID("cbbaca45-556a-4416-ad03-bda598eaa7c8") : "Office Project Standard 2016 [Click-to-Run]",
uuid.UUID("6bf301c1-b94a-43e9-ba31-d494598c47fb") : "Office Visio Professional 2016",
uuid.UUID("b234abe3-0857-4f9c-b05a-4dc314f85557") : "Office Visio Professional 2016 [Click-to-Run]",
uuid.UUID("aa2a7821-1827-4c2c-8f1d-4513a34dda97") : "Office Visio Standard 2016",
uuid.UUID("361fe620-64f4-41b5-ba77-84f8e079b1f7") : "Office Visio Standard 2016 [Click-to-Run]",
uuid.UUID("67c0fc0c-deba-401b-bf8b-9c8ad8395804") : "Office Access 2016",
uuid.UUID("c3e65d36-141f-4d2f-a303-a842ee756a29") : "Office Excel 2016",
uuid.UUID("9caabccb-61b1-4b4b-8bec-d10a3c3ac2ce") : "Office Mondo 2016",
uuid.UUID("e914ea6e-a5fa-4439-a394-a9bb3293ca09") : "Office Mondo Retail 2016",
uuid.UUID("d8cace59-33d2-4ac7-9b1b-9b72339c51c8") : "Office OneNote 2016",
uuid.UUID("ec9d9265-9d1e-4ed0-838a-cdc20f2551a1") : "Office Outlook 2016",
uuid.UUID("d70b1bba-b893-4544-96e2-b7a318091c33") : "Office Powerpoint 2016",
uuid.UUID("041a06cb-c5b8-4772-809f-416d03d16654") : "Office Publisher 2016",
uuid.UUID("83e04ee1-fa8d-436d-8994-d31a862cab77") : "Office Skype for Business 2016",
uuid.UUID("bb11badf-d8aa-470e-9311-20eaf80fe5cc") : "Office Word 2016",
#################
## Office 2013 ##
#################
uuid.UUID("87d2b5bf-d47b-41fb-af62-71c382f5cc85") : "Office Professional Plus 2013 [Preview]",
uuid.UUID("b322da9c-a2e2-4058-9e4e-f59a6970bd69") : "Office Professional Plus 2013",
uuid.UUID("b13afb38-cd79-4ae5-9f7f-eed058d750ca") : "Office Standard 2013",
uuid.UUID("3cfe50a9-0e03-4b29-9754-9f193f07b71f") : "Office Project Professional 2013 [Preview]",
uuid.UUID("4a5d124a-e620-44ba-b6ff-658961b33b9a") : "Office Project Professional 2013",
uuid.UUID("39e49e57-ae68-4ee3-b098-26480df3da96") : "Office Project Standard 2013 [Preview]",
uuid.UUID("427a28d1-d17c-4abf-b717-32c780ba6f07") : "Office Project Standard 2013",
uuid.UUID("cfbfd60e-0b5f-427d-917c-a4df42a80e44") : "Office Visio Professional 2013 [Preview]",
uuid.UUID("e13ac10e-75d0-4aff-a0cd-764982cf541c") : "Office Visio Professional 2013",
uuid.UUID("7012cc81-8887-42e9-b17d-4e5e42760f0d") : "Office Visio Standard 2013 [Preview]",
uuid.UUID("ac4efaf0-f81f-4f61-bdf7-ea32b02ab117") : "Office Visio Standard 2013",
uuid.UUID("44b538e2-fb34-4732-81e4-644c17d2e746") : "Office Access 2013 [Preview]",
uuid.UUID("6ee7622c-18d8-4005-9fb7-92db644a279b") : "Office Access 2013",
uuid.UUID("9373bfa0-97b3-4587-ab73-30934461d55c") : "Office Excel 2013 [Preview]",
uuid.UUID("f7461d52-7c2b-43b2-8744-ea958e0bd09a") : "Office Excel 2013",
uuid.UUID("67c0f908-184f-4f64-8250-12db797ab3c3") : "Office OneNote 2013 [Preview]",
uuid.UUID("efe1f3e6-aea2-4144-a208-32aa872b6545") : "Office OneNote 2013",
uuid.UUID("7bce4e7a-dd80-4682-98fa-f993725803d2") : "Office Outlook 2013 [Preview]",
uuid.UUID("771c3afa-50c5-443f-b151-ff2546d863a0") : "Office OutLook 2013",
uuid.UUID("1ec10c0a-54f6-453e-b85a-6fa1bbfea9b7") : "Office PowerPoint 2013 [Preview]",
uuid.UUID("8c762649-97d1-4953-ad27-b7e2c25b972e") : "Office PowerPoint 2013",
uuid.UUID("15aa2117-8f79-49a8-8317-753026d6a054") : "Office Publisher 2013 [Preview]",
uuid.UUID("00c79ff1-6850-443d-bf61-71cde0de305f") : "Office Publisher 2013",
uuid.UUID("7ccc8256-fbaa-49c6-b2a9-f5afb4257cd2") : "Office InfoPath 2013 [Preview]",
uuid.UUID("a30b8040-d68a-423f-b0b5-9ce292ea5a8f") : "Office InfoPath 2013",
uuid.UUID("c53dfe17-cc00-4967-b188-a088a965494d") : "Office Lync 2013 [Preview]",
uuid.UUID("1b9f11e3-c85c-4e1b-bb29-879ad2c909e3") : "Office Lync 2013",
uuid.UUID("de9c7eb6-5a85-420d-9703-fff11bdd4d43") : "Office Word 2013 [Preview]",
uuid.UUID("d9f5b1c6-5386-495a-88f9-9ad6b41ac9b3") : "Office Word 2013",
uuid.UUID("2816a87d-e1ed-4097-b311-e2341c57b179") : "Office Mondo 2013 [Preview]",
uuid.UUID("dc981c6b-fc8e-420f-aa43-f8f33e5c0923") : "Office Mondo 2013",
uuid.UUID("aa286eb4-556f-4eeb-967c-c1b771b7673e") : "Office SharePoint Workspace (Groove) 2013 [Preview]",
uuid.UUID("fb4875ec-0c6b-450f-b82b-ab57d8D1677f") : "Office SharePoint Workspace (Groove) 2013",
## uuid.UUID("???") : "Office SharePoint Designer (Frontpage) 2013 [Preview]",
uuid.UUID("ba3e3833-6a7e-445a-89d0-7802a9a68588") : "Office SharePoint Designer (Frontpage) 2013",
uuid.UUID("1dc00701-03af-4680-b2af-007ffc758a1f") : "Office Mondo Retail 2013",
#################
## Office 2010 ##
#################
uuid.UUID("6f327760-8c5c-417c-9b61-836a98287e0c") : "Office Professional Plus 2010",
uuid.UUID("9da2a678-fb6b-4e67-ab84-60dd6a9c819a") : "Office Standard 2010",
uuid.UUID("df133ff7-bf14-4f95-afe3-7b48e7e331ef") : "Office Project Professional 2010",
uuid.UUID("5dc7bf61-5ec9-4996-9ccb-df806a2d0efe") : "Office Project Standard 2010",
uuid.UUID("e558389c-83c3-4b29-adfe-5e4d7f46c358") : "Office Visio Professional 2010",
uuid.UUID("9ed833ff-4f92-4f36-b370-8683a4f13275") : "Office Visio Standard 2010",
uuid.UUID("92236105-bb67-494f-94c7-7f7a607929bd") : "Office Visio Premium 2010",
uuid.UUID("8ce7e872-188c-4b98-9d90-f8f90b7aad02") : "Office Access 2010",
uuid.UUID("cee5d470-6e3b-4fcc-8c2b-d17428568a9f") : "Office Excel 2010",
uuid.UUID("ab586f5c-5256-4632-962f-fefd8b49e6f4") : "Office OneNote 2010",
uuid.UUID("ecb7c192-73ab-4ded-acf4-2399b095d0cc") : "Office OutLook 2010",
uuid.UUID("45593b1d-dfb1-4e91-bbfb-2d5d0ce2227a") : "Office PowerPoint 2010",
uuid.UUID("b50c4f75-599b-43e8-8dcd-1081a7967241") : "Office Publisher 2010",
uuid.UUID("ca6b6639-4ad6-40ae-a575-14dee07f6430") : "Office InfoPath 2010",
uuid.UUID("8947d0b8-c33b-43e1-8c56-9b674c052832") : "Office SharePoint Workspace (Groove) 2010",
uuid.UUID("2d0882e7-a4e7-423b-8ccc-70d91e0158b1") : "Office Word 2010",
uuid.UUID("ea509e87-07a1-4a45-9edc-eba5a39f36af") : "Office Small Business Basics 2010",
uuid.UUID("2745e581-565a-4670-ae90-6bf7c57ffe43") : "Office Starter 2010 Retail",
## uuid.UUID("???") : "Office SharePoint Designer (Frontpage) 2010",
uuid.UUID("09ed9640-f020-400a-acd8-d7d867dfd9c2") : "Office Mondo 1 2010",
uuid.UUID("ef3d4e49-a53d-4d81-a2b1-2ca6c2556b2c") : "Office Mondo 2 2010",
######################
## Windows Previews ##
######################
uuid.UUID("a4383e6b-dada-423d-a43d-f25678429676") : "Windows 8.1 Professional (Blue) [Preview]",
uuid.UUID("631ead72-a8ab-4df8-bbdf-372029989bdd") : "Windows 8.1 ARM [Beta Pre-Release]",
uuid.UUID("2b9c337f-7a1d-4271-90a3-c6855a2b8a1c") : "Windows 8.1 [Beta Pre-Release]",
uuid.UUID("ba947c44-d19d-4786-b6ae-22770bc94c54") : "Windows Server 2016 Datacenter [Preview]",
uuid.UUID("ff808201-fec6-4fd4-ae16-abbddade5706") : "Windows 10 Professional [Pre-Release]",
uuid.UUID("cf59a07b-1a2a-4be0-bfe0-423b5823e663") : "Windows 8 Professional WMC [RC]",
#################################
## A lot of Previews to define ##
#################################
uuid.UUID("34260150-69ac-49a3-8a0d-4a403ab55763") : "Windows 10 Professional N [Pre-Release]",
uuid.UUID("64192251-81b0-4898-ac63-913cc3edf919") : "Windows XX [XX]",
uuid.UUID("cc17e18a-fa93-43d6-9179-72950a1e931a") : "Windows 10 Professional WMC [Pre-Release]",
uuid.UUID("903663f7-d2ab-49c9-8942-14aa9e0a9c72") : "Windows 10 Home / Core [Pre-Release]",
uuid.UUID("4dfd543d-caa6-4f69-a95f-5ddfe2b89567") : "Windows 10 Home / Core N [Pre-Release]",
uuid.UUID("6496e59d-89dc-49eb-a353-09ceb9404845") : "Windows 10 Home / Core [Pre-Release]",
uuid.UUID("2cc171ef-db48-4adc-af09-7c574b37f139") : "Windows 10 Home / Core Single Language [Pre-Release]",
uuid.UUID("5fe40dd6-cf1f-4cf2-8729-92121ac2e997") : "Windows 10 Home / Core Country Specific [Pre-Release]",
uuid.UUID("af43f7f0-3b1e-4266-a123-1fdb53f4323b") : "Windows 10 Education [Pre-Release]",
uuid.UUID("075aca1f-05d7-42e5-a3ce-e349e7be7078") : "Windows 10 Education N [Pre-Release]",
uuid.UUID("e8ced63e-420d-4ab6-8723-aaf165efb5eb") : "Windows XX Education [Pre-Release]",
uuid.UUID("3885bca5-11c1-4d4e-9395-df38f7f09a0e") : "Windows XX Education N [Pre-Release]",
uuid.UUID("6ae51eeb-c268-4a21-9aae-df74c38b586d") : "Windows 10 Enterprise N [Pre-Release]",
uuid.UUID("c23947f3-3f2e-401f-a38c-f38fe0ecb0bd") : "Windows XX Enterprise N [XX]",
uuid.UUID("38fbe2ac-465a-4ef7-b9d8-72044f2792b6") : "Windows XX Enterprise [XX]",
uuid.UUID("2cf5af84-abab-4ff0-83f8-f040fb2576eb") : "Windows 10 Enterprise XX LTSB [Pre-Release]",
uuid.UUID("11a37f09-fb7f-4002-bd84-f3ae71d11e90") : "Windows 10 Enterprise XX LTSB N [Pre-Release]",
uuid.UUID("75d003b0-dc66-42c0-b3a1-308a3f35741a") : "Windows 10 Enterprise XX LTSB [Pre-Release]",
uuid.UUID("4e4d5504-e7b1-419c-913d-3c80c15294fc") : "Windows 10 Enterprise XX LTSB N [Pre-Release]",
uuid.UUID("43f2ab05-7c87-4d56-b27c-44d0f9a3dabd") : "Windows 10 Enterprise [Pre-Release]",
uuid.UUID("b554b49f-4d57-4f08-955e-87886f514d49") : "Windows 10 Core ARM [Pre-Release]",
uuid.UUID("f18bbe32-16dc-48d4-a27b-5f3966f82513") : "Windows 10 Core Connected N [Pre-Release]",
uuid.UUID("964a60f6-1505-4ddb-af03-6a9ce6997d3b") : "Windows 10 Core Connected Single Language [Pre-Release]",
uuid.UUID("b5fe5eaa-14cc-4075-84ae-57c0206d1133") : "Windows 10 Core Connected Country Specific [Pre-Release]",
uuid.UUID("827a0032-dced-4609-ab6e-16b9d8a40280") : "Windows 10 Core Connected [Pre-Release]",
uuid.UUID("b15187db-11c6-4f13-91ca-8121cebf5b88") : "Windows 10 Professional S [Pre-Release]",
uuid.UUID("6cdbc9fb-63f5-431b-a5c0-c6f19ae26a9b") : "Windows 10 Professional S N [Pre-Release]",
uuid.UUID("aa234c15-ee34-4e5f-adb5-73afafb77143") : "Windows XX Professional S [Pre-Release]",
uuid.UUID("9f6a1bc9-5278-4991-88c9-7301c87a75ea") : "Windows XX Professional S N [Pre-Release]",
uuid.UUID("49066601-00dc-4d2c-83a8-4343a7b990d1") : "Windows 10 Professional Student [Pre-Release]",
uuid.UUID("bd64ebf7-d5ec-44c5-ba00-6813441c8c87") : "Windows 10 Professional Student N [Pre-Release]",
uuid.UUID("5b2add49-b8f4-42e0-a77c-adad4efeeeb1") : "Windows 10 PPIPro [Pre-Release]",
uuid.UUID("3a9a9414-24bf-4836-866d-ba13a298efb0") : "Windows 8 Core ARM [RC]",
uuid.UUID("c8cca3ca-bea8-4f6f-87e0-4d050ce8f0a9") : "Windows 8 Embedded Industry Enterprise [TAP-CTP]",
uuid.UUID("5ca3e488-dbae-4fae-8282-a98fbcd21126") : "Windows 8 Embedded Industry Enterprise [Beta]",
uuid.UUID("cde952c7-2f96-4d9d-8f2b-2d349f64fc51") : "Windows 8.1 Enterprise [Pre-Release]",
uuid.UUID("c436def1-0dcc-4849-9a59-8b6142eb70f3") : "Windows 8.1 Core Connected [Pre-Release]",
uuid.UUID("86f72c8d-8363-4188-b574-1a53cb374711") : "Windows 8.1 Core Connected N [Pre-Release]",
uuid.UUID("a8651bfb-7fe0-40df-b156-87337ecd5acc") : "Windows 8.1 Core Connected Country Specific [Pre-Release]",
uuid.UUID("5b120df4-ea3f-4e82-b0c0-6568f719730e") : "Windows 8.1 Core Connected Single Language [Pre-Release]",
uuid.UUID("fd5ae385-f5cf-4b53-b1fa-1af6fff7c0d8") : "Windows 8.1 Professional Student [Pre-Release]",
uuid.UUID("687f6358-6a21-453a-a712-3b3b57123827") : "Windows 8.1 Professional Student N [Pre-Release]",
uuid.UUID("c35a9336-fb02-48db-8f4d-245c17f03667") : "Windows 8.1 Embedded Industry [Beta]",
uuid.UUID("4daf1e3e-6be9-4848-8f5a-a18a0d2895e1") : "Windows 8.1 Embedded Industry Enterprise [Beta]",
uuid.UUID("9cc2564c-292e-4d8a-b9f9-1f5007d9409a") : "Windows 8.1 Embedded Industry Automotive [Beta]",
uuid.UUID("3ddb92aa-332e-46f9-abb7-8bdf62f8d967") : "Windows Longhorn Web Edition [XX]",
uuid.UUID("7ea4f647-9e67-453b-a7ba-56f7102afde2") : "Windows Longhorn Standard Server [XX]",
uuid.UUID("5a99526c-1c09-4481-80fb-b60e8b3d99f8") : "Windows Longhorn Enterprise Server [XX]",
uuid.UUID("8372b47d-5221-41d8-88d0-3f924e50623e") : "Windows Longhorn Computer Cluster [XX]",
uuid.UUID("932ef1f5-4327-4548-b147-51b0f5502995") : "Windows Longhorn Datacenter Server [XX]",
uuid.UUID("bebf03b1-a184-4c5e-9103-88af08055e68") : "Windows Longhorn Enterprise Server IA64 [XX]",
uuid.UUID("bfa6b683-56be-47b8-a22e-461b27b9cf11") : "Windows Server XX MultiPoint Standard [XX]",
uuid.UUID("bc20fb5b-4097-484f-84d2-55b18dac95eb") : "Windows Server XX MultiPoint Premium [XX]",
uuid.UUID("8a409d61-30fe-4903-bdbc-1fb28603ba3a") : "Windows Server XX Enterprise [XX]",
uuid.UUID("9dce1f29-bb10-4be0-8027-35b953dd46d5") : "Windows 7 Server Enterprise [XX]",
uuid.UUID("bf9eda2f-74cc-4ba3-8967-cde30f18c230") : "Windows 7 Server Enterprise IA64 [XX]",
uuid.UUID("dc06c019-b222-4706-a820-645e77d26a91") : "Windows 7 Server Enterprise without Hyper-V [XX]",
uuid.UUID("d3872724-5c08-4b1b-91f2-fc9eafed4990") : "Windows XX Server Standard [XX]",
uuid.UUID("92374131-ed4c-4d1b-846a-32f43c3eb90d") : "Windows 7 Server Standard [XX]",
uuid.UUID("f963bf4b-9693-46e6-9d9d-09c73eaa2b60") : "Windows 7 Server Standard without Hyper-V [XX]",
uuid.UUID("e5676f13-9b66-4a1f-8b0c-43490e236202") : "Windows XX Server Web [XX]",
uuid.UUID("4f4cfa6c-76d8-49f5-9c41-0a57f8af1bbc") : "Windows 7 Server Web [XX]",
uuid.UUID("0839e017-cfef-4ac6-a97e-ed2ea7962787") : "Windows 7 Server Datacenter without Hyper-V [XX]",
uuid.UUID("cc64c548-1867-4777-a1cc-0022691bc2a0") : "Windows 7 Server Datacenter [XX]",
uuid.UUID("2412bea9-b6e0-441e-8dc2-a13720b42de9") : "Windows XX Server HPC Edition [XX]",
uuid.UUID("c6e3410d-e48d-41eb-8ca9-848397f46d02") : "Windows Server 2012 N / Windows 8 Core N [RC]",
uuid.UUID("b148c3f4-6248-4d2f-8c6d-31cce7ae95c3") : "Windows Server 2012 Single Language / Windows 8 Core Single Language [RC]",
uuid.UUID("c7a8a09a-571c-4ea8-babc-0cbe4d48a89d") : "Windows Server 2012 Country Specific / Windows 8 Core Country Specific [RC]",
uuid.UUID("8f365ba6-c1b9-4223-98fc-282a0756a3ed") : "Windows Server 2012 R2 Essentials [RTM]",
uuid.UUID("b995b62c-eae2-40aa-afb9-111889a84ef4") : "Windows XX Server HI [Beta]",
uuid.UUID("99ff9b26-016a-49d3-982e-fc492f352e57") : "Windows Vista Business [XX]",
uuid.UUID("90284483-de09-44a2-a406-98957f8dd09d") : "Windows Vista Business [XX]",
uuid.UUID("af46f56f-f06b-49f0-a420-caa8a8d2bf8c") : "Windows Vista Business N [XX]",
uuid.UUID("cf67834d-db4a-402c-ab1f-2c134f02b700") : "Windows Vista Enterprise [XX]",
uuid.UUID("14478aca-ea15-4958-ac34-359281101c99") : "Windows Vista Enterprise [XX]",
uuid.UUID("0707c7fc-143d-46a4-a830-3705e908202c") : "Windows Vista Enterprise N [XX]",
uuid.UUID("957ec1e8-97cd-42a8-a091-01a30cf779da") : "Windows 7 Business [XX]",
uuid.UUID("0ff4e536-a746-4018-b107-e81dd0b6d33a") : "Windows 7 Business N [XX]",
uuid.UUID("ea77973e-4930-4fa1-a899-02dfaeada1db") : "Windows 7 Enterprise [XX]",
uuid.UUID("e4ecef68-4372-4740-98e8-6c157cd301c2") : "Windows 7 Enterprise N [XX]",
uuid.UUID("2a4403df-877f-4046-8271-db6fb6ec54c8") : "Enterprise ProdKey3 Win 9984 DLA/Bypass NQR Test",
uuid.UUID("38fbe2ac-465a-4ef7-b9d8-72044f2792b6") : "Windows XX Enterprise [XX]",
}
licenseStates = { licenseStates = {
0 : "Unlicensed", 0 : "Unlicensed",
1 : "Activated", 1 : "Activated",
@ -464,29 +113,9 @@ class kmsBase:
'SL_E_VL_MACHINE_NOT_BOUND' : 0xC004F056 'SL_E_VL_MACHINE_NOT_BOUND' : 0xC004F056
} }
def __init__(self, data, config): def getPadding(self, bodyLength):
self.data = data ## https://forums.mydigitallife.info/threads/71213-Source-C-KMS-Server-from-Microsoft-Toolkit?p=1277542&viewfull=1#post1277542
self.config = config return 4 + (((~bodyLength & 3) + 1) & 3)
def getConfig(self):
return self.config
def getOptions(self):
return self.config
def getData(self):
return self.data
def getResponse(self):
return ''
def getResponsePadding(self, bodyLength):
if bodyLength % 8 == 0:
paddingLength = 0
else:
paddingLength = 8 - bodyLength % 8
padding = bytearray(paddingLength)
return padding
def serverLogic(self, kmsRequest): def serverLogic(self, kmsRequest):
if self.config['sqlite'] and self.config['dbSupport']: if self.config['sqlite'] and self.config['dbSupport']:
@ -497,11 +126,11 @@ class kmsBase:
try: try:
con = sqlite3.connect(self.dbName) con = sqlite3.connect(self.dbName)
cur = con.cursor() cur = con.cursor()
cur.execute("CREATE TABLE clients(clientMachineId TEXT, machineName TEXT, \ cur.execute("CREATE TABLE clients(clientMachineId TEXT, machineName TEXT, applicationId TEXT, \
applicationId TEXT, skuId TEXT, licenseStatus TEXT, lastRequestTime INTEGER, kmsEpid TEXT, requestCount INTEGER)") skuId TEXT, licenseStatus TEXT, lastRequestTime INTEGER, kmsEpid TEXT, requestCount INTEGER)")
except sqlite3.Error as e: #*2to3* except sqlite3.Error as e:
logging.error("%s:" % e.args[0]) logging.error("Error %s:" % e.args[0])
sys.exit(1) sys.exit(1)
finally: finally:
@ -511,7 +140,7 @@ applicationId TEXT, skuId TEXT, licenseStatus TEXT, lastRequestTime INTEGER, kms
shell_message(nshell = 15) shell_message(nshell = 15)
kmsRequest = byterize(kmsRequest) kmsRequest = byterize(kmsRequest)
logging.debug("KMS Request Bytes: \n%s\n" % justify(binascii.b2a_hex(str(kmsRequest).encode('latin-1')).decode('utf-8'))) #*2to3* logging.debug("KMS Request Bytes: \n%s\n" % justify(binascii.b2a_hex(str(kmsRequest).encode('latin-1')).decode('utf-8')))
logging.debug("KMS Request: \n%s\n" % justify(kmsRequest.dump(print_to_stdout = False))) logging.debug("KMS Request: \n%s\n" % justify(kmsRequest.dump(print_to_stdout = False)))
clientMachineId = kmsRequest['clientMachineId'].get() clientMachineId = kmsRequest['clientMachineId'].get()
@ -519,19 +148,57 @@ applicationId TEXT, skuId TEXT, licenseStatus TEXT, lastRequestTime INTEGER, kms
skuId = kmsRequest['skuId'].get() skuId = kmsRequest['skuId'].get()
requestDatetime = filetimes.filetime_to_dt(kmsRequest['requestTime']) requestDatetime = filetimes.filetime_to_dt(kmsRequest['requestTime'])
# Try and localize the request time, if pytz is available # Localize the request time, if module "tzlocal" is available.
try: try:
import timezones from tzlocal import get_localzone
from pytz import utc from pytz.exceptions import UnknownTimeZoneError
local_dt = utc.localize(requestDatetime).astimezone(timezones.localtz()) try:
except ImportError: tz = get_localzone()
local_dt = tz.localize(requestDatetime)
except UnknownTimeZoneError:
logging.warning('Unknown time zone ! Request time not localized.')
local_dt = requestDatetime local_dt = requestDatetime
except ImportError:
logging.warning('Module "tzlocal" not available ! Request time not localized.')
local_dt = requestDatetime
# Get SkuId, AppId and client threshold.
appName, skuName = applicationId, skuId
kmsdb = kmsDB2Dict()
appitems = kmsdb[2]
for appitem in appitems:
kmsitems = appitem['KmsItems']
for kmsitem in kmsitems:
# Activation threshold.
try:
count = int(kmsitem['NCountPolicy'])
except KeyError:
count = 25
if self.config["CurrentClientCount"] <= count:
currentClientCount = count + 1
else:
currentClientCount = self.config["CurrentClientCount"]
skuitems = kmsitem['SkuItems']
for skuitem in skuitems:
try:
if uuid.UUID(skuitem['Id']) == skuId:
skuName = skuitem['DisplayName']
break
except IndexError:
pass
if uuid.UUID(appitem['Id']) == applicationId:
appName = appitem['DisplayName']
infoDict = { infoDict = {
"machineName" : kmsRequest.getMachineName(), "machineName" : kmsRequest.getMachineName(),
"clientMachineId" : str(clientMachineId), "clientMachineId" : str(clientMachineId),
"appId" : self.appIds.get(applicationId, str(applicationId)), "appId" : appName,
"skuId" : self.skuIds.get(skuId, str(skuId)), "skuId" : skuName,
"licenseStatus" : kmsRequest.getLicenseStatus(), "licenseStatus" : kmsRequest.getLicenseStatus(),
"requestTime" : int(time.time()), "requestTime" : int(time.time()),
"kmsEpid" : None "kmsEpid" : None
@ -555,9 +222,8 @@ applicationId TEXT, skuId TEXT, licenseStatus TEXT, lastRequestTime INTEGER, kms
data = cur.fetchone() data = cur.fetchone()
if not data: if not data:
#print "Inserting row..." #print "Inserting row..."
cur.execute("INSERT INTO clients (clientMachineId, machineName, \ cur.execute("INSERT INTO clients (clientMachineId, machineName, applicationId, \
applicationId, skuId, licenseStatus, lastRequestTime, requestCount) VALUES (:clientMachineId, :machineName, :appId, \ skuId, licenseStatus, lastRequestTime, requestCount) VALUES (:clientMachineId, :machineName, :appId, :skuId, :licenseStatus, :requestTime, 1);", infoDict)
:skuId, :licenseStatus, :requestTime, 1);", infoDict)
else: else:
#print "Data:", data #print "Data:", data
if data[1] != infoDict["machineName"]: if data[1] != infoDict["machineName"]:
@ -579,33 +245,33 @@ clientMachineId=:clientMachineId;", infoDict)
cur.execute("UPDATE clients SET requestCount=requestCount+1 WHERE \ cur.execute("UPDATE clients SET requestCount=requestCount+1 WHERE \
clientMachineId=:clientMachineId;", infoDict) clientMachineId=:clientMachineId;", infoDict)
except sqlite3.Error as e: #*2to3* except sqlite3.Error as e:
logging.error("%s:" % e.args[0]) logging.error("Error %s:" % e.args[0])
except sqlite3.Error as e: #*2to3* except sqlite3.Error as e:
logging.error("%s:" % e.args[0]) logging.error("Error %s:" % e.args[0])
sys.exit(1) sys.exit(1)
finally: finally:
if con: if con:
con.commit() con.commit()
con.close() con.close()
return self.createKmsResponse(kmsRequest) return self.createKmsResponse(kmsRequest, currentClientCount)
def createKmsResponse(self, kmsRequest): def createKmsResponse(self, kmsRequest, currentClientCount):
response = self.kmsResponseStruct() response = self.kmsResponseStruct()
response['versionMinor'] = kmsRequest['versionMinor'] response['versionMinor'] = kmsRequest['versionMinor']
response['versionMajor'] = kmsRequest['versionMajor'] response['versionMajor'] = kmsRequest['versionMajor']
if not self.config["epid"]: if not self.config["epid"]:
response["kmsEpid"] = kmsPidGenerator.epidGenerator(kmsRequest['applicationId'].get(), response["kmsEpid"] = kmsPidGenerator.epidGenerator(kmsRequest['kmsCountedId'].get(), kmsRequest['versionMajor'],
kmsRequest['versionMajor'], self.config["lcid"]).encode('utf-16le') self.config["lcid"]).encode('utf-16le')
else: else:
response["kmsEpid"] = self.config["epid"].encode('utf-16le') response["kmsEpid"] = self.config["epid"].encode('utf-16le')
response['clientMachineId'] = kmsRequest['clientMachineId'] response['clientMachineId'] = kmsRequest['clientMachineId']
response['responseTime'] = kmsRequest['requestTime'] response['responseTime'] = kmsRequest['requestTime']
response['currentClientCount'] = self.config["CurrentClientCount"] response['currentClientCount'] = currentClientCount
response['vLActivationInterval'] = self.config["VLActivationInterval"] response['vLActivationInterval'] = self.config["VLActivationInterval"]
response['vLRenewalInterval'] = self.config["VLRenewalInterval"] response['vLRenewalInterval'] = self.config["VLRenewalInterval"]
@ -623,11 +289,11 @@ clientMachineId=:clientMachineId;", infoDict)
cur.execute("UPDATE clients SET kmsEpid=? WHERE clientMachineId=?;", cur.execute("UPDATE clients SET kmsEpid=? WHERE clientMachineId=?;",
(str(response["kmsEpid"].decode('utf-16le')), str(kmsRequest['clientMachineId'].get()))) (str(response["kmsEpid"].decode('utf-16le')), str(kmsRequest['clientMachineId'].get())))
except sqlite3.Error as e: #*2to3* except sqlite3.Error as e:
logging.error("%s:" % e.args[0]) logging.error("Error %s:" % e.args[0])
except sqlite3.Error as e: #*2to3* except sqlite3.Error as e:
logging.error("%s:" % e.args[0]) logging.error("Error %s:" % e.args[0])
sys.exit(1) sys.exit(1)
finally: finally:
if con: if con:
@ -643,22 +309,19 @@ import kmsRequestV4, kmsRequestV5, kmsRequestV6, kmsRequestUnknown
def generateKmsResponseData(data, config): def generateKmsResponseData(data, config):
version = kmsBase.GenericRequestHeader(data)['versionMajor'] version = kmsBase.GenericRequestHeader(data)['versionMajor']
currentDate = datetime.datetime.now().ctime() currentDate = time.strftime("%a %b %d %H:%M:%S %Y")
if version == 4: if version == 4:
logging.info("Received V%d request on %s." % (version, currentDate)) logging.info("Received V%d request on %s." % (version, currentDate))
messagehandler = kmsRequestV4.kmsRequestV4(data, config) messagehandler = kmsRequestV4.kmsRequestV4(data, config)
messagehandler.executeRequestLogic()
elif version == 5: elif version == 5:
logging.info("Received V%d request on %s." % (version, currentDate)) logging.info("Received V%d request on %s." % (version, currentDate))
messagehandler = kmsRequestV5.kmsRequestV5(data, config) messagehandler = kmsRequestV5.kmsRequestV5(data, config)
messagehandler.executeRequestLogic()
elif version == 6: elif version == 6:
logging.info("Received V%d request on %s." % (version, currentDate)) logging.info("Received V%d request on %s." % (version, currentDate))
messagehandler = kmsRequestV6.kmsRequestV6(data, config) messagehandler = kmsRequestV6.kmsRequestV6(data, config)
messagehandler.executeRequestLogic()
else: else:
logging.info("Unhandled KMS version V%d." % version) logging.info("Unhandled KMS version V%d." % version)
messagehandler = kmsRequestUnknown.kmsRequestUnknown(data, config) messagehandler = kmsRequestUnknown.kmsRequestUnknown(data, config)
return messagehandler.getResponse() return messagehandler.executeRequestLogic()

45
py3-kms/kmsDB2Dict.py Normal file
View File

@ -0,0 +1,45 @@
#!/usr/bin/env python3
import os
import xml.etree.ElementTree as ET
def kmsDB2Dict():
path = os.path.join(os.path.dirname(__file__), 'KmsDataBase.xml')
root = ET.parse(path).getroot()
kmsdb, child1, child2, child3 = [ [] for _ in range(4) ]
## Get winbuilds.
for winbuild in root.iter('WinBuild'):
child1.append(winbuild.attrib)
kmsdb.append(child1)
## Get csvlkitem data.
child1 = []
for csvlk in root.iter('CsvlkItem'):
for activ in csvlk.iter('Activate'):
child2.append(activ.attrib['KmsItem'])
csvlk.attrib.update({'Activate' : child2})
child1.append(csvlk.attrib)
child2 = []
kmsdb.append(child1)
## Get appitem data.
child1 = []
for app in root.iter('AppItem'):
for kms in app.iter('KmsItem'):
for sku in kms.iter('SkuItem'):
child3.append(sku.attrib)
kms.attrib.update({'SkuItems' : child3})
child2.append(kms.attrib)
child3 = []
app.attrib.update({'KmsItems' : child2})
child1.append(app.attrib)
child2 = []
kmsdb.append(child1)
return kmsdb

View File

@ -4,133 +4,86 @@ import datetime
import random import random
import time import time
import uuid import uuid
from ast import literal_eval
APP_ID_WINDOWS = uuid.UUID("55C92734-D682-4D71-983E-D6EC3F16059F") from kmsDB2Dict import kmsDB2Dict
APP_ID_OFFICE14 = uuid.UUID("59A52881-A989-479D-AF46-F275C6370663")
APP_ID_OFFICE15 = uuid.UUID("0FF1CE15-A989-479D-AF46-F275C6370663") # also valid for Office 16 (2016).
# KMS Host OS Type def epidGenerator(kmsId, version, lcid):
hostOsList = {} kmsdb = kmsDB2Dict()
# Windows Server 2008 R2 SP1 winbuilds, csvlkitems, appitems = kmsdb[0], kmsdb[1], kmsdb[2]
hostOsList["HOST_SERVER2008R2"] = { hosts, pkeys = [ [] for _ in range(2) ]
"type" : 55041,
"osBuild" : 7601
}
# Windows Server 2012 RTM
hostOsList["HOST_SERVER2012"] = {
"type" : 5426,
"osBuild" : 9200
}
# Windows Server 2012 R2 RTM
hostOsList["HOST_SERVER2012R2"] = {
"type" : 6401,
"osBuild" : 9600
}
# Windows Server 2016 RTM
hostOsList["HOST_SERVER2016"] = {
"type" : 3612,
"osBuild" : 14393
}
# Product Specific KeyConfig
pkeyConfigList = {}
# Windows Server KMS Host PID, actual PIDRangeMax = 191999999
pkeyConfigList["windows"] = {
"GroupID" : 206,
"PIDRangeMin" : 152000000,
"PIDRangeMax" : 191999999
}
# Windows Server 2012 R2 KMS Host PID, actual PIDRangeMax = 310999999
pkeyConfigList["windows2012r2"] = {
"GroupID" : 206,
"PIDRangeMin" : 271000000,
"PIDRangeMax" : 310999999
}
# Office 2010 KMSHost Class PID, actual PIDRangeMax = 217999999
pkeyConfigList["office14"] = {
"GroupID" : 96,
"PIDRangeMin" : 199000000,
"PIDRangeMax" : 217999999
}
# Office 2013 KMSHost Class PID, actual PIDRangeMax = 255999999
pkeyConfigList["office15"] = {
"GroupID" : 206,
"PIDRangeMin" : 234000000,
"PIDRangeMax" : 255999999
}
def epidGenerator(appId, version, lcid):
# Generate Part 1 & 7: Host Type and KMS Server OS Build
hostOsType = random.choice(list(hostOsList.keys())) #*2to3*
hostOsDict = hostOsList[hostOsType]
# Product Specific Detection (Get all CSVLK GroupID and PIDRange good for EPID generation), then
# Generate Part 2: Group ID and Product Key ID Range # Generate Part 2: Group ID and Product Key ID Range
if appId == APP_ID_OFFICE14: for csvlkitem in csvlkitems:
keyConfig = pkeyConfigList["office14"] try:
elif appId == APP_ID_OFFICE15: if kmsId in [ uuid.UUID(kmsitem) for kmsitem in csvlkitem['Activate'] ]:
keyConfig = pkeyConfigList["office15"] pkeys.append( (csvlkitem['GroupId'], csvlkitem['MinKeyId'], csvlkitem['MaxKeyId'], csvlkitem['InvalidWinBuild']) )
else: except IndexError:
# Default to Windows # fallback to Windows Server 2019 parameters.
if hostOsDict['osBuild'] == 14393: GroupId, MinKeyId, MaxKeyId, Invalid = 206, 551000000, 570999999, [0,1,2]
keyConfig = pkeyConfigList["windows2012r2"]
elif hostOsDict['osBuild'] == 9600: pkey = random.choice(pkeys)
keyConfig = pkeyConfigList["windows2012r2"] GroupId, MinKeyId, MaxKeyId, Invalid = int(pkey[0]), int(pkey[1]), int(pkey[2]), literal_eval(pkey[3])
else:
keyConfig = pkeyConfigList["windows"] # Get all KMS Server Host Builds good for EPID generation, then
# Generate Part 1 & 7: Host Type and KMS Server OS Build
# https://www.itprotoday.com/windows-78/volume-activation-server-2008
# https://docs.microsoft.com/en-us/windows-server/get-started-19/activation-19
# https://docs.microsoft.com/en-us/windows-server/get-started/windows-server-release-info
# https://support.microsoft.com/en-us/help/13853/windows-lifecycle-fact-sheet
for winbuild in winbuilds:
try:
# Check versus "InvalidWinBuild".
if int(winbuild['WinBuildIndex']) not in Invalid:
# Re-check versus "version" protocol.
if ((version == 4 and int(winbuild['BuildNumber']) >= 7601) or
(version == 5 and int(winbuild['BuildNumber']) >= 9200) or
(version == 6 and int(winbuild['BuildNumber']) >= 9600)):
hosts.append(winbuild)
except KeyError:
# fallback to Windows Server 2019 parameters.
BuildNumber, PlatformId, MinDate = '17763', '3612', '02/10/2018'
host = random.choice(hosts)
BuildNumber, PlatformId, MinDate = host['BuildNumber'], host['PlatformId'], host['MinDate']
# Generate Part 3 and Part 4: Product Key ID # Generate Part 3 and Part 4: Product Key ID
productKeyID = random.randint(keyConfig["PIDRangeMin"], keyConfig["PIDRangeMax"]) productKeyID = random.randint(MinKeyId, MaxKeyId)
# Generate Part 5: License Channel (00=Retail, 01=Retail, 02=OEM, # Generate Part 5: License Channel (00=Retail, 01=Retail, 02=OEM, 03=Volume(GVLK,MAK)) - always 03
# 03=Volume(GVLK,MAK)) - always 03
licenseChannel = 3 licenseChannel = 3
# Generate Part 6: Language - use system default language # Generate Part 6: Language - use system default language, 1033 is en-us
# 1033 is en-us languageCode = lcid # (C# CultureInfo.InstalledUICulture.LCID)
languageCode = lcid # C# CultureInfo.InstalledUICulture.LCID
# Generate Part 8: KMS Host Activation Date # Generate Part 8: KMS Host Activation Date
# Get Minimum Possible Date: Newer Products first d = datetime.datetime.strptime(MinDate, "%d/%m/%Y")
if hostOsType == "HOST_SERVER2016": minTime = datetime.date(d.year, d.month, d.day)
# Microsoft Windows Server 2016 RTM
minTime = datetime.date(2016, 7, 27)
elif hostOsType == "HOST_SERVER2012R2" or version == 6:
# Microsoft Windows Server 2012 R2 RTM (October 17, 2013)
minTime = datetime.date(2013, 10, 17)
elif appId == APP_ID_OFFICE15:
# Microsoft Office 2013 RTM (October 24, 2012)
minTime = datetime.date(2012, 10, 24)
elif hostOsType == "HOST_SERVER2012" or version == 5:
# Microsoft Windows Server 2012 RTM (September 4, 2012)
minTime = datetime.date(2012, 9, 4)
else:
# Windows Server 2008 R2 SP1 (February 16, 2011)
minTime = datetime.date(2011, 2, 16)
# Generate Year and Day Number # Generate Year and Day Number
randomDate = datetime.date.fromtimestamp(random.randint(time.mktime(minTime.timetuple()), time.mktime(datetime.datetime.now().timetuple()))) randomDate = datetime.date.fromtimestamp(random.randint(time.mktime(minTime.timetuple()), time.mktime(datetime.datetime.now().timetuple())))
firstOfYear = datetime.date(randomDate.year, 1, 1) firstOfYear = datetime.date(randomDate.year, 1, 1)
randomDayNumber = int((time.mktime(randomDate.timetuple()) - time.mktime(firstOfYear.timetuple())) / 86400 + 0.5) randomDayNumber = int((time.mktime(randomDate.timetuple()) - time.mktime(firstOfYear.timetuple())) / 86400 + 0.5)
# generate the epid string # Generate the EPID string
result = [] result = []
result.append(str(hostOsDict["type"]).rjust(5, "0")) result.append(str(PlatformId).rjust(5, "0"))
result.append("-") result.append("-")
result.append(str(keyConfig["GroupID"]).rjust(5, "0")) result.append(str(GroupId).rjust(5, "0"))
result.append("-") result.append("-")
result.append(str(productKeyID // 10**6).rjust(3, "0")) #*2to3* result.append(str(productKeyID // 1000000).rjust(3, "0"))
result.append("-") result.append("-")
result.append(str(productKeyID % 10**6).rjust(6, "0")) result.append(str(productKeyID % 1000000).rjust(6, "0"))
result.append("-") result.append("-")
result.append(str(licenseChannel).rjust(2, "0")) result.append(str(licenseChannel).rjust(2, "0"))
result.append("-") result.append("-")
result.append(str(languageCode)) result.append(str(languageCode))
result.append("-") result.append("-")
result.append(str(hostOsDict["osBuild"]).rjust(4, "0")) result.append(str(BuildNumber).rjust(4, "0"))
result.append(".0000-") result.append(".0000-")
result.append(str(randomDayNumber).rjust(3, "0")) result.append(str(randomDayNumber).rjust(3, "0"))
result.append(str(randomDate.year).rjust(4, "0")) result.append(str(randomDate.year).rjust(4, "0"))
return "".join(result) return "".join(result)

View File

@ -5,9 +5,9 @@ import struct
from kmsBase import kmsBase from kmsBase import kmsBase
class kmsRequestUnknown(kmsBase): class kmsRequestUnknown(kmsBase):
def getResponse(self): def executeRequestLogic(self):
finalResponse = bytearray() finalResponse = bytearray()
finalResponse.extend(bytearray(struct.pack('<I', 0))) finalResponse.extend(bytearray(struct.pack('<I', 0)))
finalResponse.extend(bytearray(struct.pack('<I', 0))) finalResponse.extend(bytearray(struct.pack('<I', 0)))
finalResponse.extend(bytearray(struct.pack('<I', self.errorCodes['SL_E_VL_KEY_MANAGEMENT_SERVICE_ID_MISMATCH']))) finalResponse.extend(bytearray(struct.pack('<I', self.errorCodes['SL_E_VL_KEY_MANAGEMENT_SERVICE_ID_MISMATCH'])))
return finalResponse.decode('utf-8').encode('utf-8') #*2to3* return finalResponse.decode('utf-8').encode('utf-8')

View File

@ -1,7 +1,6 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import binascii import binascii
import struct
import time import time
import logging import logging
@ -10,7 +9,6 @@ from structure import Structure
from aes import AES from aes import AES
from formatText import shell_message, justify, byterize from formatText import shell_message, justify, byterize
# v4 AES Key # v4 AES Key
key = bytearray([0x05, 0x3D, 0x83, 0x07, 0xF9, 0xE5, 0xF0, 0x88, 0xEB, 0x5E, 0xA6, 0x68, 0x6C, 0xF0, 0x37, 0xC7, 0xE4, 0xEF, 0xD2, 0xD6]) key = bytearray([0x05, 0x3D, 0x83, 0x07, 0xF9, 0xE5, 0xF0, 0x88, 0xEB, 0x5E, 0xA6, 0x68, 0x6C, 0xF0, 0x37, 0xC7, 0xE4, 0xEF, 0xD2, 0xD6])
@ -33,9 +31,9 @@ class kmsRequestV4(kmsBase):
class ResponseV4(Structure): class ResponseV4(Structure):
commonHdr = () commonHdr = ()
structure = ( structure = (
('bodyLength1', '<I=len(response) + len(hash)'), ('bodyLength1', '<I'),
('unknown', '!I=0x00000200'), ('unknown', '!I=0x00000200'),
('bodyLength2', '<I=len(response) + len(hash)'), ('bodyLength2', '<I'),
('response', ':', kmsBase.kmsResponseStruct), ('response', ':', kmsBase.kmsResponseStruct),
('hash', '16s'), ('hash', '16s'),
('padding', ':'), ('padding', ':'),
@ -45,13 +43,14 @@ class kmsRequestV4(kmsBase):
requestData = self.RequestV4(self.data) requestData = self.RequestV4(self.data)
response = self.serverLogic(requestData['request']) response = self.serverLogic(requestData['request'])
thehash = self.generateHash(bytearray(str(response).encode('latin-1')))
thehash = self.generateHash(bytearray(str(response).encode('latin-1'))) #*2to3* responseData = self.generateResponse(response, thehash)
self.responseData = self.generateResponse(response, thehash)
time.sleep(1) # request sent back too quick for Windows 2008 R2, slow it down. time.sleep(1) # request sent back too quick for Windows 2008 R2, slow it down.
return responseData
def generateHash(self, message): def generateHash(self, message):
""" """
The KMS v4 hash is a variant of CMAC-AES-128. There are two key differences: The KMS v4 hash is a variant of CMAC-AES-128. There are two key differences:
@ -90,42 +89,40 @@ class kmsRequestV4(kmsBase):
xorBuffer(lastBlock, 0, hashBuffer, 16) xorBuffer(lastBlock, 0, hashBuffer, 16)
hashBuffer = bytearray(aes.encrypt(hashBuffer, key, len(key))) hashBuffer = bytearray(aes.encrypt(hashBuffer, key, len(key)))
return hashBuffer #*2to3* return hashBuffer
def generateResponse(self, responseBuffer, thehash): def generateResponse(self, responseBuffer, thehash):
bodyLength = len(responseBuffer) + len(thehash)
response = self.ResponseV4() response = self.ResponseV4()
bodyLength = len(responseBuffer) + len(thehash)
response['bodyLength1'] = bodyLength
response['bodyLength2'] = bodyLength
response['response'] = responseBuffer response['response'] = responseBuffer
response['hash'] = thehash.decode('latin-1') #*2to3* response['hash'] = thehash.decode('latin-1')
response['padding'] = self.getResponsePadding(bodyLength).decode('latin-1') #*2to3* response['padding'] = bytearray(self.getPadding(bodyLength)).decode('latin-1')
## Debug stuff. ## Debug stuff.
shell_message(nshell = 16) shell_message(nshell = 16)
response = byterize(response) response = byterize(response)
logging.debug("KMS V4 Response: \n%s\n" % justify(response.dump(print_to_stdout = False))) logging.debug("KMS V4 Response: \n%s\n" % justify(response.dump(print_to_stdout = False)))
logging.debug("KMS V4 Response Bytes: \n%s\n" % justify(binascii.b2a_hex(str(response).encode('latin-1')).decode('utf-8'))) #*2to3* logging.debug("KMS V4 Response Bytes: \n%s\n" % justify(binascii.b2a_hex(str(response).encode('latin-1')).decode('utf-8')))
return str(response) return str(response)
def getResponse(self):
return self.responseData
def generateRequest(self, requestBase): def generateRequest(self, requestBase):
thehash = self.generateHash(bytearray(str(requestBase).encode('latin-1'))) #*2to3* thehash = self.generateHash(bytearray(str(requestBase).encode('latin-1')))
bodyLength = len(requestBase) + len(thehash)
request = kmsRequestV4.RequestV4() request = kmsRequestV4.RequestV4()
bodyLength = len(requestBase) + len(thehash)
request['bodyLength1'] = bodyLength request['bodyLength1'] = bodyLength
request['bodyLength2'] = bodyLength request['bodyLength2'] = bodyLength
request['request'] = requestBase request['request'] = requestBase
request['hash'] = thehash.decode('latin-1') #*2to3* request['hash'] = thehash.decode('latin-1')
request['padding'] = self.getResponsePadding(bodyLength).decode('latin-1') #*2to3* request['padding'] = bytearray(self.getPadding(bodyLength)).decode('latin-1')
## Debug stuff. ## Debug stuff.
shell_message(nshell = 10) shell_message(nshell = 10)
request = byterize(request) request = byterize(request)
logging.debug("Request V4 Data: \n%s\n" % justify(request.dump(print_to_stdout = False))) logging.debug("Request V4 Data: \n%s\n" % justify(request.dump(print_to_stdout = False)))
logging.debug("Request V4: \n%s\n" % justify(binascii.b2a_hex(str(request).encode('latin-1')).decode('utf-8'))) #*2to3* logging.debug("Request V4: \n%s\n" % justify(binascii.b2a_hex(str(request).encode('latin-1')).decode('utf-8')))
return request return request

View File

@ -4,11 +4,10 @@ import logging
import binascii import binascii
import hashlib import hashlib
import random import random
import struct
import aes
from kmsBase import kmsBase from kmsBase import kmsBase
from structure import Structure from structure import Structure
import aes
from formatText import justify, shell_message, byterize from formatText import justify, shell_message, byterize
class kmsRequestV5(kmsBase): class kmsRequestV5(kmsBase):
@ -17,7 +16,7 @@ class kmsRequestV5(kmsBase):
commonHdr = () commonHdr = ()
structure = ( structure = (
('salt', '16s'), ('salt', '16s'),
('encrypted', '236s'), #kmsBase.kmsRequestStruct ('encrypted', '240s'), #kmsBase.kmsRequestStruct
('padding', ':'), ('padding', ':'),
) )
@ -40,9 +39,9 @@ class kmsRequestV5(kmsBase):
class ResponseV5(Structure): class ResponseV5(Structure):
commonHdr = () commonHdr = ()
structure = ( structure = (
('bodyLength1', '<I=2 + 2 + len(salt) + len(encrypted)'), ('bodyLength1', '<I'),
('unknown', '!I=0x00000200'), ('unknown', '!I=0x00000200'),
('bodyLength2', '<I=2 + 2 + len(salt) + len(encrypted)'), ('bodyLength2', '<I'),
('versionMinor', '<H'), ('versionMinor', '<H'),
('versionMajor', '<H'), ('versionMajor', '<H'),
('salt', '16s'), ('salt', '16s'),
@ -65,106 +64,104 @@ class kmsRequestV5(kmsBase):
ver = 5 ver = 5
def executeRequestLogic(self): def executeRequestLogic(self):
self.requestData = self.RequestV5(self.data) requestData = self.RequestV5(self.data)
decrypted = self.decryptRequest(self.requestData) decrypted = self.decryptRequest(requestData)
responseBuffer = self.serverLogic(decrypted['request']) responseBuffer = self.serverLogic(decrypted['request'])
iv, encrypted = self.encryptResponse(self.requestData, decrypted, responseBuffer) iv, encrypted = self.encryptResponse(requestData, decrypted, responseBuffer)
self.responseData = self.generateResponse(iv, encrypted) responseData = self.generateResponse(iv, encrypted, requestData)
return responseData
def decryptRequest(self, request): def decryptRequest(self, request):
encrypted = bytearray(str(request['message']).encode('latin-1')) #*2to3* encrypted = bytearray(str(request['message']).encode('latin-1'))
iv = bytearray(request['message']['salt'].encode('latin-1')) #*2to3* iv = bytearray(request['message']['salt'].encode('latin-1'))
moo = aes.AESModeOfOperation() moo = aes.AESModeOfOperation()
moo.aes.v6 = self.v6 moo.aes.v6 = self.v6
decrypted = moo.decrypt(encrypted, 256, moo.ModeOfOperation["CBC"], self.key, moo.aes.KeySize["SIZE_128"], iv) #*2to3* decrypted = moo.decrypt(encrypted, 256, moo.ModeOfOperation["CBC"], self.key, moo.aes.KeySize["SIZE_128"], iv) #*2to3*
decrypted = aes.strip_PKCS7_padding(decrypted) decrypted = aes.strip_PKCS7_padding(decrypted)
decrypted = bytes(decrypted) #*2to3* decrypted = bytes(decrypted)
return self.DecryptedRequest(decrypted) return self.DecryptedRequest(decrypted)
def encryptResponse(self, request, decrypted, response): def encryptResponse(self, request, decrypted, response):
randomSalt = self.getRandomSalt() randomSalt = self.getRandomSalt()
sha256 = hashlib.sha256() result = hashlib.sha256(randomSalt).digest()
sha256.update(randomSalt) #*2to3* iv = bytearray(request['message']['salt'].encode('latin-1'))
result = sha256.digest()
iv = bytearray(request['message']['salt'].encode('latin-1')) #*2to3*
randomStuff = bytearray(16) randomStuff = bytearray(16)
for i in range(0,16): for i in range(0,16):
randomStuff[i] = (bytearray(decrypted['salt'].encode('latin-1'))[i] ^ iv[i] ^ randomSalt[i]) & 0xff #*2to3* randomStuff[i] = (bytearray(decrypted['salt'].encode('latin-1'))[i] ^ iv[i] ^ randomSalt[i]) & 0xff
responsedata = self.DecryptedResponse() responsedata = self.DecryptedResponse()
responsedata['response'] = response responsedata['response'] = response
responsedata['keys'] = randomStuff #*2to3* responsedata['keys'] = randomStuff
responsedata['hash'] = result responsedata['hash'] = result
padded = aes.append_PKCS7_padding(str(responsedata).encode('latin-1')) #*2to3* padded = aes.append_PKCS7_padding(str(responsedata).encode('latin-1'))
moo = aes.AESModeOfOperation() moo = aes.AESModeOfOperation()
moo.aes.v6 = self.v6 moo.aes.v6 = self.v6
mode, orig_len, crypted = moo.encrypt(padded, moo.ModeOfOperation["CBC"], self.key, moo.aes.KeySize["SIZE_128"], iv) #*2to3* mode, orig_len, crypted = moo.encrypt(padded, moo.ModeOfOperation["CBC"], self.key, moo.aes.KeySize["SIZE_128"], iv)
return iv.decode('latin-1').encode('latin-1'), crypted #*2to3*
return iv.decode('latin-1').encode('latin-1'), crypted
def decryptResponse(self, response): def decryptResponse(self, response):
paddingLength = response['bodyLength1'] % 8 paddingLength = self.getPadding(response['bodyLength1'])
iv = bytearray(response['salt'].encode('latin-1')) #*2to3*
encrypted = bytearray(response['encrypted'][:-paddingLength].encode('latin-1')) #*2to3* iv = bytearray(response['salt'].encode('latin-1'))
encrypted = bytearray(response['encrypted'][:-paddingLength].encode('latin-1'))
moo = aes.AESModeOfOperation() moo = aes.AESModeOfOperation()
moo.aes.v6 = self.v6 moo.aes.v6 = self.v6
decrypted = moo.decrypt(encrypted, 256, moo.ModeOfOperation["CBC"], self.key, moo.aes.KeySize["SIZE_128"], iv) #*2to3* decrypted = moo.decrypt(encrypted, 256, moo.ModeOfOperation["CBC"], self.key, moo.aes.KeySize["SIZE_128"], iv)
decrypted = aes.strip_PKCS7_padding(decrypted) decrypted = aes.strip_PKCS7_padding(decrypted)
decrypted = bytes(decrypted) #*2to3* decrypted = bytes(decrypted)
return self.DecryptedResponse(decrypted) return self.DecryptedResponse(decrypted)
def getRandomSalt(self): def getRandomSalt(self):
return bytearray(random.getrandbits(8) for i in range(16)) return bytearray(random.getrandbits(8) for i in range(16))
def generateResponse(self, iv, encryptedResponse): def generateResponse(self, iv, encryptedResponse, requestData):
bodyLength = 4 + len(iv) + len(encryptedResponse)
response = self.ResponseV5() response = self.ResponseV5()
response['versionMinor'] = self.requestData['versionMinor'] bodyLength = 2 + 2 + len(iv) + len(encryptedResponse)
response['versionMajor'] = self.requestData['versionMajor'] response['bodyLength1'] = bodyLength
response['bodyLength2'] = bodyLength
response['versionMinor'] = requestData['versionMinor']
response['versionMajor'] = requestData['versionMajor']
response['salt'] = iv response['salt'] = iv
response['encrypted'] = bytes(encryptedResponse) #*2to3* response['encrypted'] = bytes(encryptedResponse)
response['padding'] = self.getResponsePadding(bodyLength).decode('latin-1').encode('latin-1') #*2to3* response['padding'] = bytearray(self.getPadding(bodyLength)).decode('latin-1').encode('latin-1')
shell_message(nshell = 16) shell_message(nshell = 16)
response = byterize(response) response = byterize(response)
logging.info("KMS V%d Response: \n%s\n" % (self.ver, justify(response.dump(print_to_stdout = False)))) logging.info("KMS V%d Response: \n%s\n" % (self.ver, justify(response.dump(print_to_stdout = False))))
logging.info("KMS V%d Structure Bytes: \n%s\n" % (self.ver, justify(binascii.b2a_hex(str(response).encode('latin-1')).decode('utf-8')))) #*2to3* logging.info("KMS V%d Structure Bytes: \n%s\n" % (self.ver, justify(binascii.b2a_hex(str(response).encode('latin-1')).decode('utf-8'))))
return str(response) return str(response)
def getResponse(self):
return self.responseData
def generateRequest(self, requestBase): def generateRequest(self, requestBase):
esalt = self.getRandomSalt() esalt = self.getRandomSalt()
moo = aes.AESModeOfOperation() moo = aes.AESModeOfOperation()
moo.aes.v6 = self.v6 moo.aes.v6 = self.v6
dsalt = moo.decrypt(esalt, 16, moo.ModeOfOperation["CBC"], self.key, moo.aes.KeySize["SIZE_128"], esalt) #*2to3* dsalt = moo.decrypt(esalt, 16, moo.ModeOfOperation["CBC"], self.key, moo.aes.KeySize["SIZE_128"], esalt)
dsalt = bytearray(dsalt) dsalt = bytearray(dsalt)
decrypted = self.DecryptedRequest() decrypted = self.DecryptedRequest()
decrypted['salt'] = dsalt #*2to3* decrypted['salt'] = dsalt
decrypted['request'] = requestBase decrypted['request'] = requestBase
padded = aes.append_PKCS7_padding(str(decrypted).encode('latin-1')) #*2to3* padded = aes.append_PKCS7_padding(str(decrypted).encode('latin-1'))
mode, orig_len, crypted = moo.encrypt(padded, moo.ModeOfOperation["CBC"], self.key, moo.aes.KeySize["SIZE_128"], esalt) #*2to3* mode, orig_len, crypted = moo.encrypt(padded, moo.ModeOfOperation["CBC"], self.key, moo.aes.KeySize["SIZE_128"], esalt)
message = self.RequestV5.Message(bytes(crypted)) #*2to3* message = self.RequestV5.Message(bytes(crypted))
bodyLength = len(message) + 2 + 2
request = self.RequestV5() request = self.RequestV5()
bodyLength = 2 + 2 + len(message)
request['bodyLength1'] = bodyLength request['bodyLength1'] = bodyLength
request['bodyLength2'] = bodyLength request['bodyLength2'] = bodyLength
request['versionMinor'] = requestBase['versionMinor'] request['versionMinor'] = requestBase['versionMinor']
@ -174,6 +171,6 @@ class kmsRequestV5(kmsBase):
shell_message(nshell = 10) shell_message(nshell = 10)
request = byterize(request) request = byterize(request)
logging.info("Request V%d Data: \n%s\n" % (self.ver, justify(request.dump(print_to_stdout = False)))) logging.info("Request V%d Data: \n%s\n" % (self.ver, justify(request.dump(print_to_stdout = False))))
logging.info("Request V%d: \n%s\n" % (self.ver, justify(binascii.b2a_hex(str(request).encode('latin-1')).decode('utf-8')))) #*2to3* logging.info("Request V%d: \n%s\n" % (self.ver, justify(binascii.b2a_hex(str(request).encode('latin-1')).decode('utf-8'))))
return request return request

View File

@ -1,9 +1,7 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import binascii
import hashlib import hashlib
import hmac import hmac
import random
import struct import struct
import aes import aes
@ -37,13 +35,10 @@ class kmsRequestV6(kmsRequestV5):
def encryptResponse(self, request, decrypted, response): def encryptResponse(self, request, decrypted, response):
randomSalt = self.getRandomSalt() randomSalt = self.getRandomSalt()
result = hashlib.sha256(randomSalt).digest()
sha256 = hashlib.sha256() SaltC = bytearray(request['message']['salt'].encode('latin-1'))
sha256.update(randomSalt) #*2to3* DSaltC = bytearray(decrypted['salt'].encode('latin-1'))
result = sha256.digest()
SaltC = bytearray(request['message']['salt'].encode('latin-1')) #*2to3*
DSaltC = bytearray(decrypted['salt'].encode('latin-1')) #*2to3*
randomStuff = bytearray(16) randomStuff = bytearray(16)
for i in range(0,16): for i in range(0,16):
@ -56,9 +51,9 @@ class kmsRequestV6(kmsRequestV5):
message = self.DecryptedResponse.Message() message = self.DecryptedResponse.Message()
message['response'] = response message['response'] = response
message['keys'] = randomStuff #*2to3* message['keys'] = randomStuff
message['hash'] = result message['hash'] = result
message['xorSalts'] = XorSalts #*2to3* message['xorSalts'] = XorSalts
message['hwid'] = self.config['hwid'] message['hwid'] = self.config['hwid']
# SaltS # SaltS
@ -66,7 +61,7 @@ class kmsRequestV6(kmsRequestV5):
moo = aes.AESModeOfOperation() moo = aes.AESModeOfOperation()
moo.aes.v6 = True moo.aes.v6 = True
decry = moo.decrypt(SaltS, 16, moo.ModeOfOperation["CBC"], self.key, moo.aes.KeySize["SIZE_128"], SaltS) #*2to3* decry = moo.decrypt(SaltS, 16, moo.ModeOfOperation["CBC"], self.key, moo.aes.KeySize["SIZE_128"], SaltS)
# DSaltS # DSaltS
DSaltS = bytearray(decry) DSaltS = bytearray(decry)
@ -75,22 +70,22 @@ class kmsRequestV6(kmsRequestV5):
HMacMsg = bytearray(16) HMacMsg = bytearray(16)
for i in range(0,16): for i in range(0,16):
HMacMsg[i] = (SaltS[i] ^ DSaltS[i]) & 0xff HMacMsg[i] = (SaltS[i] ^ DSaltS[i]) & 0xff
HMacMsg.extend(str(message).encode('latin-1')) #*2to3* HMacMsg.extend(str(message).encode('latin-1'))
# HMacKey # HMacKey
requestTime = decrypted['request']['requestTime'] requestTime = decrypted['request']['requestTime']
HMacKey = self.getMACKey(requestTime) HMacKey = self.getMACKey(requestTime)
HMac = hmac.new(HMacKey, HMacMsg, hashlib.sha256) #*2to3* HMac = hmac.new(HMacKey, HMacMsg, hashlib.sha256)
digest = HMac.digest() digest = HMac.digest()
responsedata = self.DecryptedResponse() responsedata = self.DecryptedResponse()
responsedata['message'] = message responsedata['message'] = message
responsedata['hmac'] = digest[16:] responsedata['hmac'] = digest[16:]
padded = aes.append_PKCS7_padding(str(responsedata).encode('latin-1')) #*2to3* padded = aes.append_PKCS7_padding(str(responsedata).encode('latin-1'))
mode, orig_len, crypted = moo.encrypt(padded, moo.ModeOfOperation["CBC"], self.key, moo.aes.KeySize["SIZE_128"], SaltS) #*2to3* mode, orig_len, crypted = moo.encrypt(padded, moo.ModeOfOperation["CBC"], self.key, moo.aes.KeySize["SIZE_128"], SaltS)
return SaltS.decode('latin-1').encode('latin-1'), crypted #*2to3* return SaltS.decode('latin-1').encode('latin-1'), crypted
def getMACKey(self, t): def getMACKey(self, t):
@ -98,7 +93,7 @@ class kmsRequestV6(kmsRequestV5):
c2 = 0x000000208CBAB5ED c2 = 0x000000208CBAB5ED
c3 = 0x3156CD5AC628477A c3 = 0x3156CD5AC628477A
i1 = (t // c1) & 0xFFFFFFFFFFFFFFFF #*2to3* i1 = (t // c1) & 0xFFFFFFFFFFFFFFFF
i2 = (i1 * c2) & 0xFFFFFFFFFFFFFFFF i2 = (i1 * c2) & 0xFFFFFFFFFFFFFFFF
seed = (i2 + c3) & 0xFFFFFFFFFFFFFFFF seed = (i2 + c3) & 0xFFFFFFFFFFFFFFFF

View File

@ -1,8 +1,5 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import struct
import uuid
class rpcBase: class rpcBase:
packetType = { packetType = {
'request': 0, 'request': 0,
@ -42,21 +39,7 @@ class rpcBase:
self.config = config self.config = config
def populate(self): def populate(self):
self.requestData = self.parseRequest() return self.generateResponse(self.parseRequest())
self.responseData = self.generateResponse()
return self
def getConfig(self):
return self.config
def getOptions(self):
return self.config
def getData(self):
return self.data
def parseRequest(self): def parseRequest(self):
return {} return {}
def getResponse(self):
return self.responseData

View File

@ -2,7 +2,6 @@
import logging import logging
import binascii import binascii
import struct
import uuid import uuid
import rpcBase import rpcBase
@ -10,7 +9,6 @@ from dcerpc import MSRPCHeader, MSRPCBindAck
from structure import Structure from structure import Structure
from formatText import shell_message, justify, byterize from formatText import shell_message, justify, byterize
uuidNDR32 = uuid.UUID('8a885d04-1ceb-11c9-9fe8-08002b104860') uuidNDR32 = uuid.UUID('8a885d04-1ceb-11c9-9fe8-08002b104860')
uuidNDR64 = uuid.UUID('71710533-beba-4937-8319-b5dbef9ccc36') uuidNDR64 = uuid.UUID('71710533-beba-4937-8319-b5dbef9ccc36')
uuidTime = uuid.UUID('6cb71c2c-9812-4540-0300-000000000000') uuidTime = uuid.UUID('6cb71c2c-9812-4540-0300-000000000000')
@ -28,7 +26,7 @@ class CtxItem(Structure):
) )
def ts(self): def ts(self):
return uuid.UUID(bytes_le=self['TransferSyntaxUUID'].encode('latin-1')) #*2to3* return uuid.UUID(bytes_le=self['TransferSyntaxUUID'].encode('latin-1'))
class CtxItemResult(Structure): class CtxItemResult(Structure):
structure = ( structure = (
@ -75,7 +73,6 @@ class MSRPCBind(Structure):
class handler(rpcBase.rpcBase): class handler(rpcBase.rpcBase):
def parseRequest(self): def parseRequest(self):
request = MSRPCHeader(self.data) request = MSRPCHeader(self.data)
shell_message(nshell = 3) shell_message(nshell = 3)
request = byterize(request) request = byterize(request)
logging.debug("RPC Bind Request Bytes: \n%s\n" % justify(binascii.b2a_hex(self.data).decode('utf-8'))) logging.debug("RPC Bind Request Bytes: \n%s\n" % justify(binascii.b2a_hex(self.data).decode('utf-8')))
@ -84,9 +81,9 @@ class handler(rpcBase.rpcBase):
return request return request
def generateResponse(self): def generateResponse(self, request):
response = MSRPCBindAck() response = MSRPCBindAck()
request = self.requestData
bind = MSRPCBind(request['pduData']) bind = MSRPCBind(request['pduData'])
response['ver_major'] = request['ver_major'] response['ver_major'] = request['ver_major']
@ -123,7 +120,7 @@ class handler(rpcBase.rpcBase):
shell_message(nshell = 4) shell_message(nshell = 4)
response = byterize(response) response = byterize(response)
logging.debug("RPC Bind Response: \n%s\n" % justify(response.dump(print_to_stdout = False))) logging.debug("RPC Bind Response: \n%s\n" % justify(response.dump(print_to_stdout = False)))
logging.debug("RPC Bind Response Bytes: \n%s\n" % justify(binascii.b2a_hex(str(response).encode('latin-1')).decode('utf-8'))) #*2to3* logging.debug("RPC Bind Response Bytes: \n%s\n" % justify(binascii.b2a_hex(str(response).encode('latin-1')).decode('utf-8')))
return response return response
@ -151,7 +148,7 @@ class handler(rpcBase.rpcBase):
bind['max_rfrag'] = 5840 bind['max_rfrag'] = 5840
bind['assoc_group'] = 0 bind['assoc_group'] = 0
bind['ctx_num'] = 2 bind['ctx_num'] = 2
bind['ctx_items'] = str(bind.CtxItemArray(str(firstCtxItem) + str(secondCtxItem))) #*2to3* bind['ctx_items'] = str(bind.CtxItemArray(str(firstCtxItem) + str(secondCtxItem)))
request = MSRPCHeader() request = MSRPCHeader()
request['ver_major'] = 5 request['ver_major'] = 5
@ -166,10 +163,9 @@ class handler(rpcBase.rpcBase):
request = byterize(request) request = byterize(request)
logging.debug("RPC Bind Request: \n%s\n%s\n" % (justify(request.dump(print_to_stdout = False)), logging.debug("RPC Bind Request: \n%s\n%s\n" % (justify(request.dump(print_to_stdout = False)),
justify(MSRPCBind(request['pduData']).dump(print_to_stdout = False)))) justify(MSRPCBind(request['pduData']).dump(print_to_stdout = False))))
logging.debug("RPC Bind Request Bytes: \n%s\n" % justify(binascii.b2a_hex(str(request).encode('latin-1')).decode('utf-8'))) #*2to3* logging.debug("RPC Bind Request Bytes: \n%s\n" % justify(binascii.b2a_hex(str(request).encode('latin-1')).decode('utf-8')))
return request return request
def parseResponse(self): def parseResponse(self):
return response return response

View File

@ -2,19 +2,15 @@
import binascii import binascii
import logging import logging
import struct
import uuid
from dcerpc import MSRPCRequestHeader, MSRPCRespHeader from dcerpc import MSRPCRequestHeader, MSRPCRespHeader
import kmsBase import kmsBase
import rpcBase import rpcBase
from formatText import justify, shell_message, byterize from formatText import justify, shell_message, byterize
class handler(rpcBase.rpcBase): class handler(rpcBase.rpcBase):
def parseRequest(self): def parseRequest(self):
request = MSRPCRequestHeader(self.data) request = MSRPCRequestHeader(self.data)
shell_message(nshell = 14) shell_message(nshell = 14)
request = byterize(request) request = byterize(request)
logging.debug("RPC Message Request Bytes: \n%s\n" % justify(binascii.b2a_hex(self.data).decode('utf-8'))) logging.debug("RPC Message Request Bytes: \n%s\n" % justify(binascii.b2a_hex(self.data).decode('utf-8')))
@ -22,9 +18,7 @@ class handler(rpcBase.rpcBase):
return request return request
def generateResponse(self): def generateResponse(self, request):
request = self.requestData
responseData = kmsBase.generateKmsResponseData(request['pduData'], self.config) responseData = kmsBase.generateKmsResponseData(request['pduData'], self.config)
envelopeLength = len(responseData) envelopeLength = len(responseData)
@ -45,7 +39,7 @@ class handler(rpcBase.rpcBase):
shell_message(nshell = 17) shell_message(nshell = 17)
response = byterize(response) response = byterize(response)
logging.debug("RPC Message Response: \n%s\n" % justify(response.dump(print_to_stdout = False))) logging.debug("RPC Message Response: \n%s\n" % justify(response.dump(print_to_stdout = False)))
logging.debug("RPC Message Response Bytes: \n%s\n" % justify(binascii.b2a_hex(str(response).encode('latin-1')).decode('utf-8'))) #*2to3* logging.debug("RPC Message Response Bytes: \n%s\n" % justify(binascii.b2a_hex(str(response).encode('latin-1')).decode('utf-8')))
return response return response
@ -64,7 +58,7 @@ class handler(rpcBase.rpcBase):
shell_message(nshell = 11) shell_message(nshell = 11)
request = byterize(request) request = byterize(request)
logging.debug("RPC Message Request: \n%s\n" % justify(request.dump(print_to_stdout = False))) logging.debug("RPC Message Request: \n%s\n" % justify(request.dump(print_to_stdout = False)))
logging.debug("RPC Message Request Bytes: \n%s\n" % justify(binascii.b2a_hex(str(request).encode('latin-1')).decode('utf-8'))) #*2to3* logging.debug("RPC Message Request Bytes: \n%s\n" % justify(binascii.b2a_hex(str(request).encode('latin-1')).decode('utf-8')))
return request return request

View File

@ -2,15 +2,14 @@
import argparse import argparse
import binascii import binascii
import hashlib
import random
import re import re
import sys
import socket import socket
import socketserver import socketserver
import struct
import uuid import uuid
import logging import logging
import os import os
import errno
import rpcBind, rpcRequest import rpcBind, rpcRequest
from dcerpc import MSRPCHeader from dcerpc import MSRPCHeader
@ -19,8 +18,30 @@ from formatText import shell_message
config = {} config = {}
# Valid language identifiers to be used in the EPID (see "kms.c" in vlmcsd)
ValidLcid = [1025, 1026, 1027, 1028, 1029,
1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039,
1040, 1041, 1042, 1043, 1044, 1045, 1046, 1048, 1049,
1050, 1051, 1052, 1053, 1054, 1056, 1057, 1058, 1059,
1060, 1061, 1062, 1063, 1065, 1066, 1067, 1068, 1069,
1071, 1074, 1076, 1077, 1078, 1079,
1080, 1081, 1082, 1083, 1086, 1087, 1088, 1089,
1091, 1092, 1093, 1094, 1095, 1097, 1098, 1099,
1100, 1102, 1103, 1104, 1106, 1110, 1111, 1114, 1125, 1131, 1153,
2049, 2052, 2055, 2057, 2058, 2060, 2064, 2067, 2068, 2070, 2074, 2077, 2092, 2107, 2110, 2115, 2155,
3073, 3076, 3079, 3081, 3082, 3084, 3098, 3131, 3179,
4097, 4100, 4103, 4105, 4106, 4108, 4122, 4155,
5121, 5124, 5127, 5129, 5130, 5132, 5146, 5179,
6145, 6153, 6154, 6156, 6170, 6203,
7169, 7177, 7178, 7194, 7227,
8193, 8201, 8202, 8251,
9217, 9225, 9226, 9275,
10241, 10249, 10250, 11265, 11273, 11274, 12289, 12297, 12298,
13313, 13321, 13322, 14337, 14346, 15361, 15370, 16385, 16394, 17418, 18442, 19466, 20490]
def main(): def main():
parser = argparse.ArgumentParser(description='py3-kms: KMS Server Emulator written in Python3', epilog="version: py3-kms_2018-03-01") parser = argparse.ArgumentParser(description='py3-kms: KMS Server Emulator written in Python3', epilog="version: py3-kms_2018-11-15")
parser.add_argument("ip", nargs="?", action="store", default="0.0.0.0", parser.add_argument("ip", nargs="?", action="store", default="0.0.0.0",
help='The IP address to listen on. The default is \"0.0.0.0\" (all interfaces).', type=str) help='The IP address to listen on. The default is \"0.0.0.0\" (all interfaces).', type=str)
parser.add_argument("port", nargs="?", action="store", default=1688, parser.add_argument("port", nargs="?", action="store", default=1688,
@ -28,10 +49,10 @@ def main():
parser.add_argument("-e", "--epid", dest="epid", default=None, parser.add_argument("-e", "--epid", dest="epid", default=None,
help='Use this flag to manually specify an ePID to use. If no ePID is specified, a random ePID will be generated.', type=str) help='Use this flag to manually specify an ePID to use. If no ePID is specified, a random ePID will be generated.', type=str)
parser.add_argument("-l", "--lcid", dest="lcid", default=1033, parser.add_argument("-l", "--lcid", dest="lcid", default=1033,
help='Use this flag to manually specify an LCID for use with randomly generated ePIDs. If an ePID is manually specified,\ help='Use this flag to manually specify an LCID for use with randomly generated ePIDs. Default is 1033 (en-us)', type=int)
this setting is ignored.', type=int)
parser.add_argument("-c", "--client-count", dest="CurrentClientCount", default=26, parser.add_argument("-c", "--client-count", dest="CurrentClientCount", default=26,
help='Use this flag to specify the current client count. Default is 26. A number >25 is required to enable activation.', type=int) help='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', type=int)
parser.add_argument("-a", "--activation-interval", dest="VLActivationInterval", default=120, parser.add_argument("-a", "--activation-interval", dest="VLActivationInterval", default=120,
help='Use this flag to specify the activation interval (in minutes). Default is 120 minutes (2 hours).', type=int) help='Use this flag to specify the activation interval (in minutes). Default is 120 minutes (2 hours).', type=int)
parser.add_argument("-r", "--renewal-interval", dest="VLRenewalInterval", default=1440 * 7, parser.add_argument("-r", "--renewal-interval", dest="VLRenewalInterval", default=1440 * 7,
@ -47,6 +68,9 @@ The default is \"364F463A8863D35F\" or type \"random\" to auto generate the HWID
help='Use this flag to set an output Logfile. The default is \"pykms_server.log\".', type=str) help='Use this flag to set an output Logfile. The default is \"pykms_server.log\".', type=str)
config.update(vars(parser.parse_args())) config.update(vars(parser.parse_args()))
logging.basicConfig(level=config['loglevel'], format='%(asctime)s %(levelname)-8s %(message)s',
datefmt='%a, %d %b %Y %H:%M:%S', filename=config['logfile'], filemode='w')
# Random HWID. # Random HWID.
if config['hwid'] == "random": if config['hwid'] == "random":
randomhwid = uuid.uuid4().hex randomhwid = uuid.uuid4().hex
@ -56,24 +80,40 @@ The default is \"364F463A8863D35F\" or type \"random\" to auto generate the HWID
try: try:
config['hwid'] = binascii.a2b_hex(re.sub(r'[^0-9a-fA-F]', '', config['hwid'].strip('0x'))) config['hwid'] = binascii.a2b_hex(re.sub(r'[^0-9a-fA-F]', '', config['hwid'].strip('0x')))
if len(binascii.b2a_hex(config['hwid'])) < 16: if len(binascii.b2a_hex(config['hwid'])) < 16:
logging.error("HWID \"%s\" is invalid. Hex string is too short." % binascii.b2a_hex(config['hwid']).decode('utf-8').upper()) logging.error("Error: HWID \"%s\" is invalid. Hex string is too short." % binascii.b2a_hex(config['hwid']).decode('utf-8').upper())
return return
elif len(binascii.b2a_hex(config['hwid'])) > 16: elif len(binascii.b2a_hex(config['hwid'])) > 16:
logging.error("HWID \"%s\" is invalid. Hex string is too long." % binascii.b2a_hex(config['hwid']).decode('utf-8').upper()) logging.error("Error: HWID \"%s\" is invalid. Hex string is too long." % binascii.b2a_hex(config['hwid']).decode('utf-8').upper())
return return
except TypeError: except TypeError:
logging.error("HWID \"%s\" is invalid. Odd-length hex string." % binascii.b2a_hex(config['hwid']).decode('utf-8').upper()) logging.error("Error: HWID \"%s\" is invalid. Odd-length hex string." % binascii.b2a_hex(config['hwid']).decode('utf-8').upper())
return return
logging.basicConfig(level=config['loglevel'], format='%(asctime)s %(levelname)-8s %(message)s', # Check LCID.
datefmt='%a, %d %b %Y %H:%M:%S', filename=config['logfile'], filemode='w') # http://stackoverflow.com/questions/3425294/how-to-detect-the-os-default-language-in-python
if not config['lcid'] or (config['lcid'] not in ValidLcid):
if hasattr(sys, 'implementation') and sys.implementation.name == 'cpython':
config['lcid'] = 1033
elif os.name == 'nt':
import ctypes
config['lcid'] = ctypes.windll.kernel32.GetUserDefaultUILanguage() # TODO: or GetSystemDefaultUILanguage?
else:
import locale
try:
config['lcid'] = next(k for k, v in locale.windows_locale.items() if v == locale.getdefaultlocale()[0])
except StopIteration:
config['lcid'] = 1033
try: try:
import sqlite3 import sqlite3
config['dbSupport'] = True
except: except:
logging.warning("Module \"sqlite3\" is not installed, database support disabled.") logging.warning("Module \"sqlite3\" is not installed, database support disabled.")
config['dbSupport'] = False config['dbSupport'] = False
else:
config['dbSupport'] = True
server = socketserver.TCPServer((config['ip'], config['port']), kmsServer) server = socketserver.TCPServer((config['ip'], config['port']), kmsServer)
server.timeout = 5 server.timeout = 5
logging.info("TCP server listening at %s on port %d." % (config['ip'], config['port'])) logging.info("TCP server listening at %s on port %d." % (config['ip'], config['port']))
@ -83,16 +123,15 @@ The default is \"364F463A8863D35F\" or type \"random\" to auto generate the HWID
class kmsServer(socketserver.BaseRequestHandler): class kmsServer(socketserver.BaseRequestHandler):
def setup(self): def setup(self):
self.connection = self.request
logging.info("Connection accepted: %s:%d" % (self.client_address[0], self.client_address[1])) logging.info("Connection accepted: %s:%d" % (self.client_address[0], self.client_address[1]))
def handle(self): def handle(self):
while True: while True:
# self.request is the TCP socket connected to the client # self.request is the TCP socket connected to the client
try: try:
self.data = self.connection.recv(1024) self.data = self.request.recv(1024)
except socket.error as e: #*2to3* except socket.error as e:
if e[0] == 104: if e.errno == errno.ECONNRESET:
logging.error("Connection reset by peer.") logging.error("Connection reset by peer.")
break break
else: else:
@ -100,8 +139,8 @@ class kmsServer(socketserver.BaseRequestHandler):
if self.data == '' or not self.data: if self.data == '' or not self.data:
logging.warning("No data received !") logging.warning("No data received !")
break break
# self.data = bytearray(self.data.strip()) # data = bytearray(self.data.strip())
# logging.debug(binascii.b2a_hex(str(self.data))) # logging.debug(binascii.b2a_hex(str(data)))
packetType = MSRPCHeader(self.data)['type'] packetType = MSRPCHeader(self.data)['type']
if packetType == rpcBase.packetType['bindReq']: if packetType == rpcBase.packetType['bindReq']:
logging.info("RPC bind request received.") logging.info("RPC bind request received.")
@ -112,12 +151,11 @@ class kmsServer(socketserver.BaseRequestHandler):
shell_message(nshell = [-2, 13]) shell_message(nshell = [-2, 13])
handler = rpcRequest.handler(self.data, config) handler = rpcRequest.handler(self.data, config)
else: else:
logging.error("Invalid RPC request type ", packetType) logging.error("Error: Invalid RPC request type ", packetType)
break break
handler.populate() res = str(handler.populate()).encode('latin-1')
res = str(handler.getResponse()).encode('latin-1') #*2to3* self.request.send(res)
self.connection.send(res)
if packetType == rpcBase.packetType['bindReq']: if packetType == rpcBase.packetType['bindReq']:
logging.info("RPC bind acknowledged.") logging.info("RPC bind acknowledged.")
@ -128,7 +166,7 @@ class kmsServer(socketserver.BaseRequestHandler):
break break
def finish(self): def finish(self):
self.connection.close() self.request.close()
logging.info("Connection closed: %s:%d" % (self.client_address[0], self.client_address[1])) logging.info("Connection closed: %s:%d" % (self.client_address[0], self.client_address[1]))
if __name__ == "__main__": if __name__ == "__main__":

View File

@ -6,9 +6,9 @@
# of the Apache Software License. See the accompanying LICENSE file # of the Apache Software License. See the accompanying LICENSE file
# for more information. # for more information.
# #
""" Version of https://github.com/CoreSecurity/impacket/blob/python3/impacket/structure.py """
Stripped down version of: https://github.com/CoreSecurity/impacket/blob/python3/impacket/structure.py
with modifications in the function dump(...). with modifications in the function dump(...).
© Copyright 2018 Matteo an <SystemRage@protonmail.com>
""" """
from struct import pack, unpack, calcsize from struct import pack, unpack, calcsize
@ -34,7 +34,6 @@ else:
else: else:
return x return x
class Structure: class Structure:
""" sublcasses can define commonHdr and/or structure. """ sublcasses can define commonHdr and/or structure.
each of them is an tuple of either two: (fieldName, format) or three: (fieldName, ':', class) fields. each of them is an tuple of either two: (fieldName, format) or three: (fieldName, ':', class) fields.
@ -111,18 +110,6 @@ class Structure:
else: else:
self.data = None self.data = None
@classmethod
def fromFile(self, file):
answer = self()
answer.fromString(file.read(len(answer)))
return answer
def setAlignment(self, alignment):
self.alignment = alignment
def setData(self, data):
self.data = data
def packField(self, fieldName, format = None): def packField(self, fieldName, format = None):
if self.debug: if self.debug:
print("packField( %s | %s )" % (fieldName, format)) print("packField( %s | %s )" % (fieldName, format))
@ -579,25 +566,7 @@ class Structure:
return field[0] return field[0]
return None return None
def zeroValue(self, format):
two = format.split('*')
if len(two) == 2:
if two[0].isdigit():
return (self.zeroValue(two[1]),)*int(two[0])
if not format.find('*') == -1: return ()
if 's' in format: return b''
if format in ['z',':','u']: return ''
if format == 'w': return b'\x00\x00'
return 0
def clear(self):
for field in self.commonHdr + self.structure:
self[field[0]] = self.zeroValue(field[1])
def dump(self, msg = None, indent = 0, print_to_stdout = True): def dump(self, msg = None, indent = 0, print_to_stdout = True):
if msg is None: if msg is None:
msg = self.__class__.__name__ msg = self.__class__.__name__
ind = ' '*indent ind = ' '*indent