【问题标题】:C# protecting application from code injectionC# 保护应用程序免受代码注入
【发布时间】:2012-12-18 04:17:43
【问题描述】:

我刚刚发现,即使我混淆了我的应用程序,它仍然可以使用代码注入来破解。这几乎让 C# 对我来说完全没用。真的没有办法保护或使这个过程很难做吗? “破解者”是否必须知道任何类名等才能做到这一点?谢谢!

更新:我正在尝试保护二进制 (exe) 而不是代码。

【问题讨论】:

  • 你把你的代码给了别人;您无法阻止他们修改它。
  • 您是想保护代码本身还是代码中的某些秘密?
  • 这个问题不是 C# 独有的。用几乎任何语言编写的应用程序都可以从二进制可执行文件进行逆向工程。
  • 我正在尝试保护二进制(winforms)应用程序而不是源代码。
  • 对于 .NET 特别是:stackoverflow.com/questions/506282/… ...换句话说,如果某人下定决心,您将无法阻止他们这样做。你只能让别人更难做到。

标签: c# security


【解决方案1】:

我在这里的某个地方从几个用户那里读到,无论编写什么代码,都可以对其进行反编译。这样想,系统怎么会知道如何运行代码呢?这是同一个概念。

不过,大多数开发人员(据我所知)通常不会太担心这一点。当然,这是一个很好的理由,不要在代码中包含任何敏感细节,而是在其他地方。

【讨论】:

  • 好吧,例如,如果我们看一下 gmail,它们的代码非常长而且像意大利面条一样很难理解,我至少可以让这个过程变得复杂,所以不值得做.
  • 好吧,为什么要投反对票?我给出了一个完全有效的答案,只是在回答时,您的更新不存在。所以,为了更新我的答案,我同意 J Torres 签署申请。
【解决方案2】:

如果您担心受保护的行业机密,则不可能向计算机发送正确的指令,但希望有能力的人无法阅读这些指令。如果您的目标是阻止某人修改您的 EXE,为什么不简单地签署您的可执行文件?

http://blogs.msdn.com/b/shawnfa/archive/2007/01/10/combining-strong-names-with-authenticode.aspx

【讨论】:

  • 谢谢!这会解决代码注入问题吗?我怎样才能使代码注入过程如此复杂以至于不值得做。我想保护我的授权协议。谢谢
  • @Kristian - 你不能。如果他们拥有源代码和管理权限,那么他们可以反编译并注入新代码。我怀疑您依赖于错误的安全机制。
  • 一如既往,有办法绕过任何形式的安全性。但是签署你的代码几乎可以保证你的二进制文件没有被第三方修改。
  • @Josh,这并不完全正确。签名的代码需要密码,因此即使他们有您的 pfx,但没有您的密码,他们也无法重新签署可执行文件。如果用户知道需要您对您的程序进行特定认证,这将缓解该问题。如果用户不顾一切地运行任何东西,那么你就无法真正帮助他们。
  • @JTorres - 但我可以修改程序集并删除强命名。如果我对所有提供的程序集都这样做,那么强命名就不再重要了。强命名并不能阻止我反编译和重新编译代码。它只会阻止我用未签名的程序集替换依赖程序集。
【解决方案3】:

任何 .NET 语言和 Java 都可以反编译。这包括 .Exe 和 .dll 文件。您需要做的是获得一个混淆代码的工具。

我在下面为您列出了一个,以便您了解一下: http://www.red-gate.com/products/dotnet-development/smartassembly/

【讨论】:

    【解决方案4】:

    你确定你的代码值得别人这样做吗?应用程序非常少。

    【讨论】:

      猜你喜欢
      • 2013-03-12
      • 2021-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-03
      • 2017-05-28
      • 1970-01-01
      相关资源
      最近更新 更多