Ejemplo n.º 1
0
        private KMSResponse CreateKMSResponse(KMSRequest kmsRequest, IKMSServerSettings serverSettings, ILogger logger)
        {
            KMSResponse response = new KMSResponse {
                Version = kmsRequest.Version
            };
            string kmsPID;

            if (serverSettings.GenerateRandomKMSPID)
            {
                KMSPIDGenerator generator = new KMSPIDGenerator();
                kmsPID = generator.CreateKMSPID(kmsRequest);
                logger.LogMessage("KMS PID: " + kmsPID);
                logger.LogMessage("Application ID: " + kmsRequest.ApplicationId);
                logger.LogMessage("Client Machine ID: " + kmsRequest.ClientMachineId);
                logger.LogMessage("KMS Counted ID: " + kmsRequest.KmsCountedId);
                logger.LogMessage("SKUID ID: " + kmsRequest.SkuId);
                logger.LogMessage("KMS Activation Response (KMS V" + kmsRequest.MajorVersion + "." + kmsRequest.MinorVersion + ") sent." + Environment.NewLine);
            }
            else
            {
                kmsPID = serverSettings.DefaultKMSPID;
            }
            response.KMSPID               = kmsPID;
            response.ClientMachineId      = kmsRequest.ClientMachineId;
            response.RequestTime          = kmsRequest.RequestTime;
            response.CurrentClientCount   = serverSettings.CurrentClientCount;
            response.VLActivationInterval = serverSettings.VLActivationInterval;
            response.VLRenewalInterval    = serverSettings.VLRenewalInterval;
            return(response);
        }
Ejemplo n.º 2
0
        public byte[] ExecuteKMSServerLogic(byte[] kmsRequestBytes, ILogger logger)
        {
            KMSRequest kmsRequest = CreateKmsRequest(kmsRequestBytes);

            KMSResponse response = CreateKMSResponse(kmsRequest, _serverSettings, logger);

            byte[] responseBytes = CreateKMSResponseBytes(response);
            return(responseBytes);
        }
Ejemplo n.º 3
0
 private static KMSRequest CreateKmsRequest(byte[] decrypted)
 {
     using (MemoryStream stream = new MemoryStream(decrypted))
     {
         using (BinaryReader binaryReader = new BinaryReader(stream))
         {
             KMSRequest kmsRequest = new KMSRequest {
                 Version = binaryReader.ReadUInt32(), IsClientVM = binaryReader.ReadUInt32(), LicenseStatus = binaryReader.ReadUInt32(), GraceTime = binaryReader.ReadUInt32(), ApplicationId = new Guid(binaryReader.ReadBytes(16)), SkuId = new Guid(binaryReader.ReadBytes(16)), KmsCountedId = new Guid(binaryReader.ReadBytes(16)), ClientMachineId = new Guid(binaryReader.ReadBytes(16)), RequiredClientCount = binaryReader.ReadUInt32(), RequestTime = binaryReader.ReadUInt64(), PreviousClientMachineId = binaryReader.ReadBytes(16), MachineName = binaryReader.ReadBytes(64)
             };
             return(kmsRequest);
         }
     }
 }
