2

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

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

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

对于 .net 中的反编译项目,这种情况听起来正常吗?有什么方法可以更有效地制作可构建的项目?我用错工具了吗?这是混淆的症状(我根本没有经验)吗?

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

4

1 回答 1

2

我使用过 dotPeek、ILSpy 和 Reflector,它们在反编译成 C# 代码方面似乎都做得很好。我只反编译了一个完整的项目,这是使用 Reflector 的,它需要大量的手动工作来重新组装项目源代码并使其工作。

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

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

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

于 2013-09-10T15:11:50.043 回答