修改编译的.Net Exe

时间:2013-08-26 05:10:36

标签: c# .net-assembly reflector

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

源代码未被混淆。我知道我可以使用Reflector / Reflexil等工具完全反编译,更改和编译。但每个人都知道,通过这样做,许多代码部分将无法再次编译! Reflector(或任何其他产品)中是否有一种方法可以在没有此过程的情况下禁用/更改部分内容?

感谢。

6 个答案:

答案 0 :(得分:17)

您可能想尝试使用dnSpy。它是来自ILSpy的.NET汇编编辑器,反编译器和调试器。

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

答案 1 :(得分:4)

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

您可能会遇到以下问题:

  1. 混淆代码
  2. 反编译显示特定部分的准确代码的部分,但由于某种原因,它只是在您的新解决方案中不起作用(然后您做什么?)
  3. 这更不用说与此相关的潜在法律问题。如果可执行文件是在允许您执行此操作的许可证下发布的,那么您很可能可以访问源代码。因此,您无法访问源代码这一事实意味着您所做的建议可能并不合法。

答案 2 :(得分:3)

最终我设法"禁用"编译的exe中的几行代码。

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

希望它可以帮助别人。

答案 3 :(得分:2)

为了完整起见: 另一种可能的解决方案是使用ildasm http://msdn.microsoft.com/en-US/library/f7dy01k1%28v=vs.80%29.aspx MSIL反汇编程序,编辑MSIL并将其反馈给ilasm。

这个解决方案的实用程度当然取决于你

答案 4 :(得分:0)

此主题可能有所帮助:dotnet dll decompile and change the code

上次当我尝试使用反射反编译源代码时,虽然dll没有被混淆,但是关于资源和其他潜在客户的编译问题太多了。因此,除了提取源和修改之外,还有一些事情可以让你的新dll工作为旧的。

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

答案 5 :(得分:-2)

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

你不需要做任何特殊的事情。如果不是,那么只需在代码中进行更改并将debugg文件夹的新exe(带有debugg文件夹)粘贴到另一台具有所有最近更改的计算机上。