我在我的代码中使用了一些需要许可证密钥才能工作的第 3 方 Dll。
许可证密钥需要在调用时传递给方法,否则它们不起作用。
但是我已经用 C# 编写了我的代码,这意味着可以通过反编译我的代码来检索此许可证密钥。
有没有办法防止这个许可证字符串被反编译?
我在我的代码中使用了一些需要许可证密钥才能工作的第 3 方 Dll。
许可证密钥需要在调用时传递给方法,否则它们不起作用。
但是我已经用 C# 编写了我的代码,这意味着可以通过反编译我的代码来检索此许可证密钥。
有没有办法防止这个许可证字符串被反编译?
您可以将许可证密钥存储在 app.config 中,然后对其进行加密:http: //www.codeproject.com/Articles/18209/Encrypting-the-app-config-File-for-Windows-Forms-A
这可能会让您花最少的钱获得最大的收益。
(添加为答案,因为消息太长,无法发表评论)
没有办法完全阻止对这个字符串的访问,你只能让它变得更难。即使您对其进行了加密,您的程序也需要能够对其进行解密,这意味着任何技术熟练的人都可以访问和重用解密机制以获取明文格式的密钥。或者他们甚至可以简单地从内存中读取解密的密钥。
不要太担心它。如果您的应用程序可以访问密钥,那么任何有权访问二进制文件并且有足够时间的人都可以获得该密钥。
请记住,有风险的不是您的许可方案,而是第 3 方的许可方案,因此您必须依赖适用的法律。如果有人反编译了您的应用程序并获得了密钥的访问权,那么他们就是违法的,这是您无法阻止的。
您的应用程序拥有使用该第三个库的合法权利,违反它必须由法律处理,而不是通过保护,这违反了第 3 方许可计划的条款。您可以进入一定的长度来保护它,但最终责任不在于您,因为无法完全保护数据(您的应用程序需要知道该密钥,因此,在某些时候,该密钥将在任何有权访问代码的人都可以选择纯文本)。即使应用程序完全用汇编语言编写也是如此。
在您的许可协议中添加强烈的措辞,反对反编译和/或使用您在他们自己的软件中获得的任何许可。要求用户以电子方式接受这些条款。在您自己的服务器上记录接受这些条款的每个用户的时间戳和 IP 地址。
如果您想在此之外添加一些基本的混淆,那也可以。但主要的一点是,作为该组件的许可再分发者,您正在齐心协力防止他人使用您的密钥。
这里有一些简单的没有加密的东西,可以停止许可证的纯文本视图:将字符串存储在您的代码中,并在使用它之前进行一些替换,例如:
string LicenseCode = "croftycot";
// Use license code
CallUsingLicense(LicenseCode.Replace("o","a")); // Change to real code: craftycat
如果您需要使用正则表达式、将几个字符串混合在一起等,您可能会变得更复杂。