2

是否可以将 .NET 2.0 二进制文件 (*.exe) 反编译为某种可读代码?或者如果没有,只是从中提取一些信息(例如方法名称、调试信息等)?

4

5 回答 5

15

您可能想查看Reflector,它应该将程序集显示为 C# 或 IL。

编辑:

随着 Reflector 成本的增加,我已经切换到ILSpy来满足我的日常需求。

于 2010-02-16T16:22:26.310 回答
3

将 exe 放入 ILDASM 或 Dot Net Reflector 应该可以解决问题。

于 2010-02-16T16:23:10.620 回答
1

搜索 Lutz Roeder,您会发现:

http://www.red-gate.com/products/reflector/

于 2010-02-16T16:23:17.957 回答
1

我将在今天早些时候从这个问题中引用自己:

您永远无法回到完全相同的源,因为没有与已编译代码一起保存的元数据。

但是您可以从汇编代码中重新创建代码。

如果您对以下内容感兴趣,请查看这本书:逆向:逆向工程的秘密。

编辑

这里的一些编译器-101,如果你用另一个词定义一个编译器,而不是像“编译器”那样技术,它会是什么?

答:译者

编译器将您编写的语法/短语翻译成另一种语言,C 编译器将其翻译成汇编甚至机器代码。C# 代码被翻译成 IL 等等。

您拥有的可执行文件只是原始文本/语法的翻译,如果您想“反转它”因此“将其翻译回来”,您很可能不会得到与开始时相同的结构。

一个更现实的例子是,如果您将英语翻译成德语,然后将德语翻译回英语,句子结构很可能会有所不同,可能会使用其他词,但含义和上下文很可能不会改变。

如果您从 C 转到 ASM,编译器/翻译器也是如此,逻辑是相同的,只是阅读方式不同(当然还有优化)。

关于 C#,您已经获得了很多很棒的工具,例如 Reflector。但是,如果代码被混淆,您将无法阅读它。

于 2010-02-16T16:26:42.020 回答
0

是的。首先,所有 .net 库都有带有类型信息的清单。可以使用反射或使用反射器等工具对它们进行有问题的询问。查看您需要查看的类的 system.reflection 命名空间。

于 2010-02-16T16:24:44.103 回答