通过十六进制编辑器修补 .net 可执行文件

逆向工程 。网 反编译器
2021-06-28 18:27:24

我正在尝试做的事情:

我有一个用 C# 编写的 .exe。Ilspy 显示了代码。它里面有一个DoWork带有静态字段的类SomeValue

// Program.DoWork
public static int SomeValue => 15;

然而,在代码中,它不是一个字段而是一个 getter 函数:

// return 15;
IL_0000: ldc.i4.s 15
IL_0002: ret

我想修改这个函数以返回 127。我在 .exe 二进制转储中找到了该函数的位置:

0x123456  1f 0f 2a

我在 HxD 编辑器中修改了 .exe,所以新的二进制转储有这个:

0x123456  1f 7f 2a

当我用 Ilspy 打开修改后的 .exe 时,它​​显示:

// Program.DoWork
public static int SomeValue => 127;

所以一切看起来都很好,但它不起作用。修改后的.exe文件仍然运行,好像SomeValue15

问题:

  1. 这是修改 .net 程序集的有效方法吗?
  2. 如果是,我错过了什么?
1个回答

结果是可执行文件是ReadyToRun可执行文件,因此它包含 IL 和预构建的 x86-64 映像。修改 IL 不起作用,因为在运行时只使用了 x86 图像。修改 x86 图像对我有用。ILSpy 能够与 C# 和 IL 一起显示 ReadyToRun 图像。