千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:太原千锋IT培训  >  技术干货  >  编程中handle与hook什么区别?

编程中handle与hook什么区别?

来源:千锋教育
发布人:xqq
时间: 2023-10-13 19:48:03

一、编程中handle与hook的区别

不同的技术栈里,handle和hook可能指不同的东西。

泛泛来说,handle是对计算机资源(文件,设备,网络,窗口等等)的抽象表示。程序员可以通过handle来操作系统中的各类资源。而hook指通过拦截系统或者应用中的事件,信号和调用,来更改系统或者应用的默认行为。

hook

Hook可以以线程为单位进行筛选。每个GUI线程有一个消息队列,用来接受消息,既然是消息Hook,那就应该是针对某个线程的接收到的消息做Hook。

例如:实现的防键盘勾取,可以使用这种技术。安装了一个WH_KEYBOARD_LL钩子,在键盘按下,发往任意的线程消息队列前,会先调用我们的键盘钩子,钩子里面判断是不是我们的输入框的窗口消息,如果不是,忽略。如果是,做加密处理并保存,改变发送的字符(如改为”*”),发送至窗口过程中。如果第三方调用GetWindowText,由于文本框中的都是”*”,所以无法获取出真实字符。

但这种钩子谁也可以安装,Windows将所有程序安装的钩子组成了一个钩子链。如果第三方也安装了一个钩子,还是在我们安装完之后安装的,那么它将会截获到真实字符。所以,所以可以进一步加强处理,增加一个定时器,不停的安装卸载多个钩子。这样,即便第三方也在不停的安装钩子,想截取到完整的PIN,可能性变的很小。但如果这个恶意程序驻留在用户系统中很多天,通过每次的统计,可能能得到完整的PIN。

Handle

Handle本身是一个32位的无符号整数,它用来代表一个内核对象。它并不指向实际的内核对象,用户模式下的程序永远不可能获得一个内核对象的实际地址(一般情况下)。那么Handle的意义何在?它实际上是作为一个索引在一个表中查找对应的内核对象的实际地址。那么这个表在哪里呢?每个进程都有这样的一个表,叫句柄表。该表的名列前茅项就是进程自己的句柄,这也是为什么你调用GetCurrentProcess()总是返回0x7FFFFFFF原因。

简单地说,Handle就是一种用来”间接”代表一个内核对象的整数值。你可以在程序中使用handle来代表你想要操作的内核对象。这里的内核对象包括:事件(Event)、线程、进程、Mutex等等。我们最常见的就是文件句柄(file handle)。

延伸阅读:

二、进程ID

首先,进程ID是一个32位无符号整数,每个进程都有这样的一个ID,并且该ID在系统范围内是少数的。系统使用该ID来少数确定一个进程。

深入些说,系统可能使用进程ID来计算代表该进程的内核对象的基地址(及EPROCESS结构的基地址),具体的计算公式你可以去问微软的OS开发人员。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

编程开发环境中,创建工程/项目到底和创建文件有什么区别?

2023-10-13

PHP if 语句判断时,变量在前跟变量在后有什么区别?

2023-10-13

统计学与大数据有什么区别?

2023-10-13

最新文章NEW

面向人类的语言和面向机器的语言到底有什么区别?

2023-10-13

变量的储存机制是什么?

2023-10-13

Java 假泛型和真泛型语言区别是什么?

2023-10-13

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>