15

我有一个用 C# 编写的应用程序(当然没有源代码),需要进行一些更改。例如,我需要停止几行创建不必要菜单的代码。所以我想我应该把它们注释掉。

源代码没有被混淆。我知道我可以使用 Reflector/Reflexil 等工具完全反编译、更改和再次编译。但是大家都知道,这样做的话,很多部分代码都不会再编译了!Reflector(或任何其他产品)中是否有一种方法可以在没有此过程的情况下禁用/更改其中的一部分?

谢谢。

4

6 回答 6

30

您可能想尝试 dnSpy。它是从 ILSpy 派生的 .NET 程序集编辑器、反编译器和调试器。

https://github.com/0xd4d/dnSpy

于 2015-12-31T15:39:00.993 回答
6

如果您确实需要这样做,您可以使用 Reflector(或类似产品)对其进行反编译,然后使用它来尝试在 .Net 中重新创建将产生相同可执行文件的解决方案。

您可能会遇到以下问题:

  1. 混淆代码
  2. 反编译向您显示特定部分的准确代码的部分,但由于某种原因,它在您的新解决方案中不起作用(然后您会做什么?)

更不用说与这样做相关的潜在法律问题。如果可执行文件是根据允许您执行此操作的许可证发布的,那么您很可能可以访问源代码。因此,您无权访问源代码这一事实意味着按照您的建议进行操作可能是不合法的。

于 2013-08-26T05:32:35.673 回答
4

最终,我设法在编译的 exe 中“禁用”了几行代码。

我使用了安装了 Reflexil 插件的 Reflector。Reflexil 允许我编辑 MSIL 指令,然后将结果保存回 exe 文件。因此,它涉及学习一些 MSIL 指令,尤其是“无操作”命令(让一行代码什么都不做)。要查看说明列表和教程,请参阅此处此处

希望它可以帮助别人。

于 2015-04-06T14:30:47.070 回答
3

为了完整起见:另一个可能的解决方案是使用 ildasm http://msdn.microsoft.com/en-US/library/f7dy01k1%28v=vs.80%29.aspx MSIL Disassembler,编辑 MSIL 并提供它回到伊斯兰教。

这个解决方案有多实用,当然取决于你

于 2013-08-26T07:26:21.620 回答
1

该线程可能会有所帮助:dotnet dll 反编译和更改代码

上次当我尝试使用反射对源代码进行反编译时,尽管 dll 没有被混淆,但我遇到了太多关于资源和其他子组件的编译问题。因此,除了提取源代码和进行修改以使您的新 dll 像旧 dll 一样工作之外,可能还有其他事情。

所以我建议使用另一个线程中提到的任何选项直接进行 dll 操作。

于 2013-08-26T05:47:56.980 回答
-2

如果您在测试 exe 文件的同一台机器上有源代码,并且如果您在 Visual Studio 中对源代码进行更改,那么在编译时它会自动反映在您的 exe 文件中。

你不需要为它做任何特别的事情。如果不是,那么只需更改代码并将调试文件夹的新 exe(带有调试文件夹)粘贴到另一台具有所有最近更改的机器上。

于 2013-08-26T05:35:24.930 回答