提高Windows 产品密钥安全性

简介:

  今天无意中在CodePlex 发现一个叫Windows Product Key Finder 的项目,从名字就可以看出它的用途。通过这款软件可以轻松的获取本地Windows 的产品密钥。当然对于找不到密钥光盘的人来说这当然是款实用的工具,但如果到了某些图谋不轨的人手里那您的产品密钥必定要受到威胁。

     阅读了项目源代码后,其实程序的核心也是最有价值的部分就是去解码\\HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion 中的DigitalProductId 值。如下代码所示:

public static string DecodeProductKey(byte[] digitalProductId)
{
    // Offset of first byte of encoded product key in 
    // 'DigitalProductIdxxx" REG_BINARY value. Offset = 34H.
    const int keyStartIndex = 52;
    // Offset of last byte of encoded product key in 
    // 'DigitalProductIdxxx" REG_BINARY value. Offset = 43H.
    const int keyEndIndex = keyStartIndex + 15;
    // Possible alpha-numeric characters in product key.
    char[] digits = new char[]
    {
        'B', 'C', 'D', 'F', 'G', 'H', 'J', 'K', 'M', 'P', 'Q', 'R', 
        'T', 'V', 'W', 'X', 'Y', '2', '3', '4', '6', '7', '8', '9',
    };
    // Length of decoded product key
    const int decodeLength = 29;
    // Length of decoded product key in byte-form.
    // Each byte represents 2 chars.
    const int decodeStringLength = 15;
    // Array of containing the decoded product key.
    char[] decodedChars = new char[decodeLength];
    // Extract byte 52 to 67 inclusive.
    ArrayList hexPid = new ArrayList();
    for (int i = keyStartIndex; i <= keyEndIndex; i++)
    {
        hexPid.Add(digitalProductId[i]);
    }
    for (int i = decodeLength - 1; i >= 0; i--)
    {
        // Every sixth char is a separator.
        if ((i + 1) % 6 == 0)
        {
            decodedChars[i] = '-';
        }
        else
        {
            // Do the actual decoding.
            int digitMapIndex = 0;
            for (int j = decodeStringLength - 1; j >= 0; j--)
            {
                int byteValue = (digitMapIndex << 8) | (byte)hexPid[j];
                hexPid[j] = (byte)(byteValue / 24);
                digitMapIndex = byteValue % 24;
                decodedChars[i] = digits[digitMapIndex];
            }
        }
    }
    return new string(decodedChars);
}

     最后将读取出的DigitalProductId 值(Byte)赋给DecodeProductKey 方法即可算出Windows 产品密钥。项目描述中提到该程序在XP、Vista、Windows 7 系统上均可运行。

RegistryKey hklm = Registry.LocalMachine;
hklm = hklm.OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion");
byte[] digitalProductId = hklm.GetValue("DigitalProductId") as byte[];
textBox1.Text = DecodeProductKey(digitalProductId);

     由此可见简单几行代码就可以使产品密钥落入他人之手,并且这类程序在网上还有很多。对于Vista、Windows 7 用户来说建议使用slmgr /cpky 命令对产品密钥进行一下处理,详细内容请参考《Windows 7 产品密钥是否安全》。从注册表清除产品密钥信息后,再运行该程序便会出现下图效果,产品密钥将全部显示为字母“B”,这样您就不必担心产品密钥的安全性了。

PK





本文转自Gnie博客园博客,原文链接:http://www.cnblogs.com/gnielee/archive/2010/06/07/fetch-productkey-via-csharp.html,如需转载请自行联系原作者

相关文章
|
JSON Linux 网络安全
【全面解析】Windows 如何使用 SSH 密钥远程连接 Linux 服务器
【全面解析】Windows 如何使用 SSH 密钥远程连接 Linux 服务器
971 2
|
5月前
|
弹性计算 Linux 数据安全/隐私保护
云服务器 ECS产品使用问题之linux服务器的存档如何导入Windows服务器
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
云服务器 ECS产品使用问题之linux服务器的存档如何导入Windows服务器
|
5月前
|
弹性计算 Linux 云计算
云服务器 ECS产品使用问题之如何从Linux迁移存档到Windows
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
5月前
|
弹性计算 持续交付 Docker
阿里云云效产品使用合集之如何部署到阿里云服务器上的 Windows Server 上的 IIS
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
5月前
|
SQL Kubernetes 流计算
实时计算 Flink版产品使用问题之如何在Windows上运行
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
6月前
|
运维 安全 数据管理
数据管理DMS产品使用合集之windows上安装网关时,token都是新的,报错:无效的token,该怎么办
阿里云数据管理DMS提供了全面的数据管理、数据库运维、数据安全、数据迁移与同步等功能,助力企业高效、安全地进行数据库管理和运维工作。以下是DMS产品使用合集的详细介绍。
71 4
|
5月前
|
弹性计算 缓存 网络安全
云服务器 ECS产品使用问题之远程桌面无法连接到Windows实例,该如何排查
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
5月前
|
JavaScript IDE 持续交付
阿里云云效产品使用合集之如何配置 Node.js构建任务让其在Windows环境中进行
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
5月前
|
敏捷开发 Kubernetes 持续交付
阿里云云效产品使用合集之如何将流水线部署到Windows
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
编解码 iOS开发 MacOS
无影Windows & macOS客户端6.4.0版本发布
无影Windows和macOS客户端6.4.0版本发布,云电脑使用体验持续升级。
1126 0
无影Windows & macOS客户端6.4.0版本发布