我正在阅读 Windows 内部文件并找到了 productoptions/productpolicy 密钥,我知道它是 tokens.dat 中的一个开关,但不知道如何解密它,或者是否有它的解密版本
也没有找到任何关于产品策略键的常量或枚举的文档
首先,这些信息是公开的吗?我是否必须设置 10 台虚拟机才能获取每个 Windows 版本的密钥,或者有人知道答案吗?
答案1
我找不到产品策略键的常量或枚举的任何文档
下面引用的文章对密钥中包含的二进制值进行了逆向工程HKLM\System\CurrentControlSet\ProductOptions
。
它还包括一个用于解码密钥的程序(带有源代码)。
享受 Windows 许可的乐趣
如果您查看注册表中的 HKLM\System\CurrentControlSet\ProductOptions 项,您会发现几个与许可相关的值。
ProductType 和 ProductSuite 键包含 OS Suite 和 Edition,但 ProductPolicy 键更有趣。让我们仔细看看它
...
如您所见,许可证名称以 Unicode 字符串的形式存在,稍后我将向您展示如何读取这些值。但因为我不想手动提取所有名称,所以我决定看看是否可以反转使用的结构,因为它看起来不太复杂
...
它以标题开始:
TProductPolicyHeader = packed record cbSize: DWORD; cbDataSize: DWORD; cbEndMarker: DWORD; Unknown1: DWORD; Unknown2: DWORD; end;
然后会出现一个值数组:
TProductPolicyValue = packed record cbSize: Word; cbName: Word; SlDatatype: Word; cbData: Word; Unknown1: DWORD; Unknown2: DWORD; end;
SlDataType 是一个字值,与 0SLDATATYPE 枚举的值相对应:
_tagSLDATATYPE = ( SL_DATA_NONE = REG_NONE, SL_DATA_SZ = REG_SZ, SL_DATA_DWORD = REG_DWORD, SL_DATA_BINARY = REG_BINARY, SL_DATA_MULTI_SZ = REG_MULTI_SZ, SL_DATA_SUM = 100 ); SLDATATYPE = _tagSLDATATYPE; TSlDataType = SLDATATYPE; PSlDataType = ^SLDATATYPE;
最后我们以一个结束标记(大小为 cbEndMarker)作为结束。
答案2
您可以使用产品政策编辑器 1.5查看所有值及其属性。在 MDL 上搜索(提供英文和中文 UI)。