C# 反编译程序?
这是真的吗? 有人能从MSIL反编译我用C#编写的代码吗?C# 反编译程序?,c#,.net,C#,.net,这是真的吗? 有人能从MSIL反编译我用C#编写的代码吗? 从.exe文件中?正如@Anthony Pegram和@Saif al-Harthi所指出的,reflector就是这样一个例子。它不会产生与您编写的代码完全相同的代码(主要是因为您编写的代码在成为IL之前经过了优化),但会产生类似的代码 使用一类称为代码混淆器的产品,有很多方法可以解决这个问题。我不知道如何比较这些产品,但是一个简单的网络搜索“C#Obfuscator”会带来大量的免费和商业工具 正如@Marc Gravell所指出的
从.exe文件中?正如@Anthony Pegram和@Saif al-Harthi所指出的,reflector就是这样一个例子。它不会产生与您编写的代码完全相同的代码(主要是因为您编写的代码在成为IL之前经过了优化),但会产生类似的代码 使用一类称为代码混淆器的产品,有很多方法可以解决这个问题。我不知道如何比较这些产品,但是一个简单的网络搜索“C#Obfuscator”会带来大量的免费和商业工具
正如@Marc Gravell所指出的,混淆不会发生在源代码上。根据我的理解,模糊处理通常是构建过程的一部分,因此产生的IL就是模糊处理的。基本上是正确的。一个非常聪明的程序员Lutz Roeder编写了一个非常优秀的反编译器,名为(现在为)。它非常擅长将IL翻译回C#或VB.NET代码。它不是完全的魔法,它不能
- 将常量转换回其常量标识符
- 恢复局部变量的名称
- 反编译匿名方法,中间形式除外
- 反编译迭代器,如上所述
- 反编译lambdas,如上所述
- 反编译使用承诺的C#5 async和Wait关键字的代码,如上所述
- 恢复代码中的注释
在代码中使用大量lambda和迭代器已经是混淆代码的一种很好的方法。将其反向工程到原始代码是非常困难的。Lutz在他放弃Reflector的同时也放弃了Reflector,这不是巧合,因为C#变得太难进行可靠的反编译。开源替代方案:。我已经试过了,我自己封装了大约99%的reflector功能。这里有一个全面的反编译器列表:
- -开源.NET程序集浏览器、编辑器、反编译器和调试器
- -ILSpy是开源的.NET程序集浏览器和反编译器
- -的反编译引擎
- -基于ReSharper捆绑反编译器的免费独立工具。它可以可靠地将任何.NET程序集反编译为等效的C#或IL代码。它可以直接基于原始二进制文件创建VisualStudio解决方案[专有][免费]