如何使用dnlib插入对MessageBox.Show()的调用?

时间:2018-12-24 15:02:27

标签: reverse-engineering obfuscation opcode patch dnlib

有人可以发布一个使用dnlib插入对MessageBox.Show()的调用的示例吗?我已经尝试了数周,并且没有在线示例。这是我现在拥有的代码:

string r = "";
foreach (Instruction i in method.Body.Instructions)
{
    r += i.ToString() + "\r\n";
}
r += "\r\n\r\n\r\n\r\n";

method.Body.Instructions.Clear();
method.Body.Instructions.Add(dnlib.DotNet.Emit.OpCodes.Nop.ToInstruction());
method.Body.Instructions.Add(dnlib.DotNet.Emit.OpCodes.Ldstr.ToInstruction("changed method here!"));
method.Body.Instructions.Add(dnlib.DotNet.Emit.OpCodes.Call.ToInstruction(GetSystemMethod(typeof(MessageBox), "Show", new Type[] { typeof(string)})));
method.Body.Instructions.Add(dnlib.DotNet.Emit.OpCodes.Pop.ToInstruction());
method.Body.Instructions.Add(dnlib.DotNet.Emit.OpCodes.Ret.ToInstruction());
method.Body.UpdateInstructionOffsets();

foreach(Instruction i in method.Body.Instructions)
{
    r += i.ToString() + "\r\n";
}
MessageBox.Show(r);
module.Write(Path.GetDirectoryName(file) + "\\protected-" + Path.GetFileName(file));

这是它打印的消息:

enter image description here

第一个块是原始的工作方法。如您所见,除了加载的字符串之外,其他所有内容都是相同的。

这是在尝试编写模块时发生的异常:

dnlib.DotNet.Writer.ModuleWriterException: 'Method System.Windows.Forms.DialogResult System.Windows.Forms.MessageBox::Show(System.String) (06002BF5) is not defined in this module (TestProj.exe). A method was removed that is still referenced by this module.'

enter image description here

您能解释一下我做错了什么吗,或者如何正确插入消息框?我感到奇怪的是,互联网上没有任何这样的基本功能的例子。

在此先感谢您的帮助!

0 个答案:

没有答案