- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这个项目,我在其中使用 MHook 库挂接了一些 Windows 函数 (GetOpenFileNameA, GetOpenFileNameW, GetSaveFileNameA, GetSaveFileNameW)
。这是我用来安装 Hook 的代码。
for(size_t i = 0; i < FunctionsCount; ++i)
{
HMODULE hModule = GetModuleHandleA(Function[i].ModuleName);
//[1]
if( !hModule )
return FALSE;
*Function[i].Original = GetProcAddress(hModule, Function[i].Name);
if(*Function[i].Original == NULL)
return FALSE;
if(!Mhook_SetHook(Function[i].Original, Function[i].Hooked))
return FALSE;
}
由于 DLL_PROCESS_ATTACH
原因,它从 DllMain
调用。
现在,当我使用 CreateRemoteThread
方法注入(inject)我的 Dll 时,它工作得很好,但是当我想使用 LoadAppInit_DLLs
机制设置系统范围的 Hook 时,我的 Hook 不起作用。经过几个小时的调试,我发现原因是我的 Dll 在 comdlg32.dll
之前加载(这是这些函数所在的模块),然后声明 [1]
返回 false,那么我的 Dll 没有加载。
到目前为止,我的解决方案是在 [1]
返回 false 时调用 LoadLibrary
。
HMODULE hModule = GetModuleHandleA(Function[i].ModuleName);
//[2]
if( !hModule )
{
LoadLibraryA(Function[i].ModuleName);
hModule = GetModuleHandleA(Function[i].ModuleName);
}
我发现很多网站都说这是邪恶的,我同意(即使工作正常)。此外,如果一个进程根本不使用公共(public)对话框,我将 Hook 永远不会被调用的函数。
如果有人可以提供帮助,也许是解决方法或对设置全局 Hook 的另一种方法的解释,我们将不胜感激。提前致谢
最佳答案
您需要 Hook LoadLibraryXXX
函数,并在它们成功执行后检查您的模块是否已加载(调用 GetModuleHandle
),如果已加载则 Hook 它。
固定 Hook 的 dll 也是一个好主意,这样它们就不会再被卸载。
关于c++ - 使用 MHook 的系统范围的钩子(Hook),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18859133/
我有这个项目,我在其中使用 MHook 库挂接了一些 Windows 函数 (GetOpenFileNameA, GetOpenFileNameW, GetSaveFileNameA, GetSave
我一直在尝试 Hook CWnd::Create 方法。我尝试使用 SetWindowsHookEx api 进行 Hook 。但这并不能始终如一地工作。所以,我关注了下面的博客http://www.
我正在尝试 Hook StartDocW通过 mhook 拦截打印.我使用 AppInit_DLL 加载我的库。 DLL代码很简单: #include #include "mhook/mhook-l
我是一名优秀的程序员,十分优秀!