文章目录[隐藏]
本课通过SetWindowsHookExA键盘线程钩子把一个控制的游戏的DLL注入到游戏中,采用了《剑侠情缘》作为示范,视频教程分为两节,这是第一节
hook.dll源码
.版本 2 .支持库 EThread .程序集 程序集1 .程序集变量 bg, 整数型 .子程序 _启动子程序, 整数型, , 请在本子程序中放置动态链接库初始化代码 bg = 0 _临时子程序 () ' 在初始化代码执行完毕后调用测试代码 返回 (0) ' 返回值被忽略。 .子程序 _临时子程序 ' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。 .子程序 hook, 整数型, 公开 .参数 nCode, 整数型 .参数 wParam, 整数型 .参数 lParam, 整数型 .如果 (bg = 0) 启动线程 (&回调函数, , ) .否则 .如果结束 bg = 1 返回 (CallNextHookEx (0, nCode, wParam, lParam)) .子程序 回调函数 载入 (窗口1, , 真)
游戏控制我们采用了按键的简单示范
.版本 2 .支持库 eAPI .计次循环首 (10, ) 模拟按键 (#F4键, , ) 程序_延时 (1000, ) 模拟按键 (#F3键, , ) 程序_延时 (1000, ) 模拟按键 (#F2键, , ) 程序_延时 (1000, ) .计次循环尾 ()
消息钩子
.版本 2 .子程序 消息钩子注入, 逻辑型 .参数 进程ID, 整数型 .参数 注入DLL, 文本型 .参数 接口函数名称, 文本型 .局部变量 hMod, 整数型 .局部变量 procAdress, 整数型 .局部变量 handle, 整数型 .局部变量 dwThreadID, 整数型 ' 1、 获取HOOKDLL的进程空间地址 hMod = LoadLibraryA (注入DLL) .如果真 (hMod = 0) 信息框 (“载入DLL失败!”, 0, , ) 返回 (假) .如果真结束 ' 2、获取HOOKDLL接口的地址 procAdress = GetProcAddress (GetModuleHandleA (注入DLL), 接口函数名称) .如果真 (procAdress = 0) 信息框 (“获取接口失败!”, 0, , ) 返回 (假) .如果真结束 ' 3、获取要注入的进程的句柄 handle = 进程_ID取窗口句柄 (进程ID, , , , ) .如果真 (handle = 0) 信息框 (“获取窗口进程失败”, 0, , ) FreeLibrary (hMod) 返回 (假) .如果真结束 ' 4、获取要注入的进程的主线程ID dwThreadID = 窗口_句柄取线程ID (handle) .如果真 (dwThreadID = 0) 信息框 (“获取目标进程的线程ID失败”, 0, , ) FreeLibrary (hMod) 返回 (假) .如果真结束 ' 5、开始安装键盘线程钩子 hhook = SetWindowsHookExA (2, 整数_到子程序指针 (procAdress), hMod, dwThreadID) .如果真 (hhook = 0) 信息框 (“安装钩子失败!”, 0, , ) 返回 (假) .如果真结束 返回 (真)
教程下载:
链接:https://pan.baidu.com/s/158ikKVjIwaoF4438MG4fhA
提取码:加QQ群:521068947 群文件下载