1.我们要跨进程使用钩子,要把hook函数写在DLL文件中,这是微软明确规定的。也有其他方法,这里不多叙述
2.在DLL文件中 设置钩子.
这里需要调用线程ID,threadId,我们会在下面调用DLL的调用端中写入
hhookGetMsg=::SetWindowsHookEx(WH_GETMESSAGE,GetMessageHookProc,::GetModuleHandle(TEXT("dll.dll")),threadId)
//参数1:钩子类型
//参数2:钩子处理函数
//参数3:钩子所在的模块
//参数4:钩子要拦截的线程ID,如果要设置全局钩子,这里给0。
把这个SetWindowsHookEx()函数写在一个导出函数中,允许调用dll文件的程序调用
_declspec(dllexport) void SetHook(DWORD threadId)
{
hhookGetMsg=::SetWindowsHookEx(WH_GETMESSAGE,GetMessageHookProc,::GetModuleHandle(TEXT("dll.dll")),threadId)
}
SetHook()就是本dll的导出函数
3.在钩子处理函数中写入功能,当钩子截取到WM_NULL消息的时候,注入DLL文件。由于WM_NULL消息,是个没用的消息,应用程序一般不会收到这个消息,除非我们自己发送一个这个消息,所以我们在注入DLL的时候,只要给要注入的应用程序发一个WM_NULL消息,当钩子截取到WM_NULL的时候就注入钩子,就可以了。
LRESULT CALLBACK GetMessageHookProc(int nCode,WPARAM wParam,LPARAM lParam)
{
MSG* pMsg=(MSG*)lParam
if(WM_NULL==pMsg->message)
::LoadLibraryW(TEXT("D://MyDLL.dll"));
}
好了,编译DLL项目,产生DLL文件。
4.编写调用端,调用钩子
首先获取窗口句柄
HWND FindWindow( LPCTSTR lpClassName,
LPCTSTR lpWindowName
)
返回窗体句柄。hWnd.
hWnd=FindWindow(0,要注入dll的窗体的名称(例如:千千静听))
利用hWnd,查找窗体线程ID
threadId=GetWindowThreadProcessId(hWnd,0);
好了,我们有了线程ID了,可以调用钩子了。
SetHook(threadId)
这时钩子已经加载到目标线程中了。
向目标窗体发送WM_NULL消息
SendMessage(hWnd,WM_NULL,0,0)
钩子会在目标窗体受到消息前受到WM_NULL消息。由于钩子处理函数中做了判断,当受到WM_NULL消息时,加载DLL文件。所以DLL文件就注入到目标线程中了。
Hook.dll
dll文件修复方法:
1、解压缩下载的文件。
2、复制文件“Hook.dll”到系统目录下。
3、系统目录一般为:C:\WINNT\System32 64位系统为C:\Windows\SysWOW64。
4、最后点击开始菜单-->运行-->输入regsvr32 Hook.dll后,回车即可解决错误提示。
1、首先打开open4,选择Windows,并在之后选择游戏所在的文件夹里。
2、启动编辑模式(不启动无法装mod)并将AddonPeds 3.0 复制到游戏目录。
3、根据提示安装所有插件(如果以前没有下载,那么它就会显示在红框位置)。
4、然后将update复制到mod文件夹。
5、复制PedSelector.dll并粘贴到GTA V脚本文件夹中(游戏目录 \ scripts \)。
6、然后转到游戏目录本身,打开复制的AddonPeds 3.0 ,并以管理员身份运行即可。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)