Odczytanie kluczy Windows z rejestru

Kategoria:  Archiwum
Data wpisu:  09.04.2012
Czas potrzebny na przeczytanie:  5 minut

Klucz produktu Windows od wersji XP jest zakodowany w kluczu rejestru

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion

w wartości binarnej DigitalProductId w 30 cyfr w notacji heksadecymalnym po grupowanych w pary liczb (15 par).

Zakodowany klucz jest zapisany od 35 pary liczb w całej wartości DigitalProductId:

W moim przypadku to: „FE 04 00 E8 44 28 31 EE C4 5F F4 F7 92 69 09” (zakodowany klucz Windows 8  Cconsumer Preview).

Następnie ciąg 15 par liczb oddzielone spacją musimy zdekodować.

http://dreamiteam.pl/DekoderDigitalProductID.html

Przykładowy wynik działania dekodera:

Algorytm dekodujący klucz Windows jest ogólnie dostępny  – przykład w języku C#:

//Digital Product ID: FE 04 00 E8 44 28 31 EE C4 5F F4 F7 92 69 09
Char[] ZnakiDozwoloneWKluczuWindows = { 'B’, 'C’, 'D’, 'F’, 'G’, 'H’, 'J’, 'K’, 'M’, 'P’, 'Q’, 'R’, 'T’, 'V’, 'W’, 'X’, 'Y’, '2′, '3′, '4′, '6′, '7′, '8′, '9′  };
Char[] KluczWidnowsa = new Char[25];
System.Byte[] ZakodowanyKlucz = {0xFE, 0x04, 0x00, 0xE8, 0x44, 0x28, 0x31, 0xEE, 0xC4, 0x5F, 0xF4, 0xF7, 0x92, 0x69, 0x09};
int i, j, k;
for (i = KluczWidnowsa.Length – 1; i >= 0; i–)
{
k = 0;
for (j = ZakodowanyKlucz.Length – 1; j >= 0; j–)
{
k = (k << 8) + ZakodowanyKlucz[j];
ZakodowanyKlucz[j] = (System.Byte)(k / 24);
k = k % 24;
}
KluczWidnowsa[i] = ZnakiDozwoloneWKluczuWindows[k];
}

Programy typu Windows Product Key Viewer korzystają z tych samych metod i algorytmu.

Autor wpisu
lukasz-avatar-dreamiteamŁukasz Matuszewski