如何从Windows注册表中获取并解码Windows 10 20H2产品密钥
Windows 10 20H2 产品密钥获取及解码方案
1. 二进制产品密钥的注册表路径
Win10 20H2及后续版本调整了产品密钥的存储位置,旧方案读取的注册表字段已失效,正确的读取路径为:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform
需要读取该路径下的BackupProductKeyDefault键值,返回的二进制数据即为待解码的原始密钥数据。
注意:读取该注册表项需要管理员权限,普通权限运行会触发权限不足错误。
2. 二进制密钥解码方法(含Python实现)
解码逻辑
- 从二进制原始数据中提取偏移量为52的连续16个字节,为加密后的核心密钥数据
- 预设字符集为
BCDFGHJKMPQRTVWXY2346789,共24个有效字符作为解码映射表 - 循环25次计算密钥字符:每次将16字节数据按位运算得到对应字符集下标,取出对应字符后更新剩余数值
- 将得到的25位字符按每5位一组,用短横线
-拼接得到最终产品密钥
Python实现代码
import winreg def decode_windows_key(encoded_key): chars = "BCDFGHJKMPQRTVWXY2346789" decoded = [] key_bytes = list(encoded_key[52:52+16]) for i in range(25): current = 0 for j in range(15, -1, -1): current = current * 256 + key_bytes[j] key_bytes[j] = current // 24 current = current % 24 decoded.append(chars[current]) if (i + 1) % 5 == 0 and i != 24: decoded.append('-') return ''.join(decoded) def get_windows_product_key(): try: reg_path = r"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, reg_path, 0, winreg.KEY_READ | winreg.KEY_WOW64_64KEY) encoded_key, _ = winreg.QueryValueEx(key, "BackupProductKeyDefault") winreg.CloseKey(key) return decode_windows_key(encoded_key) except PermissionError: return "错误:请以管理员权限运行脚本后重试" except FileNotFoundError: return "错误:当前系统版本不支持该密钥获取方式" if __name__ == "__main__": print(get_windows_product_key())
说明:该代码仅支持Windows系统运行,依赖系统自带的
winreg模块,无需额外安装第三方依赖。
内容的提问来源于stack exchange,提问作者technician
相关产品推荐
相关产品推荐

