我可以保护我的ASP.NET应用程序不受反编译器的影

时间:2009-02-19 17:48:04

标签: .net asp.net decompiling

  1. 我也知道ASP.NET发布时可以预编译
  2. 我知道.NET应用程序被编译为MSIL,可以通过Red Gate的.NET Reflector等工具轻松恢复到任何.NET语言。
  3. 我想开发并提供一个ASP.NET网站,买家将在该网站上托管该网站但无法访问该代码。
  4. 有什么方法可以做到吗?

14 个答案:

答案 0 :(得分:8)

根据我的经验,那些混淆代码的人不会生成值得麻烦的代码。

答案 1 :(得分:5)

告诉他们不要。你永远不会阻止一个坚定的逆向工程师,但如果它在合同中,你就可以追索从中获利的人。

混淆使得调试变得更加困难,不仅对您而且对于您的客户来说,如果他们插入您的代码,也会更加困难。

避免它的另一个原因是倾向于包括“秘密”端口,加密密钥或握手。如果你的代码中有任何一个,你将需要找到一个非常不同的模型。

答案 2 :(得分:3)

当您发布为dll时,可能会让您放心地知道您实际上没有在网站上发布 .cs / .vb文件。我认为这是最容易实施的障碍。

我意识到你仍然可以从DLL中获取代码,但源文件本身并不需要在那里。

将您的Web项目转换为Web应用程序并构建它。输出将是一个DLL。将其与所有媒体文件(aspx,gif,png等)一起推出,并且您的来源应该隐藏在不那么勤奋的人身上。

答案 3 :(得分:3)

它被称为“混淆”。有商业产品可以做到这一点。它不会完全阻止反编译,但它会使你的程序内部如此混乱,以至于它很难做出正面或反面。

请注意,在特殊情况下,它也可能会破坏您的代码,因此您必须使用其选项,直到您开始工作。

Dotfuscator是一个很受欢迎的版本,Visual Studio附带了一个精简的免费社区版本(不知道哪个版本)。

答案 4 :(得分:2)

只是一个想法,但可能不是你的情况:

如果可能,请在应用的某个位置使用网络服务。分布式代码使得只有客户端逻辑可用于反编译。

答案 5 :(得分:2)

查看Manco .NET Licensing System。它提供许可证保护,代码混淆和代码加密的功能。可以使用几种不同的方法保护ASP.NET应用程序:使用许可证密钥或HTTP请求中的域名(http://mancosoftware.blogspot.com/2010/10/protect-aspnet-application-using-name。 html),例如。

答案 6 :(得分:1)

有一种方法可以使用Visual Studio项目模板在ASP.NET网站或项目中预编译所有aspx / ascx文件:

请阅读ScottGu的博客:VS 2008 Web Deployment Project Support Released

编译部署项目,为所有aspx / ascx文件创建单个程序集。

如果您想要真正隐藏(使其无法阅读)您的源代码,您应该use a professional obfuscator software

答案 7 :(得分:1)

您可以查看混淆。 Dotfuscator是一个很好的起点。

答案 8 :(得分:0)

你正走在正确的轨道上。 DLL是一个很大的帮助,但它可以被解构,至少得到一些。

使用像Dotfuscator这样的混淆器是一个很好的额外步骤。 This FAQ是了解Obfuscators的好起点

关键是要确定你正在做什么。如果要部署代码,那么阻止某人调用代码中的方法将非常困难。如果你只是想阻止他们获得实际的来源,那就更容易了,混淆也应该有效。

答案 9 :(得分:0)

我总是选择将网站预先编译成DLL,而不是在线包含代码。这意味着匿名用户无权访问您的代码。

但是,如果您担心具有管理员访问权限的人员,他们可能会将您的二进制文件反汇编成几乎可读的内容。

答案 10 :(得分:0)

也许我错了,但我不相信IIS会提供bin文件夹中的任何文件(无论如何它都不适合我,而且我认为这是设计方式与你无法下载web的方式相同.config - 它甚至不会列出目录内容)。如果这是正确的,那么我不相信黑客首先获得dll的方式,除非他们可以获得文件系统访问服务器。

如果您按照上面给出的关于编译成单个dll的建议,我认为您不需要混淆器(除非您担心有文件系统访问的人,在这种情况下我认为您还有其他问题!)< / p>

答案 11 :(得分:0)

您使用的是哪个版本的VS?在VS2005 SP1中,有一个名为Web Deployment的新项目类型。右键单击解决方案资源管理器中的网站名称,您应该看到一个选项“添加Web部署项目” - 这会向您的解决方案添加一个新项目,该项目将创建一个DLL并更改aspx页面以引用它。

当您构建solitution时,它会在Web部署项目文件夹中创建具有单个dll的站点版本。将其复制到服务器,设置您的数据库和任何文件系统权限(例如上传等),然后您就离开了。

答案 12 :(得分:0)

当您将项目发布为二进制文件时,编译器将在bin文件夹中创建DLL,并且还会创建您拥有的所有页面,但不会创建代码,只有一行表示其标记文件。因此,当用户浏览您的网站时,他们将照常浏览网页。然后,您的页面将在服务器端指向dll中的正确代码

答案 13 :(得分:0)

在您作为DLL发布后,不要忘记将它(以及其他服务器端文件,如Web.config)放在IIS不提供的路径中。