如何修补 C# 二进制文件?

逆向工程 修补 C# 网络间谍
2021-06-13 02:32:34

我有 C# 二进制文件。我能够用来dnSpy反编译它,并进行分析。二进制文件被混淆器xenocode混淆了。

我发现如果我找到正确的指令偏移量并替换指令字节,我可以直接操作 IL 指令。

原始字节和 C# 代码(用字母替换,因此可读):

a.b().c.d = (int)e.f;

 06 6F A0010006 6F 9302000A
 ^  ^  ^        ^  ^-------- T2
 |  |  |        \----------- callvirt to set_d
 |  |  \-------------------- T1
 |  \----------------------- callvirt to get_f
 \-------------------------- ldloc.0

我想要实现的目标和结果字节:

a.b().c.d = 6;

 1C 00 00000000 6F 9302000A
 ^  ^           ^  ^-------- T2
 |  |           \----------- callvirt to set_d
 |  |  
 |  \----------------------- 5x nop, so the length of file is same
 \-------------------------- ldc.i4.6

我能够无错误地反编译更改后的二进制文件,并且可以观察更改后的指令,但是当二进制文件执行该区域时,它会死掉。有任何想法吗?

0个回答
没有发现任何回复~