混淆硬编码的许可证密钥

本文关键字:许可证 密钥 编码 | 更新日期: 2023-09-27 18:30:04

我在代码中使用了一些第三方Dll,这些Dll需要许可证密钥才能工作。

在调用时需要将许可证密钥传递到方法中,否则它们将不起作用。

然而,我已经用C#编写了我的代码,这意味着这个许可证密钥可以通过反编译我的代码来检索。

有什么方法可以防止这个许可证字符串被反编译吗?

混淆硬编码的许可证密钥

(添加为答案,因为消息太长,不适合注释)

没有办法完全阻止对这个字符串的访问,你只能让它变得更难。即使你对它进行了加密,你的程序也需要解密的能力,这意味着任何足够熟练的人都可以访问和重用解密机制,以获得清晰格式的密钥。或者他们甚至可以简单地从内存中读取解密的密钥。

您可以将许可证密钥存储在app.config中,然后对其进行加密:http://www.codeproject.com/Articles/18209/Encrypting-the-app-config-File-for-Windows-Forms-A

这可能会让你花最少的钱获得最大的回报。

不要太担心。如果您的应用程序有权访问该密钥,那么任何有权访问二进制文件并有足够时间的人都可以获得该密钥。

请记住,您的许可计划不是有风险的,而是第三方的许可计划,因此您必须依赖适用的法律。如果有人反编译你的应用程序并访问密钥,他们就是违法的,这是你无法阻止的。

你的应用程序拥有使用第三方库的合法权利,违反该库必须由法律处理,而不是由保护来处理,这违反了第三方许可计划的条款。你可以使用一定的长度来保护它,但最终责任不在你,因为数据不可能得到完全保护(你的应用程序需要知道该密钥,因此,在某个时候,该密钥将以明文形式提供,供任何有权访问代码的人选择)。即使该应用程序完全是用汇编语言编写的,也是如此。

在您的许可协议中添加强有力的措辞,禁止反编译和/或使用您在他们自己的软件中获得的任何许可证。要求用户以电子方式接受这些条款。在您自己的服务器上记录每个接受这些条款的用户的时间戳和IP地址。

如果你想在这之外添加一些基本的模糊处理,那也可以。但最重要的一点是,作为该组件的授权经销商,您正在共同努力防止他人使用您的密钥。

这里有一些不加密的简单方法,可以停止许可证的纯文本视图:将字符串存储在代码中,并在使用前进行一些替换,例如:

string LicenseCode = "croftycot";
// Use license code
CallUsingLicense(LicenseCode.Replace("o","a")); // Change to real code: craftycat

如果需要使用正则表达式、将几个字符串混合在一起等,则可能会变得更复杂。