文章目录[隐藏]
本课时API hook的第二课时,劫持的api 仍热是 messagebox,我们先用易语言编写一个exe,里面有两个弹框,一个是易语言自己封装的信息框,一个是调用系统的messagebox,然后我们编写一个注入的DLL,让后通过EIP注入和远程线程注入来劫持系统messagebox,现实中,是我们要确定第三方进程调用了系统的那个API,然后通过注入到我们的DLL。
测试文件
.版本 2 .程序集 窗口程序集_启动窗口 .子程序 _按钮1_被单击 信息框 (“APIHOOK测试”, 0, “APIHOOK测试”, ) .子程序 __启动窗口_创建完毕 .子程序 _按钮2_被单击 MessageBoxA (取窗口句柄 (), “MessageBoxA测试hook”, “MessageBoxA测试hook”, 0)
MessageBoxA
.版本 2 .DLL命令 MessageBoxA, 整数型, "user32.dll", "MessageBoxA", , 消息框 .参数 hWnd, 整数型, , 窗口句柄 .参数 lpText, 文本型, , 提示内容 .参数 lpCaption, 文本型, , 提示标题 .参数 uType, 整数型, , 提示图标和按钮类型
hook dll
.版本 2 .支持库 spec .程序集 程序集1 .程序集变量 api函数地址, 整数型 .程序集变量 OldProtect, 整数型 .程序集变量 oldData, 字节集 .程序集变量 newDate, 字节集 .子程序 _启动子程序, 整数型, , 请在本子程序中放置动态链接库初始化代码 hook () _临时子程序 () ' 在初始化代码执行完毕后调用测试代码 返回 (0) ' 返回值被忽略。 .子程序 _临时子程序 ' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。 .子程序 hook, , 公开 .局部变量 模块句柄, 整数型 ' 获取模块的句柄 ' MessageBoxA (, , , ) 模块句柄 = GetModuleHandleA (“User32.dll”) 调试输出 (模块句柄) ' 获取API地址,入口地址 api函数地址 = GetProcAddress (模块句柄, “MessageBoxA”) 调试输出 (api函数地址) .如果真 (api函数地址 = 0) 信息框 (“获取API函数地址失败!!”, 0, , ) 返回 () .如果真结束 ' 把内存地址设置为可读写 VirtualProtect (api函数地址, 8, 64, OldProtect) ' 保存原来的入口地址数据,保存API入口前8个字节 oldData = 指针到字节集 (api函数地址, 8) ' 跳转到我们的函数入口地方 newDate = { 184 } + 到字节集 (&myMessageBoxA) + { 255, 224 } ' 内存映射 写到内存 (newDate, api函数地址, 8) .子程序 myMessageBoxA, 整数型 .参数 hWnd, 整数型, , 窗口句柄 .参数 lpText, 文本型, , 提示内容 .参数 lpCaption, 文本型, , 提示标题 .参数 uType, 整数型, , 提示图标和按钮类型 lpText = lpText + “----------API劫持成功!!” lpCaption = lpCaption + “----------API劫持成功!!” ' 先停止HOOK .如果真 (取字节集长度 (oldData) > 0) 写到内存 (oldData, api函数地址, ) .如果真结束 MessageBoxA (hWnd, lpText, lpCaption, uType) ' 恢复HOOK 写到内存 (newDate, api函数地址, 8) 返回 (0)
教程获取下载:
百度网盘链接:https://pan.baidu.com/s/158ikKVjIwaoF4438MG4fhA
提取码:加QQ群:521068947 群文件下载
资源教程交流①群:521068947
511遇见QQ: 272586593