C++ C++;功能挂钩

C++ C++;功能挂钩,c++,windows,dll,assembly,hook,C++,Windows,Dll,Assembly,Hook,我有一个DLL的源代码。已编译的DLL由应用程序加载。该应用程序还加载其他几个DLL。我已经从应用程序和所有DLL中反汇编了asm代码,但我只有一个DLL中的源代码。应用程序和所有DLL是一个进程 我想在我的源代码所在的DLL中编写一个函数钩子。我想钩住其他DLL的函数。钩住的函数应该由所有其他DLL、应用程序和我编译的DLL调用(不应该调用原始函数) 问题是,我不能直接钩住一个DLL,因为它不是自己的进程。不知何故,我必须钩住DLL,它们被加载到应用程序中。怎么做 作为参考,我不能用一个DLL

我有一个DLL的源代码。已编译的DLL由应用程序加载。该应用程序还加载其他几个DLL。我已经从应用程序和所有DLL中反汇编了asm代码,但我只有一个DLL中的源代码。应用程序和所有DLL是一个进程

我想在我的源代码所在的DLL中编写一个函数钩子。我想钩住其他DLL的函数。钩住的函数应该由所有其他DLL、应用程序和我编译的DLL调用(不应该调用原始函数)

问题是,我不能直接钩住一个DLL,因为它不是自己的进程。不知何故,我必须钩住DLL,它们被加载到应用程序中。怎么做

作为参考,我不能用一个DLL的偏移量钩住一个函数,因为该函数在应用程序的内存中,而不是在DLL进程本身的内存中

作为参考,我不能钩住一根绳子 从一个DLL偏移的函数, 因为函数在 应用程序的内存,而不在 DLL进程本身的内存


当一个进程加载DLL时,它会被加载到该进程的地址空间中。DLL没有自己的进程。如果要在远程进程中运行的DLL中挂接函数,可以将自己的DLL注入远程进程。现在,注入的DLL共享目标进程的地址空间和目标DLL。在您自己的DLL代码中,您可以调用诸如GetModuleHandle之类的API来获取目标DLL的基址,并处理DLL中的所有挂接代码,因为您的代码不是在“您的”应用程序中运行的,而是在他们的应用程序中运行的,就像他们自己加载一样。

您能给出一个想要这样做的有效理由吗,函数挂钩往往意味着你想进行某种黑客攻击:\Jesus,为什么微软会提供类似迂回的东西?添加API以获得更多可能性。我是一个服务器管理员,我被黑客攻击了。我必须更好地处理传入的connect软件包。在windows上,黑客攻击很容易,这是一个原因,它为您提供了所需的所有功能:P WinHook API是您可能希望阅读的内容,但我希望您正在做一些合法的事情。我知道所有这些内容。我只想知道我的问题的答案:/SetWindowsHook返回一个HHOOK,使用句柄获取运行库的进程的句柄,您就在其中。