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