Ejemplo n.º 4
0
        // Create Random KMS PID
        public string CreateKMSPID(KMSRequest request)
        {
            // KMS Host OS Type
            List <HostOS> hostOSList = new List <HostOS>
            {
                new HostOS {
                    Type = 55041, OSBuild = 6002, MinimumDay = 146, MinimumYear = 2009
                },                                                                                // Windows Server 2008 SP2:    05/26/2009 SP2 GA
                new HostOS {
                    Type = 55041, OSBuild = 7601, MinimumDay = 53, MinimumYear = 2011
                },                                                                                // Windows Server 2008 R2 SP1: 02/22/2011 SP1 GA
                new HostOS {
                    Type = 5426, OSBuild = 9200, MinimumDay = 248, MinimumYear = 2012
                },                                                                                // Windows Server 2012 RTM:    09/04/2012 RTM GA
                new HostOS {
                    Type = 6401, OSBuild = 9600, MinimumDay = 27, MinimumYear = 2013
                },                                                                                // Windows Server 2012 R2 RTM: 01/27/2013 RTM GA
                new HostOS {
                    Type = 3612, OSBuild = 14393, MinimumDay = 215, MinimumYear = 2016
                }                                                                                 // Windows Server 2016 RTM:    08/02/2016 WZOR LEAK
            };

            // Product Specific KeyConfig
            List <PkeyConfig> pkeyConfigList = new List <PkeyConfig>
            {
                new PkeyConfig {
                    GroupID = 152, PIDRangeMin = 381000000, PIDRangeMax = 392999999
                },                                                                                  // Windows Server 2008 C
                new PkeyConfig {
                    GroupID = 168, PIDRangeMin = 305000000, PIDRangeMax = 312119999
                },                                                                                  // Windows Server 2008 R2 C
                new PkeyConfig {
                    GroupID = 206, PIDRangeMin = 152000000, PIDRangeMax = 191999999
                },                                                                                  // Windows Server 2012
                new PkeyConfig {
                    GroupID = 206, PIDRangeMin = 271000000, PIDRangeMax = 310999999
                },                                                                                  // Windows Server 2012 R2
                new PkeyConfig {
                    GroupID = 206, PIDRangeMin = 471000000, PIDRangeMax = 530999999
                },                                                                                  // Windows Server 2016
                new PkeyConfig {
                    GroupID = 96, PIDRangeMin = 199000000, PIDRangeMax = 217999999
                },                                                                                  // Office 2010
                new PkeyConfig {
                    GroupID = 206, PIDRangeMin = 234000000, PIDRangeMax = 255999999
                },                                                                                  // Office 2013
                new PkeyConfig {
                    GroupID = 206, PIDRangeMin = 437000000, PIDRangeMax = 458999999
                }                                                                                   // Office 2016
            };

            // Product Specific Detection
            int osTypeIndex    = HostServer2016;
            int keyConfigIndex = PkeyConfigWindowsServer2016;

            if (request.ApplicationId == _appIDOffice2010 || request.ApplicationId == _appIDOffice2013 || request.ApplicationId == _appIDOffice2016)
            {
                if (request.KmsCountedId == _kmsCountedIDOffice2010)
                {
                    keyConfigIndex = PkeyConfigOffice14;
                    osTypeIndex    = Random.Next(HostServer2012, HostServer2016 + 1);
                }
                else if (request.KmsCountedId == _kmsCountedIDOffice2013)
                {
                    keyConfigIndex = PkeyConfigOffice15;
                    osTypeIndex    = Random.Next(HostServer2012, HostServer2016 + 1);
                }
                else if (request.KmsCountedId == _kmsCountedIDOffice2016)
                {
                    keyConfigIndex = PkeyConfigOffice16;
                    osTypeIndex    = Random.Next(HostServer2012, HostServer2016 + 1);
                }
                else if (request.KmsCountedId == _kmsCountedIDOffice2019)
                {
                    keyConfigIndex = PkeyConfigOffice16;
                    osTypeIndex    = Random.Next(HostServer2012, HostServer2016 + 1);
                }
            }
            else if (request.ApplicationId == _appIDWindows)
            {
                if (request.KmsCountedId == _kmsCountedIDWindowsVista || request.KmsCountedId == _kmsCountedIDWindowsServer2008A || request.KmsCountedId == _kmsCountedIDWindowsServer2008B || request.KmsCountedId == _kmsCountedIDWindowsServer2008C)
                {
                    keyConfigIndex = Random.Next(PkeyConfigWindowsServer2012, PkeyConfigWindowsServer2016 + 1);
                    osTypeIndex    = Random.Next(HostServer2012, HostServer2016 + 1);
                }
                else if (request.KmsCountedId == _kmsCountedIDWindows7 || request.KmsCountedId == _kmsCountedIDWindowsServer2008R2A || request.KmsCountedId == _kmsCountedIDWindowsServer2008R2B || request.KmsCountedId == _kmsCountedIDWindowsServer2008R2C)
                {
                    keyConfigIndex = Random.Next(PkeyConfigWindowsServer2012, PkeyConfigWindowsServer2016 + 1);
                    osTypeIndex    = Random.Next(HostServer2012, HostServer2016 + 1);
                }
                else if (request.KmsCountedId == _kmsCountedIDWindows8Retail || request.KmsCountedId == _kmsCountedIDWindows8Volume || request.KmsCountedId == _kmsCountedIDWindowsServer2012)
                {
                    keyConfigIndex = Random.Next(PkeyConfigWindowsServer2012, PkeyConfigWindowsServer2016 + 1);
                    osTypeIndex    = Random.Next(HostServer2012, HostServer2016 + 1);
                }
                else if (request.KmsCountedId == _kmsCountedIDWindows81Retail || request.KmsCountedId == _kmsCountedIDWindows81Volume || request.KmsCountedId == _kmsCountedIDWindowsServer2012R2)
                {
                    keyConfigIndex = Random.Next(PkeyConfigWindowsServer2012R2, PkeyConfigWindowsServer2016 + 1);
                    osTypeIndex    = Random.Next(HostServer2012R2, HostServer2016 + 1);
                }
                else if (request.KmsCountedId == _kmsCountedIDWindows10Retail || request.KmsCountedId == _kmsCountedIDWindows10Volume || request.KmsCountedId == _kmsCountedIDWindows10LTSB2015 || request.KmsCountedId == _kmsCountedIDWindows10LTSB2016 || request.KmsCountedId == _kmsCountedIDWindowsServer2016)
                {
                    keyConfigIndex = PkeyConfigWindowsServer2016;
                    osTypeIndex    = HostServer2016;
                }
            }

            // Generate Part 1 & 7: Host Type and KMS Server OS Build
            HostOS osType = hostOSList[osTypeIndex];

            // Generate Part 2: Group ID and Product Key ID Range
            PkeyConfig keyConfig = pkeyConfigList[keyConfigIndex];

            // Generate Part 3 and Part 4: Product Key ID
            long productKeyID = Random.Next(0, int.MaxValue) % (keyConfig.PIDRangeMax - keyConfig.PIDRangeMin) + keyConfig.PIDRangeMin;

            // Generate Part 5: License Channel (00=Retail, 01=Retail, 02=OEM, 03=Volume(GVLK,MAK)) - always 03
            const int licenseChannel = 3;

            // Generate Part 6: Language - use system default language
            int languageCode = CultureInfo.InstalledUICulture.LCID; // GetSystemDefaultLCID();

            /* Generate Part 8: KMS Host Activation Date */
            int minimumDay, minimumYear;

            // Get Minimum Possible Date
            minimumDay  = osType.MinimumDay;
            minimumYear = osType.MinimumYear;

            // Get Current Time Information
            int currentYear = DateTime.Now.Year;           // Year (current year minus 1900).
            int currentDay  = DateTime.Now.DayOfYear;      // Day of Year (0-365; January 1 = 0)

            // Use 2016 for Current Year if time is screwed up.
            if (minimumYear > currentYear)
            {
                currentYear = 2016;
            }

            // Generate Year (Minimum Year to Current Year)
            int year = Random.Next() % (currentYear - (minimumYear - 1)) + minimumYear;

            // Generate Day
            int randomDay = Random.Next() % 365 + 1;

            // Check for future days and limits the random up to current day.
            if ((randomDay > currentDay) && (year == currentYear))
            {
                randomDay = Random.Next() % currentDay + 1;
            }
            // Check for product minimum build year and day and adjust the random accordingly.
            else if ((randomDay < minimumDay) && (year == minimumYear))
            {
                randomDay = minimumDay + (Random.Next() % (365 - minimumDay) + 1);
            }

            // Apply Setting
            string result = string.Format("{0:D5}-{1:D5}-{2:D3}-{3:D6}-{4:D2}-{5}-{6:D4}.0000-{7:D3}{8:D4}",
                                          osType.Type, keyConfig.GroupID, productKeyID / 1000000, productKeyID % 1000000, licenseChannel,
                                          languageCode, osType.OSBuild, randomDay, year);

            return(result);
        }