Apr19

## DigitalProductID Decode Algorithm

Some licence keys for a Microsoft software creates a DigitalProductID in the Windows registry. For example, you might find the digital product id for your Microsoft Windows in your registry at: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion

The following algorithm shows you howto decode the digital product id to fetch your raw product key. If you loose your product key, this should help you to get it back without spending money. Please use this knowledge only for legal use! This is the onliest limitation to the following algorithm:

/* Digit Array */
Char[] Digits = {'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[] DecodedKey = new Char[25];
System.Byte[] BinaryKey = {0x7f, 0x6a, 0x51, 0x4c, 0x8e, 0x5a, 0x91, 0x56, 0xea, 0x34, 0x77, 0x1a, 0xb7, 0xf2, 0x02}; // Not really a working key :-)
int StartOffset = 0x34;
int i, j, k;
String Result = "";
for (i = DecodedKey.Length-1; i >= 0; i --)
{
k = 0;
for (j = BinaryKey.Length-1; j >= 0; j--)
{
k = (k << 8) + BinaryKey[j];
BinaryKey[j] = (System.Byte)(k / 24);
k = k % 24;
}
DecodedKey[i] = Digits[k];
}

You got the raw decoded key in the Result variable. After decoding, you have to format the product key e.g. adding “-” after every 5th char and so on. I used Microsoft .NET Framework and C# to access the registry and decode the byte progression.