使用 ILSpy 修改代码

逆向工程 拆卸 。网 C#
2021-06-19 20:50:14

我想稍微修改一个exe文件。

使用 ILSpy,我看到了我需要的所有代码,但我不知道如何修改代码。

我尝试在导出 .cs 文件的 ILSpy 上“保存代码”,但是当我在 Visual Studio 中打开 .cs 文件并更改代码时,我无法编译或运行修改后的代码。

有没有办法做到这一点?

PS 我读到我可以更改汇编代码,但我不知道汇编,所以如果有办法的话,我必须在高层次上做到这一点。

4个回答

您可以按照以下模式工作:

  • 将 ILSpy(或 Reflector)中的代码保存为 .cs 文件(正如您已经描述的那样)
  • 尝试从该代码创建一个 Visual Studio 项目

  • 在 Visual Studio 中进行所有修改。

  • 如果 VS 编译代码,它也应该在 ILSpy 和/或 Reflector 中打开。

  • 如果不是,则很可能不完整和/或不正确。在这种情况下,您可能会简化代码,直到获得可编译的内容,以识别“缺失的链接”。

  • 通过这种方式,我能够重新编译更复杂的
    软件。首先静态地做所有事情,直到你
    在 VS 中创建了一些代码。然后测试它并扩展它。

不能在 ILSpy 或 Reflector 中重新编译的代码部分(每个都有自己的优点和缺点)可以在 IL 中导出,也可以手动重新排列以在工具中重新编译,然后在 Visual Studio 中进一步处理。不幸的是,VS 不允许内联 IL 汇编代码。

例如,Reflector 保护自己(以及其他方法,如混淆)免受重新编译的无用跳转混淆重新编译器。ILSpy 大多能够应付这个。

例如,ILSpy 不能重新编译子类(即类中的类)。在 C# 视图中,它们只是不显示在类树中。在 IL 视图中,您可以看到所有这些。

对于仍在寻找此问题答案的人,我建议您尝试使用dnSpy - 它允许您完全按照请求者的要求执行操作 - 修改高级代码并重新编译,以供参考。

它并不完美,但我已经能够对我们没有最新源代码的内部 exe 进行小的更改(心怀不满的员工,不要问)。

https://github.com/dnSpy/dnSpy

目前,无法直接使用 ILSpy 修改二进制文件。唯一的解决方案是您描述的解决方案,导出源代码并重新编译它。

但是,您正在寻找的功能包含Reflexil插件中的.NET Reflector

我几年前使用的软件,允许有限制地直接在工具本身生成的代码的编辑,但是当我说“限制”,我真的意味着限制。事实上,此功能实际上已从该软件的较新版本中删除。具有此功能的旧版本不再可用,但它仍然是一个不错的免费 .NET 反编译器,因此如果您想查看它,它被称为 DotNet Resolver。

还有已经提到过的 Reflector 的 Reflexil 插件,但它也非常不可靠和有限。

但是,如果您真的想完成任务,我建议您使用随 Visual Studio 安装的 ILDASM 和 ILASM 工具。

我知道您希望能够只编辑高级代码,但这不太可行。您可以使用 Reflector 将从反汇编的 .NET 应用程序生成的源代码导出为项目,但随后您会遇到错误、缺少依赖项等问题需要处理。

使用 ILDASM 和 ILASM,您将直接编辑 MSIL,但这确实是修改 .NET 应用程序的最佳方式。MSIL 实际上非常简单,您无需处理由 Reflector 等工具生成的源代码,这些工具通常充满错误。此外,您通常不必担心混淆。在 99% 的情况下,您始终能够将 .NET 应用程序分解为 MSIL,然后重新组装它们,不会出现任何问题。

如果您不熟悉 MSIL,有大量在线资源可帮助您编辑和理解 MSIL。祝你好运!