首页 > 其他分享 >csharp hook 简介

csharp hook 简介

时间:2023-07-09 21:33:06浏览次数:33  
标签:窗口 钩子 csharp 挂钩 WH hook 消息 简介

对于csharp的hook程序,基于manage的性质,不是hook自身进程内消息,就是hook全局windows消息。

一般我们hook都是native dll将它放入第三方进程的内存空间里去。

 

csharp里的几种hook方式

1. 在win32,winform或wpf的窗口内添加消息hook,这样接受的是只在该窗口上产生的消息。

2。SetWindowsHookEx。功能最齐全的钩子程序,尝试过后可以在自身应用线程窗口内插入钩子,也可以设置应用全局钩子,但是想给第三方程序注入时提示access deniny,想定可能是manage的原因,也可能不是native的原因,或者必须是同架构dll的形式?

3. SetWinEventHook,该钩子即可以指定全局,也可以指定针对某一进程与其UI thread,设置钩子时也需注意必须在自身的带消息循环的Thread上设置(如窗口应用的主线程),该api提供两组flag,一,是否上下文,二,排除跳过自身线程或进程。 根据manage特性,我感觉是.net是无法设置InContext的。

 

SetWinEventHook是简化后的钩子,提供了众多消息WinEvent,从0x00000001-0x7FFFFFFF?

https://learn.microsoft.com/zh-cn/windows/win32/winauto/event-constants

由系统发出的事件 EVENT_SYSTEM_,比如前台窗口变化的事件,也可以监控用户按下和释放alt tab。

针对 window handle 命名开头 EVENT_OBJECT_,0x8000开始。提供众多事件,如窗口位置改变,标题名称改变,收到可输入的键盘焦点,窗口的创建销毁等等。

EVENT_CONSOLE 控制台相关

 

SetWindowsHookEx 提供以下挂钩

-1 至 14 个,关于这些msdn都有 https://learn.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-setwindowshookexa

只介绍一下自己感兴趣的,以及关于.net下的表现。

一,鼠标键盘钩子

WH_KEYBOARD WH_KEYBOARD_LL WH_MOUSE WH_MOUSE_LL

不知道为什么这些钩子序号这么乱,对于鼠标和键盘的钩子,LL是low layer,并且只能设置为全局挂钩。普通的键盘和鼠标挂钩对自身程序窗口hook没问题,但是无法对除自身以外的其他窗口。这样看SetWinEventHook是更具优势的,他是将别窗口消息回调上来了,也不需要incontext嵌入到别的程序空间内。而SetWindowsHookEx更像是需要注入代码,所以net下只能全局或自身hook用。

 

二,窗口消息事件

4 WH_CALLWNDPROC 安装一个挂钩过程,该过程在系统将消息发送到目标窗口过程之前对其进行监视。CallWindowProc。听起来更像是拦截消息用的

12 WH_CALLWNDPROCRET  安装挂钩过程,该挂钩过程在目标窗口过程处理消息后对其进行监视。 HOOKPROC

这俩者便是给win32窗口winform和wpf里安转钩子类似的WndProc的方法了,他们处理一个WH_CALLWNDPROCRET结构体

 

其他 

3 WH_GETMESSAGE  安装用于监视发布到消息队列的消息的挂钩过程。  GetMsgProc。专门用来监视? GetMessage 或 PeekMessage

WH_CBT 缩写,说是给computer-based training 应用用的,更与窗口的移动变化状态最大最小这些有关,和WinEvents相关。

-1 WH_MSGFILTER 与 6 WH_SYSMSGFILTER 安装一个挂钩过程,用于监视由于对话框、消息框、菜单或滚动条中的输入事件而生成的消息。 MessageProc

听上去这个很适合搞逆向断点做一些事儿。。也许只是想天然。

更详细的官方介绍 https://learn.microsoft.com/zh-cn/windows/win32/winmsg/about-hooks

标签:窗口,钩子,csharp,挂钩,WH,hook,消息,简介
From: https://www.cnblogs.com/kimika/p/17539457.html

