- 我也知道发布时可以预编译 ASP.NET
- 我知道 .NET 应用程序被编译为 MSIL,可以通过 Red Gate 的 .NET Reflector 等工具轻松恢复为任何 .NET 语言。
- 我想开发和交付一个 ASP.NET 站点,买方将在其中托管该站点,但无法访问代码。
有什么办法吗?
有什么办法吗?
以我的经验,混淆代码的人不会产生值得麻烦的代码。
告诉他们不要。你永远不会阻止一个坚定的逆向工程师,但如果它在合同中,你将有追索权反对从中获利的人。
混淆使调试变得更加困难,不仅对您,而且对您的客户(如果他们插入您的代码)也是如此。
避免它的另一个原因是倾向于包括“秘密”端口、加密密钥或握手。如果您的代码中有任何这些,您将需要找到一个非常不同的模型。
当您作为 dll 发布时,您可能会放心,您实际上并未将.cs/ .vb 文件发布到网站上。我认为这是最容易设置的路障。
我意识到您仍然可以从 DLL 中获取代码,但源文件本身不需要存在。
将您的 Web 项目转换为 Web 应用程序并构建它。输出将是一个 dll。将其与所有媒体文件(aspx、gif、png 等)一起推出,您的源应该对不勤奋的人隐藏。
这被称为“混淆”。有商业产品可以做到这一点。它不会完全阻止反编译,但它会弄乱你程序的内部,以至于很难对它做出正面或反面。
请注意,在特殊情况下它也可能会破坏您的代码,因此您将不得不使用它的选项,直到您让它工作。
Dotfuscator 很受欢迎,Visual Studio 附带一个精简的免费社区版本(虽然不确定是哪个版本)。
只是一个想法,但可能不是你的情况:
如果可能的话,在您的应用程序的某个位置使用 Web 服务。分布式代码使得只有客户端逻辑可用于反编译。
查看Manco .NET 许可系统。它提供了许可证保护、代码混淆和代码加密的功能。可以使用几种不同的方式来保护 ASP.NET 应用程序:使用来自 HTTP 请求的许可证密钥或域名称 (http://mancosoftware.blogspot.com/2010/10/protect-aspnet-application-using-name. html),例如。
有一种方法可以使用 Visual Studio 项目模板预编译 ASP.NET 网站或项目中的所有 aspx/ascx 文件:
在 ScottGu 的博客上阅读此处:VS 2008 Web 部署项目支持已发布
编译部署项目会为您的所有 aspx/ascx 文件创建一个程序集。
如果你想真正隐藏(使不可读)你的源代码,你应该使用专业的混淆器软件。
你可以看看混淆。 Dotfuscator是一个很好的起点。
你走在正确的轨道上。DLL 是一个很大的帮助,但它可以被反编译至少得到一些。
使用像 Dotfuscator 这样的混淆器是一个很好的额外步骤。 此常见问题解答是了解混淆器的良好起点
关键是要确定你在做什么。如果您正在部署代码,则很难阻止某人调用代码中的方法。如果您只是想阻止他们获取实际来源,那会更容易,并且应该可以进行混淆。
我总是选择将网站预编译成 DLL,而不是在线包含代码。这意味着匿名用户将无法访问您的代码。
但是,如果您担心对服务器具有管理员访问权限的人,他们可以将您的二进制文件反汇编成几乎可读的东西。
也许我错了,但我不相信 IIS 会提供 bin 文件夹中的任何文件(它不适合我,我认为这是设计使然,就像你不能下载 web.config -它甚至不会列出目录内容)。如果这是正确的,那么我不相信黑客有办法首先获取 dll,除非他们可以获得对服务器的文件系统访问权限。
如果您遵循上面给出的关于编译成单个 dll 的建议,我认为您不需要混淆器(除非您担心具有文件系统访问权限的人,在这种情况下,我认为您还有其他问题!)
你用的是哪个版本的VS?在 VS2005 SP1 中有一个新的项目类型叫做 Web 部署。右键单击解决方案资源管理器中的网站名称,您应该会看到一个选项“添加 Web 部署项目” - 这会向您的解决方案添加一个新项目,该项目将创建一个 DLL 并更改 aspx 页面以引用它。
当您构建解决方案时,它会在 Web 部署项目文件夹中创建具有单个 dll 的站点版本。将此复制到服务器,设置您的数据库和任何文件系统权限(例如上传等),然后您就离开了。
当您将项目发布为二进制文件时,编译器将在 bin 文件夹中创建 DLL,并且还会创建您拥有的所有页面,但不包含代码,只有一行表示它是一个标记文件。因此,当用户浏览您的网站时,他们将照常浏览页面。然后,您的页面将在服务器端指向 dll 中的正确代码
作为 DLL 发布后,不要忘记将它(以及其他服务器端文件,如Web.config
)放在 IIS 不提供的路径中。