windows中三个最重要的动态链接库,Kenerl32.dll, User32.dll, GDI32.dll.HOOK API截获的是应用程序对系统API的调用,它在应用程序对系统API的调用之前截获此调用动作,让其转而调用我们所定义的函数(内容可能是进行一些操作 后再调用原系统API)。 
Kernel32主要负责管理内存,线程,进程。
User32.dll主要用来执行与界面相关的任务,如创建窗口和发送消息;
GDI32.DLL主要是绘制图像和显示文字处理,基本用户界面等特性,如创建窗口和发送消息。

我们要对系统的APi下钩子,不是一件简单事情,因为,微软并不希望你对系统的链接库动手脚,建议你看看以下文章:
API HOOK
Windows下Hook API技术

作为API Hook的第一课,我们采用了系统的信息框,给他下钩子,弹出我们自定义的内容,我们将会在下一课单独编写一个DLL,在调用MessageBoxA 时,加载我们的DLL.

API hook 流程

1、 获取模块的句柄GetModuleHandleA
2、获取API地址,入口地址GetProcAddress
3、把内存地址设置为可读写
4、保存原来的入口地址数据,保存API入口前8个字节
5、跳转到我们的函数入口地方
6、内存映射

API hook 源码

.版本 2
.支持库 spec.局部变量 模块句柄, 整数型' 获取模块的句柄
' 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

.版本 2.子程序 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)

源码参考:http://www.511yj.com/eyuyan-hook-73.html

易语言API hook MessageBoxA相关推荐

  1. 易语言API Hook SetWindowTextA

    我们知道SetWindowTextA这个API的作用是设置窗口标题,当我们调用这个接口的时候,换成我们的函数,本课没有做注入DLL调用,而是在一个测试文件里做了演示. SetWindowTextA . ...

  2. 易语言api hook CreateFileA

    当调用CreateFileA创建文件时,我们劫持它,hook成我们自己的东西,易语言里的写到文件就是API(CreateFileA ) hook 说明 1.未hook前会生成一个111.txt,内容是 ...

  3. 易语言API hook 实现动态类名

    我们知道易语言程序默认的类名是WTWindow,如果想改变这个类名,那么就需要API HOOK ,本课我们是实现的动态类名,也就是说,每次启动程序,它的类名都不一样. 生成动态类名我们采用了文本_取随 ...

  4. 易语言api hook ShellExecuteA 执行程序

    ShellExecute的功能是运行一个外部程序(或者是打开一个已注册的文件.打开一个目录.打印一个文件等等),并对外部程序有一定的控制,和CreateProcessA比起来没有太复杂,可以简单理解为 ...

  5. 易语言API hook CreateWindowExA

    CreateWindowExA是创建窗口的一个API,我们本课对这个API进行HOOK.我们仍热采用前几课封装的APIhook类模块.两种方式,一个是在一个程序里通过载入新窗口继续hook,一个是通过 ...

  6. 易语言api hook CreateProcessA 创建进程

    CreateProcessA我们非常熟悉,就是创建一个进程,这个API的函数hook非常实用,本课我们可以通过CreateProcessA来运行系统的计算器,或者记事本等等. CreateProces ...

  7. 易语言api hook GetAdaptersAddresses 劫持网卡物理地址

    GetAdaptersAddresses是获取物理网卡的MAC,这里我们通过HOOK,随机的改变它,效果如下图,获取本节MAC可以采用精易模块的MAC_取本机MAC (1) GetAdaptersAd ...

  8. 易语言API获取进程程序路径

    通过传递进程ID取指定进程的程序路径,成功返回程序路径,失败返回空,用到以下API: 1.CreateToolhelp32Snapshot 快照句柄 = CreateToolhelp32Snapsho ...

  9. 易语言取java路径模块_易语言API模块制作进程取程序路径

    易语言API模块制作进程取程序路径,提高进程的PID获取程序的所在路径. 进程_取程序路径 1.CreateToolhelp32Snapshot 快照句柄 = CreateToolhelp32Snap ...

最新文章

  1. 人脸识别技术大总结——Face Detection Alignment
  2. div后来居上 html,【CSS】误解:后来居上??有时这是错的
  3. 图论-欧拉图-欧拉回路-Euler-Fluery-Hierholzer-逐步插入回路法-DFS详解-并查集
  4. 二十九、制作首页的显示列表
  5. Spring Boot的优点入门
  6. 亚马逊API接口大全
  7. URI和URL、URN的作用和区别
  8. java实现一个月的日历打印,Java实现按年月打印日历功能【基于Calendar】,日历calendar...
  9. 互联网公司干不好上门维修?
  10. echarts版中国地图
  11. 车联网通信中蜂窝网络的应用
  12. vue 调起浏览器打印
  13. 虚拟机镜像克隆、移植
  14. ma5671怎么设置_华为MA5671怎样设置POE供电
  15. 感谢在俄勒冈州Develo的SAOs软件协会参加我的演讲“音乐背后的Web服务”的所有人...
  16. 你看好我国网约车生态吗?
  17. 用html和js编写黑洞数,数字黑洞作文400字
  18. Matlab代码:综合能源系统(IES)的优化调度 风力、光伏、燃气轮机、燃气内燃机、燃气锅炉、余热回收系统、吸收式制冷机、电制冷机
  19. 领扣(LeetCode)整数反转
  20. uniCloud 云函数操作云数据库

热门文章

  1. java 根据word模板生成word文件
  2. 搜索引擎优化(SEO)软件的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  3. 时间序列分析 - 移动平均SMA, EMA(EWMA) 之python
  4. [转]前国美高管讲述:首富黄光裕的另一面
  5. 3dsmaxC4DbodypainterPS画贴图三、摆放已经调节好大小比例的UV。
  6. WAR3的模型,幻影刺客,我来了。
  7. 网上赚钱有哪些项目可做?适合在家挣钱的工作
  8. java 动态调用方法_Java动态调用方法
  9. java方法自己调用自己_java方法的定义与调用
  10. 通信原理——多址技术