如果语句不起作用,Ring3 API挂钩

时间:2017-08-23 12:37:36

标签: c# hook

您可能知道antiviruses正在通过使用jmp指令更改API的前几条指令来检测文件,该指令会将执行流程重定向到其自己的钩子处理程序函数。这样,AV会在此时注册堆栈中所有参数的API执行。我想做类似的事情,当某些东西(第三方软件)在子进程中挂起一些API(由CreateProcessA / W创建)例如MessageBoxA来执行带有API挂钩消息的if语句时。

到目前为止我所拥有的:

IntPtr address = GetProcAddress(GetModuleHandle("user32.dll"), "MessageBoxA");

if (address == IntPtr.Zero)
    Console.WriteLine("Function not found in the DLL or load failed");

Console.WriteLine(address);

if (address == (IntPtr)0xE9 || address == (IntPtr)0x90 || address == (IntPtr)0xC3)
{
    Console.WriteLine("API hooked");
}

地址计算得很好,但if语句address == (IntPtr)0xE9...不起作用,因为我的地址总是不同于那些应该是jmp,nop和ret的值。问题在哪里?

0 个答案:

没有答案