如何挂钩到系统函数

逆向工程 C++ dll 函数挂钩 dll注入
2021-07-07 18:25:49

如何挂钩外部库函数,例如 OpenGL。

我有一个被我试图改变行为的程序使用的函数。功能是:

lVar17 = glfwCreateWindow(uVar22,uVar25,pplVar29,uVar30,0);

现在,我想在不更改调用函数的情况下更改该函数。即调用者函数和上面的调用将保持完全相同,但 glfwCreateWindow 将返回不同的东西,即它将像这样重写:

glfwCreateWindow (uVar22,uVar25,pplVar29,uVar30,0) {

    GLFWwindow* window = glfwCreateWindow(uVar22,uVar25,pplVar29,uVar30,0);
    HWND hwnd = FindWindow(NULL, WindowName);
    GLFWwindow* atchdHwd = glfwAttachWin32Window(hwnd, window); 
    return atchdHwd;
}

有没有办法做到这一点?

1个回答

两种可能:

  1. 修补call指令以指向您选择的目的地,例如该.text部分末尾和后续部分之间的“代码洞” 在那里写你的函数,或者写到你jmp的 DLL/一块包含你的函数的分配内存中。
  2. 覆盖 的 IAT 条目glfwCreateWindow,并将其指向您的新函数。请注意,这将影响对该函数的所有调用。如果您只想影响单个呼叫站点,例如,您可以检查呼叫者的返回地址以确保它是您想要的特定呼叫站点。