将.NET 3.5程序反编译为C#,导出问题

时间:2013-09-10 14:54:16

标签: c# .net decompiling

我必须修改一个相当旧的程序来进行一些相对较小的更改 - 有一些控制变量,如枚举结构,魔术字符串和以太网中的数字,在过去的4 - 5年左右都运行良好,但现在不再好了。然而,自然地,在随后的几年中,代码已经丢失,所以我们所拥有的只是一个反编译选项。

我已经使用dotPeek和JustDecompile来从.dll文件和.exe文件中获取.csproj文件(共有4个dll和1个exe文件),但这两个解决方案最终都是一个接近无穷无尽的语法流错误,并且在dotPeek的情况下,表示诸如对编译器变量的引用之类的问题。

我显然可以尝试精心处理每个文件并尽可能地修复每个语法错误,但看起来这可能需要一周的努力。我之前从未采用过反编译方法,所以当我意识到我正在看的路径时,我立即想知道我是否不知道自己在做什么。

对于.net中的反编译项目,这种情况是否正常?有没有办法更有效地建立一个可建设的项目?我使用我的工具错了吗?这是混淆的症状(我根本没有经验)?

提前致谢,如果需要更多信息,请留下评论 - 因为这有点超出了我的联盟,我不完全确定什么是有用的信息,什么不是。

1 个答案:

答案 0 :(得分:2)

我使用过dotPeek,ILSpy和Reflector,似乎都很好地反编译成C#代码。我只反编译了一个整个项目,这是使用Reflector,它需要相当多的手动工作来重新组装项目源代码并使其工作。

我怀疑混淆是你面临的问题;他们要么停止反编译的上述工具,要么反编译为代码的混淆(但工作)版本。在这种情况下,代码对人类来说不会有多大意义。

有时,这些无休止的语法错误流实际上变成了一些缺失的引用。我不知道为什么编译器变量会出现在反编译代码中,因为它们不应出现在可执行文件中。

最近我遇到了和你一样的问题,在使用其中一个工具检查代码时,我使用Mono.Cecil库来改变现有的程序集。它有点hacky但在我的情况下节省了一些时间。我相信Mono.Cecil附带了ILSpy软件包。