【问题标题】:Can I protect my ASP.NET application against decompilers?我可以保护我的 ASP.NET 应用程序免受反编译器的攻击吗?
【发布时间】:2009-02-19 17:48:04
【问题描述】:
  1. 我也知道发布时可以预编译 ASP.NET
  2. 我知道 .NET 应用程序被编译为 MSIL,可以通过 Red Gate 的 .NET Reflector 等工具轻松恢复为任何 .NET 语言。
  3. 我想开发和交付一个 ASP.NET 网站,买家将在该网站上托管该网站,但无法访问代码。

有什么办法吗?

【问题讨论】:

  • 这是我第一次正式看到它被称为 Red Gate's Reflector,而不是 Lutz Roeders Reflector。在某种程度上有点悲伤
  • 它是如何出现在我的屏幕上的

标签: .net asp.net decompiling


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    混淆使调试变得更加困难,不仅对您,而且对您的客户(如果他们插入您的代码)也是如此。

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

    【讨论】:

    【解决方案3】:

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

    请注意,在特殊情况下它也可能会破坏您的代码,因此您将不得不使用它的选项,直到您让它工作为止。

    Dotfuscator 很受欢迎,Visual Studio 附带一个精简的免费社区版本(虽然不确定是哪个版本)。

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

      • 那么.cs/.vb 的代码在哪里呢?顺便说一句,您指的是我们将网站发布到 dll 中的选项 1
      • 这确实取决于您发布网站的方式,如果您只使用“发布”工具,它将上传 aspx、aspx.cs 等。从 C# 中的 DLL 中获取数据只需不到1 分钟,所以如果他觉得不那么安全,就把它弄糊涂是一条好路。
      • 代码进入 dll,所以当您以这种方式发布时,不需要包含它。正如其他人提到的,是的,如果dll可以部分拔出。
      【解决方案5】:

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

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

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          【解决方案7】:

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

          在 ScottGu 的博客上阅读此处:VS 2008 Web Deployment Project Support Released

          编译部署项目会为您的所有 aspx/ascx 文件创建一个程序集。

          如果你想真正隐藏(使不可读)你的源代码,你应该use a professional obfuscator software

          【讨论】:

            【解决方案8】:

            您可以研究混淆。 Dotfuscator 是一个很好的起点。

            【讨论】:

              【解决方案9】:

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

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

              关键是要确定你在做什么。如果您正在部署代码,则很难阻止某人调用代码中的方法。如果您只是想阻止他们获取实际来源,那会更容易,并且应该可以进行混淆。

              【讨论】:

                【解决方案10】:

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

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

                【讨论】:

                  【解决方案11】:

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

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

                  【讨论】:

                    【解决方案12】:

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

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

                    【讨论】:

                    • 我完成了“添加 Web 部署项目”步骤,这确实为我的解决方案创建了一个新项目。但它没有创建 DLL 或 ASPX 页面。只需 test_deploy.wdproj、test.sln 文件。
                    【解决方案13】:

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

                    【讨论】:

                    • 如何将我的文件发布为二进制文件?
                    【解决方案14】:

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

                    【讨论】:

                    • 通常 IIS 不提供二进制文件和配置文件,即使它们与静态资源位于同一文件夹中
                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2012-10-18
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2011-01-29
                    • 1970-01-01
                    相关资源
                    最近更新 更多