如果用户几乎了解.net中的编码信息,并且他们看到.dll,则他们有不幸的能力来调用您的公共函数和子例程。我知道你可以尝试一个“密钥”系统,它将检查某个“密钥”作为参数,并且只在“密钥”有效时运行代码,但我只运行了一些代码和.dll我当.dll抛出一个未处理的异常时,它向我展示了文件的内容。
你如何保护自己的.dll?您是否应该只为您愿意承担风险?
答案 0 :(得分:9)
没关系调用现有方法等。Reflector会反编译代码!
混淆会让你到目前为止,但为了保护关键IP,你需要将它托管在你控制的安全服务器上。
答案 1 :(得分:3)
请注意,当涉及到在其他应用程序中反编译或重用的能力时,.NET DLL和EXE文件之间没有区别。
您的问题意味着将所有代码放在可执行文件中会更安全,这是一个很大的误解。
两者都是程序集,因此在可执行文件中实例化和使用公开可见类型同样简单,就像DLL程序集一样。 (例如。在Visual Studio中转到:添加引用,浏览,然后注意'exe'是要引用的有效组件。)
所以问题实际上更为通用:将任何类型的.NET程序集部署到客户端是否安全?正如另一个答案所说,唯一有保障的安全方法是根本不进行部署,而是将程序集保存在您自己的服务器上(例如开发Web应用程序)。
混淆不会阻止某人访问您的代码,只是让他们更难(一段时间)让他们理解它。
答案 2 :(得分:1)
我会回避你提出的实际问题,以便更快地指出你需要走的方向。
你需要研究.Net代码混淆。这是一个很好的帖子,来自其他人提出基本相同的问题,但用不同的术语:
.NET obfuscation tools/strategy
修改 - 添加
这是一篇关于你所问的问题的好文章。
http://aspnet.4guysfromrolla.com/demos/printPage.aspx?path=/articles/080404-1.aspx
@Mitch Wheat是对的。混淆只会让你到目前为止。但这是一个开始。如果你要重新分配你的dll,你需要习惯这样一个想法,即一个持久的人会破解它们。
答案 3 :(得分:1)
一个小问题
您是应用程序是Web应用程序还是C#(Windows窗体/命令提示符)应用程序。
如果它是一个Web应用程序,您可以将要隐藏的逻辑放在托管在某些其他URL上的Web服务中,而不能公开访问。
此外,如果它是一个Windows应用程序,您仍然可以混淆该DLL。但请记住,你可以让黑客难以反编译,但并非不可能。我在下面的链接中也有类似的问题。
How to preventing decompilation of any C# application
你必须权衡反编译的好处,而不是隐藏/保留代码的业务回报。
希望这有帮助。