在我的一个。net应用程序中,我必须使用许可密钥对程序库进行"验证"。
但是每个偷看我的程序集的人都可以得到钥匙……
这并不影响我,但我确实关心库的创建者。
我不希望"泄露"他/他们的钥匙,给他/他们造成这样的损失……
有什么免费的工具可以用来保护我的数据吗?
我真的不关心其他代码…关键很重要
如果您必须将其传递到库中,并且如果您不控制库,那么您无论如何也做不了什么。您可以随意混淆代码以阻止Reflector用户(但不是Reflector VSPro,至少不容易),我将只使用Crack。. NET来窥视内存并从那里抓取它。
提供安全机制是库创建者的工作,例如使用公钥/私钥,SecureString, DPAPI或要求web调用将密钥存储在服务器上。
我能回忆起的唯一方法是dotnetfuscator,用于混淆代码,但这并不能避免来自专家的逆向工程。这个话题是c#开发人员的痛点,唯一真正的方法是不使用。net(这根本不是答案)
问题211849中还列出了一些其他的
另一个做这个和其他事情的产品:来自RedGate的SmartAssembly(虽然不是免费的)…
没有绝对的安全性-特别是对于jit代码(如IL//)。. NET和Java)…
虽然要注意字符串常量-它们需要被"static readonly
"字符串替换…否则它们不能被"混淆/加密"…
我也有同样的情况。密钥在我的代码中。我没有混淆代码。我想这是因为我的大部分用户不是程序员,不知道如何反编译代码并获得密钥。如果我担心的话,我想我会像上面建议的那样混淆
我会从另一个角度看待这个问题。
如果库需要许可证来验证;那么,您是否拥有在应用程序中分发库的正确许可?
如果是这样,那么我认为应该由库提供程序向您提供如何正确保护密钥的说明。
否则,最好使用代码混淆器。
Dotfuscator可以为您做到这一点。我相信它是与Visual Studio一起打包的-查看它。
我不担心;如果您不是他们唯一的客户,那么很有可能其他人正在通过未混淆的代码泄露许可密钥,使您的努力成为浪费时间。
MSDN上有一个代码混淆器列表。