易语言HOOKAPI钩子操作代码实例

DLL代码

.版本 2

.DLL命令 修改虚拟保护, 整数型, "kernel32", "VirtualProtect", , 修改虚拟保护

.参数 lpAddress, 整数型

.参数 dwSize, 整数型

.参数 flNewProtect, 整数型

.参数 lpflOldProtect, 整数型, 传址

.DLL命令 取函数地址, 整数型, "kernel32", "GetProcAddress", , 返回函数地址

.参数 模块句柄, 整数型

.参数 函数名, 文本型

.DLL命令 取模块句柄, 整数型, "kernel32", "GetModuleHandleA", , 获取一个应用程序或动态链接库的模块句柄 如执行成功成功,则返回模块句柄。零表示失败。会设置GetLastError

.参数 模块名, 文本型, , 指定模块名,这通常是与模块的文件名相同的一个名字。例如,NOTEPAD.EXE程序的模块文件名就叫作NOTEPAD;

.DLL命令 建立消息框, 整数型, "user32", "MessageBoxA", , 建立消息框窗体

.参数 窗口句柄, 整数型

.参数 lpText, 文本型

.参数 lpCaption, 文本型

.参数 wType, 整数型

自定义数据类型

.版本 2

.数据类型 MEMORYSTATUS

.成员 dwLength, 整数型

.成员 dwMemoryLoad, 整数型

.成员 dwTotalPhys, 整数型

.成员 dwAvailPhys, 整数型

.成员 dwTotalPageFile, 整数型

.成员 dwAvailPageFile, 整数型

.成员 dwTotalVirtual, 整数型

.成员 dwAvailVirtual, 整数型

HOOKAPI钩子操作代码

.版本 2

.程序集 窗口程序集1

.程序集变量 钩子地址, 整数型

.程序集变量 原始数据, 字节集

.程序集变量 OldProtect, 整数型

.子程序 _按钮3_被单击

信息框 (“这是一个测试本地HOOK”, 0, “如果挂钩了,本文本就会变化!”)

.子程序 _按钮1_被单击

.局部变量 值, 字节集

钩子地址 = 取函数地址 (取模块句柄 (“User32.dll”), “MessageBoxA”)

.如果真 (钩子地址 = 0)

信息框 (“无法获取函数地址!!!”, 0, )

返回 ()

.如果真结束

修改虚拟保护 (钩子地址, 8, 64, OldProtect)

原始数据 = 指针到字节集 (钩子地址, 8)

值 = { 184 }

写到内存 (值 + 到字节集 (&MessageBoxA) + { 255, 224 }, 钩子地址, 8)

.子程序 MessageBoxA, 整数型

.参数 hWnd, 整数型, , 窗口句柄

.参数 lpText, 文本型, , 提示文本

.参数 lpCaption, 文本型, , 信息标题

.参数 uType, 整数型, , 按钮类型

.局部变量 值, 字节集

lpText = lpText + “----lpText-----挂钩成功!”

lpCaption = lpCaption + “-----lpCaption----挂钩成功!”

.如果真 (取字节集长度 (原始数据) > 0)

写到内存 (原始数据, 钩子地址, )

.如果真结束

建立消息框 (hWnd, lpText, lpCaption, uType)

值 = { 184 }

写到内存 (值 + 到字节集 (&MessageBoxA) + { 255, 224 }, 钩子地址, 8)

返回 (0)

.子程序 _按钮2_被单击

.如果真 (取字节集长度 (原始数据) > 0)

写到内存 (原始数据, 钩子地址, )

.如果真结束

运行结果:

总结

以上是 易语言HOOKAPI钩子操作代码实例 的全部内容, 来源链接: utcz.com/z/318861.html

回到顶部