इसलिए मैंने यहां अन्य उत्तरों को देखा और इसमें झंकार करने की आवश्यकता पाई
strings /sys/firmware/acpi/tables/MSDM
मूल कुंजी है जो अभी भी उपयोग किया जा रहा है महान काम करता है। हालांकि मेरे पास कुछ सिस्टम हैं जो होम एडिशन के साथ आए हैं और आपको रजिस्ट्री से वर्तमान कुंजी प्राप्त करने की आवश्यकता है।
winmount=/mnt
echo "hex \\Microsoft\\Windows NT\\CurrentVersion\\DigitalProductId\nq\nq" | chntpw -e ${winmount}/Windows/System32/config/SOFTWARE
फिर हमें कुंजी प्राप्त करने के लिए एक एल्गोरिथ्म के माध्यम से इसे चलाने की आवश्यकता होगी।
मुझे https://github.com/mrpeardotnet/WinProdKeyFinder/blob/master/WinProdKeyFind/KeyDecoder.cs से कुछ कोड मिले
/// <summary>
/// Decodes Windows Product Key from the DigitalProductId.
/// This method applies to DigitalProductId from Windows 7 or lower versions of Windows.
/// </summary>
/// <param name="digitalProductId">DigitalProductId to decode</param>
/// <returns>Decoded Windows Product Key as a string</returns>
private static string DecodeProductKey(byte[] digitalProductId)
{
const int keyStartIndex = 52;
const int keyEndIndex = keyStartIndex + 15;
var digits = new[]
{
'B', 'C', 'D', 'F', 'G', 'H', 'J', 'K', 'M', 'P', 'Q', 'R',
'T', 'V', 'W', 'X', 'Y', '2', '3', '4', '6', '7', '8', '9',
};
const int decodeLength = 29;
const int decodeStringLength = 15;
var decodedChars = new char[decodeLength];
var hexPid = new ArrayList();
for (var i = keyStartIndex; i <= keyEndIndex; i++)
{
hexPid.Add(digitalProductId[i]);
}
for (var i = decodeLength - 1; i >= 0; i--)
{
// Every sixth char is a separator.
if ((i + 1) % 6 == 0)
{
decodedChars[i] = '-';
}
else
{
// Do the actual decoding.
var digitMapIndex = 0;
for (var j = decodeStringLength - 1; j >= 0; j--)
{
var byteValue = (digitMapIndex << 8) | (byte)hexPid[j];
hexPid[j] = (byte)(byteValue / 24);
digitMapIndex = byteValue % 24;
decodedChars[i] = digits[digitMapIndex];
}
}
}
return new string(decodedChars);
}
/// <summary>
/// Decodes Windows Product Key from the DigitalProductId.
/// This method applies to DigitalProductId from Windows 8 or newer versions of Windows.
/// </summary>
/// <param name="digitalProductId">DigitalProductId to decode</param>
/// <returns>Decoded Windows Product Key as a string</returns>
public static string DecodeProductKeyWin8AndUp(byte[] digitalProductId)
{
var key = String.Empty;
const int keyOffset = 52;
var isWin8 = (byte)((digitalProductId[66] / 6) & 1);
digitalProductId[66] = (byte)((digitalProductId[66] & 0xf7) | (isWin8 & 2) * 4);
const string digits = "BCDFGHJKMPQRTVWXY2346789";
var last = 0;
for (var i = 24; i >= 0; i--)
{
var current = 0;
for (var j = 14; j >= 0; j--)
{
current = current*256;
current = digitalProductId[j + keyOffset] + current;
digitalProductId[j + keyOffset] = (byte)(current/24);
current = current%24;
last = current;
}
key = digits[current] + key;
}
var keypart1 = key.Substring(1, last);
var keypart2 = key.Substring(last + 1, key.Length - (last + 1));
key = keypart1 + "N" + keypart2;
for (var i = 5; i < key.Length; i += 6)
{
key = key.Insert(i, "-");
}
return key;
}
मैं एल्गोरिथ्म को डिकोड करने की कोशिश कर रहा हूं और इसे बैश में लिख रहा हूं। डमी आउटपुट कुंजी को डिकोड करने के लिए पुराना एल्गोरिथम (<win8) लगता है। मुझे नए एल्गोरिथ्म (> win7) का उपयोग करने का विकल्प नहीं मिला है।
/sys/firmware/acpi/tables/MSDM
नीचे के दूसरे उत्तर में चक आर द्वारा वर्णित रूप में पाया ।