您可能知道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的值。问题在哪里?