我正在使用 c++ 开发一个小型 Windows 应用程序,我想在 pc 上获取某种软件/硬件的指纹,以便我可以允许该应用程序仅在某些 pc 上运行。
我知道该应用程序可能会被破解,但我真的对实现这样的东西很感兴趣。
有什么想法我怎么能做到这一点?
我正在使用 c++ 开发一个小型 Windows 应用程序,我想在 pc 上获取某种软件/硬件的指纹,以便我可以允许该应用程序仅在某些 pc 上运行。
我知道该应用程序可能会被破解,但我真的对实现这样的东西很感兴趣。
有什么想法我怎么能做到这一点?
这基本上取决于您希望将软件与底层硬件耦合的紧密程度。例如,您可以从注册表中获取一些硬件信息,从 LAN 卡中读取 MAC 地址,检索 gfx 制造商、CPU id 等并对所有这些数据进行哈希处理。
然后,您可以将此哈希用作发送给您公司的质询代码。然后,客户会收到此哈希的签名(使用您的私钥)版本。
在启动时,您的应用程序能够检查散列的签名是好是坏(即已由您的公司签名)。
这不仅将您的软件绑定到某个硬件配置,而且还迫使破解者修补您的应用程序(因为他们需要修补可执行文件中的公钥并替换它才能编写密钥生成器)。与仅输入从注册机复制的有效序列相比,许多人考虑两次安装从各种来源获得的破解。
编辑:
为了检查哈希的签名,可以使用从RSA over DSA到ECC的任何东西。我可以为此推荐Crypto++或libTomCrypt。
在普通 PC 中没有可靠的方法可以做到这一点。人们多年来一直在努力。问题是您可能随时更改任何组件,包括 CPU 和 BIOS ROM。最接近的人是使用受密码保护的“加密狗”,但事实证明这在操作上并不令人满意,而且不是很安全。
如果你想出一些东西,就申请专利;这将是非常有价值的。
正如其他人所说,没有什么可以完美满足您的需求。我对类似问题进行了半心半意的尝试,最终混合了驱动器卷 ID(不好,因为它可以重新格式化)和操作系统密钥(来自 Windows)。
最后我没有花太多时间在它上面,好像人们真的想破解你的软件,他们可能能够做到。我离开了极小的许可“保护”,但它很差。
花时间/精力让他们想买它,让它出类拔萃。