【问题标题】:Why can we decompile .NET assemblies easily?为什么我们可以轻松地反编译 .NET 程序集?
【发布时间】:2011-10-04 06:38:27
【问题描述】:

为什么我们可以轻松地反编译 .NET 程序集?

我们可以轻松反编译 .NET EXE 文件的主要原因是什么?

有很多软件可以用来混淆我的应用程序代码,但为什么需要混淆来保护?微软不能让人们很难知道吗?主要原因可能是 .NET 代码应该变成 IL 代码吗?这是真的吗?

【问题讨论】:

  • 你可能想先阅读this question
  • 回到基本问题,您是否想将您的应用程序/技术/研究的代码丢失/暴露给其他人?情报属性?
  • 这本书对您来说可能很有趣:Jeffrey Richter 的“CLR via C#”(ISBN 0735627045)。
  • 另外:请注意这与 java 没有太大区别;这不是“不能让它变得困难”的问题 - 简单地说:这不是要求(并且会是一个虚假的安全饰面)
  • 4:09 进入本次采访关键 IL 设计师 Vance Morrison:channel9.msdn.com/shows/Going+Deep/…

标签: c# decompiler


【解决方案1】:

IL 代码(这是 .NET 程序集所包含的)是一种比 CPU 程序集( x86、ARM 等),这是更底层且不容易的(因为有各种寄存器等)。

所以当 C# 编译器编译成 IL 代码时,构造(猜测)原始 C# 代码要容易得多。

【讨论】:

  • 这是在回答问题吗?
  • 标题上写着why can we decompile .NET assemblies easily?,而且这个答案确实对它很公平:)
【解决方案2】:

为什么微软不这样做?因为您无法保护您的代码免受坚定的黑客攻击。像最大的软件供应商一样,他们不会制造这样的内置软件,但他们让您拥有一个工具市场,您可以在其中根据您的需求和口袋大小选择最适合您的工具。

【讨论】:

    【解决方案3】:

    当您使用 DotPeek 或 Reflector 打开 .NET DLL 时,您正在将 IL 转换回您选择的语言的代码。可视化这一点很重要,因为它不会返回与编写的完全相同的代码,而只是生成相同 IL 的代码。

    【讨论】:

    • 这有点吹毛求疵 :-) 您可能会有更好的格式代码但没有 cmets。即使在发布模式下,编译器也不会引入很多变化。
    • 它会在一些地方优化您的代码,但通常看起来有点不同。简单的语句变化不大。
    • 有时它会做完全错误的事情(看着你的反射器!)。
    猜你喜欢
    • 2011-11-12
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    • 2013-05-31
    • 2016-07-25
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    相关资源
    最近更新 更多