修复.NET程序中的错误,无需访问源代码

Eri*_*rik 10 .net reflection reverse-engineering recompile

我有一个经常使用.NET程序.这个程序有一个非常烦人的小错误,应用程序的开发人员无处可寻.

我在反射器中找到了问题的位置,只想在这里添加一个if语句,然后重新编译该程序.

最简单的方法是什么?

我尝试在反射器中使用导出功能,但它似乎并不完美.例如,缺少很多using-directives,并且不能正确导出来回转换为int的枚举.我相信我可以通过一些工作解决这个问题,但我想知道是否有更简单的方法来做到这一点.

更新:解决这个问题:

该程序是单个文件可执行文件

  1. 使用C#-view查找反射器中的错误.然后切换到IL-view以查看在步骤5中应该查找的内容.
  2. 使用ildasm打开要更改的程序
  3. 按转储并选择一个空文件夹,默认设置适合我.
  4. 找到此文件夹中的.il文件,然后打开任何texteditor
  5. 找到步骤1中的代码.
  6. 用新代码替换它,在我的情况下,我只需用简单的返回(IL_0000:ret)替换函数的所有内容.我认为所有修复都不会那么容易.
  7. 从步骤3打开文件夹中的命令窗口
  8. 运行ilasm,我还必须包含原始exe中的一些资源.这些是使用ildasm自动输出的.我用这个ilasm像这样的"C:\ Windows\Microsoft.NET\Framework\v2.0.50727\ilasm.exe"test.il /resource=test.res /output=FixedProgram.exe

完成!我现在只使用固定程序几分钟但它似乎像以前一样工作除了bug :)

我还遇到了应用程序设置的一些问题.在%appdata%\ ProgramName中有一个名为ProgramName.exe_Url_qa5i3p42aomuvoxpuxuficvbmngksgjs的文件夹,其中存储了所有设置.我的新可执行文件创建了一个这样的新文件夹,最后用不同的随机字母和默认设置.要复制之前使用的设置,只需将旧文件夹的所有内容复制到新文件夹即可.

Jb *_*ain 8

我建议你使用Reflexil插件反射.它允许您轻松修改程序集,甚至可以用您自己的C#代码替换方法体.


Sim*_*ens 1

如果程序很简单,理论上你可以使用反射器将整个程序反转回C#,进行更改并重新编译。

或者,您可以尝试像ILDasm这样的工具,它应该允许您提取 IL,进行更改(在 MSIL 中),然后重新组装(使用ILAsm)。显然,要做到这一点,您必须弄清楚如何在 IL 中编写更改,因此您可能需要做一些实验来了解 if 语句如何编译。

我怀疑两者都需要花费相当多的时间才能重新编译工作。

祝你好运。

如果你让它工作,请回复并让我知道,我对你是如何做到这一点很感兴趣。