相关文章

  • 行行AI人才直播第8期:新加坡国立大学在读博士生张傲《多模态大语言模型(MLLM)的简介及
    随着ChatGPT在各领域展现出非凡能力,多模态大型语言模型(MLLM)近来也成为了研究的热点,它利用强大的大型语言模型(LLM)作为“大脑”,可以执行各种多模态任务。更让人感慨的是,MLLM展现出了传统方法所不具备的能力,比如能够根据图像创作故事,无需OCR的数学推理等,这为实现人工智能的通用......
  • raid简介
    1.raid简介RAID是英文RedundantArrayofIndependentDisk的首字母缩写,中文意思是:独立磁盘冗余阵列。通俗的讲就是把多块硬盘组成一个独立的磁盘阵列进行管理。磁盘阵列是由很多块独立的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统......
  • IPMI简介
    IPMI的全称是IntelligentPlatformManagementInterface.智能平台管理接口。IPMI规定了很多的东西,BMC是其中最重要的一个部分,此外还有一些“模块”控制器通过IPMB与BMC相连。 IPMB的全称是IntelligentPlatformManagementBus.是一种基于I2C的串行总线,它用于BMC与模块控......
  • Android ANR简介
    一、ANR定义ANR(ApplicationNotResponding),如果Android应用的界面线程处于阻塞状态的时间过长,会触发“应用无响应”(ANR)错误。如果应用位于前台,系统会向用户显示一个对话框,如图1所示。ANR对话框会为用户提供强行退出应用的选项。当点击了Closeapp或者由于ANR引起了闪退......
  • C/C++ HOOK 全局 API
    全局Hook不一定需要用到Dll,比如全局的鼠标钩子、键盘钩子都是不需要Dll的,但是要钩住API,就需要Dll的协助了,下面直接放上Dll的代码,注意这里使用的是MFCDLL。//Test_Dll(mfc).cpp:定义DLL的初始化例程。//#include"stdafx.h"#include"Test_Dll(mfc).h"#ifde......
  • 驱动开发:摘除InlineHook内核钩子
    在笔者上一篇文章《驱动开发:内核层InlineHook挂钩函数》中介绍了通过替换函数头部代码的方式实现Hook挂钩,对于ARK工具来说实现扫描与摘除InlineHook钩子也是最基本的功能,此类功能的实现一般可在应用层进行,而驱动层只需要保留一个读写字节的函数即可,将复杂的流程放在应用层实现是一......
  • 流式细胞文件(.fcs)结构简介
    FCS一个完整的数据集主要有以下几部分:头段(必须)从数据集的第一个字节开始,文件的第一个数据集是从文件的第一个字节开始,最小长度为58个字节。以ASCII码解析。记录内容包括文件版本号(0~5共6字节)、文本段开始字节位(10~17共8字节)、文本段结束字节位(18~25共8字节)、数据段开始字节......
  • hook:beforedestroy - 监听生命周期
    vue中hook的两点使用1.在同一个组件中例如:在mounted中添加一个监听需要在beforeDistroy中移除这个监听,考虑到某些原因你不想再写个beforeDistroy去实现,这时候绿巨人hook就该登场了mounted(){window.addEventListener('online',this.handleOnline)this.$once('hook:be......
  • GraphicEditor简介
    GraphicEditor是Unity引擎的一个图形编辑器,用于创建和编辑游戏中的图形资源。它提供了一个直观的界面,可以用来绘制2D和3D图形,编辑材质和纹理,以及创建和管理粒子效果等。通过UnityGraphicEditor,开发者可以轻松地创建游戏中所需的各种图形资源。例如,可以使用绘图工具绘制2D图形,包......
  • 分布式医疗云平台(项目功能简介截图)【
    目录3、看病就诊 3.1、门诊挂号3.2、挂号列表 3.4.我的排班 3.5.医生排班  3.6.患者库 4.收费管理4.1.处方收费  4.2.收费查询 4.3.处方退费4.4.退费查询  4.5.处方发药3、看病就诊 3.1、门诊挂号3.1.1、已存在的患者挂号3.1.2、不存在的患者挂号 直接输入患者信息 ......