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

C# 为什么我们可以轻松地反编译.NET程序集?,c#,decompiler,C#,Decompiler,为什么我们可以轻松地反编译.NET程序集 我们可以轻松反编译.NET EXE文件的主要原因是什么 我可以使用很多软件来混淆我的应用程序代码,但为什么它需要混淆以获得保护呢?微软能不能让基本上很难知道?主要原因可能是.NET代码应该变成IL代码?这是真的吗?当您使用DotPeek或Reflector打开.NET DLL时,您正在将IL转换回所选语言的代码。将其可视化是很重要的,因为它不会返回与编写的代码完全相同的代码,而只是生成相同IL的代码。为什么Microsoft不这样做?因为你不能保护你的代

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

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


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

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

为什么Microsoft不这样做?因为你不能保护你的代码免受黑客的攻击。像最大的软件供应商一样,他们不生产这样的内置工具,但他们让您拥有一个工具市场,您可以根据自己的需要和口袋大小为自己选择最合适的工具。

IL代码(即.NET程序集所包含的)是一种更高级(虚拟)的机器语言(和CPU组件(x86、ARM等)相比,CPU组件(x86、ARM等)更简单,仅基于堆栈,没有寄存器等,因为CPU组件级别更低,也不容易(因为有各种寄存器等)


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

您可能想先读回基本问题,您是否想将您的应用程序/技术/研究的代码丢失/公开给他人?智能属性?这对您来说可能也是一个有趣的读物:“CLR via C#”Jeffrey Richter(ISBN 0735627045)。另外:请注意,这与java没有太大区别;这不是一个“不能让它变得困难”的问题——简单地说:这不是关键IL设计师Vance Morrison的采访要求(这将是一个虚假的安全伪装):这有点吹毛求疵:-)您可能会有格式更好但没有注释的代码。即使在发布模式下,编译器也不会引入太多的更改。在一些地方,它会优化代码,而这些地方的代码通常看起来有点不同。简单的语句不会有太大的变化。有时它会做完全错误的事情(看着你的反射器!)这是不是回答问题?标题写的是代码>为什么我们可以很容易地反编译.NET程序集?< /代码>和这个答案对它是公平的: