Obfusticating硬编码的许可证密钥

时间:2013-09-02 14:03:16

标签: c# .net obfuscation

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

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

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

是否有办法阻止此许可证字符串被反编译?

5 个答案:

答案 0 :(得分:3)

(添加作为答案,因为评论的消息太长了)

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

答案 1 :(得分:3)

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

这可能会让你获得最大的收益。

答案 2 :(得分:3)

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

请记住,您的许可方案不是风险,是第三方的许可方案,因此您必须依赖适用的法律。如果有人反编译您的应用程序并获得密钥,那么他们就违反了法律,这是您无法阻止的。

您的应用程序拥有使用该第三个库的合法权利,违反必须由法律处理,而不是通过保护,并且违反了第三方许可方案的条款。您可以进入一定长度来保护它,但最终责任不在您的身上,因为数据无法完全受到保护(您的应用需要知道该密钥,因此,在某些时候,该密钥将在任何有权访问代码的人都可以使用纯文本。即使应用程序完全用汇编语言编写,也是如此。

答案 3 :(得分:1)

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

如果你想添加一些基本的混淆,除此之外,它也可以。但主要的一点是,作为该组件的授权重新分发者,您正在共同努力阻止其他人使用您的密钥。

答案 4 :(得分:0)

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

string LicenseCode = "croftycot";

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

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