我必须修改一个相当老的程序来进行一些相对较小的更改 - 有一些控制变量,例如枚举结构、魔术字符串和来自以太坊的数字,在过去 4-5 年左右的时间里一直运行良好,但现在已经不好了。然而,自然地,在接下来的几年里,代码已经丢失,所以我们所拥有的只是反编译选项。
我使用了 dotPeek 和 JustDecompile 从 .dll 文件和 .exe 文件中获取 .csproj 文件(总共有 4 个 dll 和 1 个 exe),但这两种解决方案最终都产生了近乎无穷无尽的语法流错误,以及在 dotPeek 的情况下,问题的符号,例如对编译器变量的引用。
我显然可以尝试煞费苦心地处理每个文件并尽我所能修复每个语法错误,但看起来这可能需要长达一周的努力。我以前从未采用过反编译方法,所以当我意识到我正在查看的路径时,我立即怀疑我是否不知道自己在做什么。
对于 .net 中的反编译项目来说,这种情况听起来正常吗?有什么方法可以更有效地制作可构建的项目吗?我是否使用了错误的工具?这是混淆的症状吗(我对此完全没有经验)?
提前致谢,如果需要更多信息,请留下评论 - 因为这有点超出我的范围,我不能完全确定什么是有用的信息,什么不是。
最佳答案
我使用过 dotPeek、ILSpy 和 Reflector,它们在反编译为 C# 代码方面似乎都做得很好。我只反编译了整个项目,这是使用 Reflector 进行的,需要大量的手动工作来重新组装项目源代码并使其运行。
我怀疑混淆是您面临的问题;它们要么阻止上述工具进行反编译,要么很好地反编译成代码的混淆(但有效)版本。在这种情况下,代码对于人类来说就没有多大意义。
有时,这些源源不断的语法错误实际上是一些缺失的引用。我不知道为什么编译器变量会出现在反编译代码中,因为它们不应该出现在可执行文件中。
最近我遇到了与您相同的问题,在使用其中一种工具检查代码时,我使用 Mono.Cecil 库来更改现有程序集。这有点hacky,但对我来说节省了一些时间。我相信 Mono.Cecil 附带 ILSpy 包。
关于c# - 将 .NET 3.5 程序反编译为 C#,导出问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18722229/