我有一个用C#编写的应用程序(当然没有源代码),需要稍微更改一下。例如,我需要停止创建不必要菜单的几行代码。所以我想我应该对它们进行评论。
源代码未被混淆。我知道我可以使用Reflector / Reflexil等工具完全反编译,更改和编译。但每个人都知道,通过这样做,许多代码部分将无法再次编译! Reflector(或任何其他产品)中是否有一种方法可以在没有此过程的情况下禁用/更改部分内容?
感谢。
答案 0 :(得分:17)
您可能想尝试使用dnSpy。它是来自ILSpy的.NET汇编编辑器,反编译器和调试器。
答案 1 :(得分:4)
如果您确实需要这样做,可以使用Reflector(或类似产品)对其进行反编译,然后使用它来尝试在.Net中重新创建一个可生成相同可执行文件的解决方案。
您可能会遇到以下问题:
这更不用说与此相关的潜在法律问题。如果可执行文件是在允许您执行此操作的许可证下发布的,那么您很可能可以访问源代码。因此,您无法访问源代码这一事实意味着您所做的建议可能并不合法。
答案 2 :(得分:3)
最终我设法"禁用"编译的exe中的几行代码。
我使用Reflector和Reflexil插件安装。 Reflexil允许我编辑MSIL指令,然后将结果保存回exe文件。因此,它涉及学习一些MSIL指令,特别是"无操作"命令(使一行代码什么也不做)。要查看说明列表和教程,请参阅here和here。
希望它可以帮助别人。
答案 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文件夹)粘贴到另一台具有所有最近更改的计算机上。