使用许可证文件保护 DLL 的使用/加载的最佳方法是什么?
3 回答
您可能需要考虑以下几点:
检查总和 DLL。使用加密散列函数,您可以将其存储在许可证文件或 DLL 中。这提供了一种验证方法来确定我的原始 DLL 文件是否未被破解,或者它是否是该 DLL 的许可文件。一些简单的字节交换技术可以迅速让你的散列函数脱离常规(因此不容易重现)。
不要将散列存储为字符串,将其拆分为不同位置的无符号短裤。
正如拉里所说,MAC 地址相当普遍。在The Code Project上有很多关于如何获得它的示例,但请注意,这些天很容易伪造。
我的建议是使用私钥/公钥生成许可证。
In short, modes of attack will be binary (modify the instructions of your DLL file) so protect against this, or key generation so make each license user, machine, and even the install specific.
您可以在 DllMain() 中检查许可证,如果没有找到就死掉。
它还取决于您的许可证算法如何工作。我建议您考虑使用诸如Diffie–Hellman 密钥交换(甚至RSA)之类的东西来根据某些信息生成某种可以传递给您的用户的公钥/私钥。
(根据应用程序,我知道有一个案例,我为一家公司在合同上编写了许可证代码,他们使用MAC 地址和其他一些数据,对其进行哈希处理,并对哈希进行加密,为他们提供“密钥值”,如果注册号正确)。这确保了密钥文件不能被移动(或提供)到另一台机器,从而“窃取”软件。
如果您想深入挖掘并避免黑客攻击,那完全是“另一个话题……”