全局消息钩子

SetWindowsHookEx的用法

馋奶兔 提交于 2020-03-01 02:46:21
HOOK钩子详细介绍 基本概念 钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监 视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理 window消息或特定事件。 钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有 到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强 制结束消息的传递。 运行机制 1、钩子链表和钩子子程: 每一个Hook都有一个与之相关联的指针列表,称之为钩子链表,由系统来维护。这个列表的指针 指向指定的,应用程 序定义的,被Hook子程调用的回调函数,也就是该钩子的各个处理子程。当与指定的Hook类型关联的消息发生时,系统就把这个消息传递到Hook子程。 一些Hook子程可以只监视消息,或者修改消息,或者停止消息的前进,避免这些消息传递到下一个Hook子程或者目的窗口。最近安装的钩子放在链的开始, 而最早安装的钩子放在最后,也就是后加入的先获得控制权。 Windows 并不要求钩子子程的卸载顺序一定得和安装顺序相反。每当有一个钩子被卸载,Windows 便释放其占用的内存,并更新整个Hook链表

Dll注入:Windows消息钩子注入

北城余情 提交于 2020-02-26 23:01:48
SetWindowsHook() 是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。 钩子机制允许应用程序截获处理window消息或特定事件。 HHOOK WINAPI SetWindowsHookEx( __in int idHook, \\钩子类型 __in HOOKPROC lpfn, \\回调函数地址 __in HINSTANCE hMod, \\实例句柄 __in DWORD dwThreadId); \\线程ID 使用API函数SetWindowsHookEx()把一个应用程序定义的钩子子程安装到钩子 链表 中。 SetWindowsHookEx函数总是在Hook链的开头安装Hook子程。当指定类型的Hook监视的事件发生时,系统就调用与这个Hook关联的 Hook链的开头的Hook子程。每一个Hook链中的Hook子程都决定是否把这个事件传递到下一个Hook子程。Hook子程传递事件到下一个 Hook子程需要调用CallNextHookEx函数。 系统钩子 SetWindowsHookEx()函数的最后一个参数决定了此钩子是 系统钩子 还是线程钩子。 线程钩子 线程勾子用于监视指定线程的事件消息。线程勾子一般在当前线程或者当前线程派生的线程内。

Hook学习

守給你的承諾、 提交于 2020-02-05 16:56:06
转载: 一、基本概念: 钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。 钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。 二、运行机制: 1、钩子链表和钩子子程: 每一个Hook都有一个与之相关联的指针列表,称之为钩子链表,由系统来维护。这个列表的指针指向指定的,应用程序定义的,被Hook子程调用的回调函数,也就是该钩子的各个处理子程。当与指定的Hook类型关联的消息发生时,系统就把这个消息传递到Hook子程。一些Hook子程可以只监视消息,或者修改消息,或者停止消息的前进,避免这些消息传递到下一个Hook子程或者目的窗口。最近安装的钩子放在链的开始,而最早安装的钩子放在最后,也就是后加入的先获得控制权。 Windows 并不要求钩子子程的卸载顺序一定得和安装顺序相反。每当有一个钩子被卸载,Windows 便释放其占用的内存,并更新整个Hook链表。如果程序安装了钩子

GitHook 工具 —— husky介绍及使用

自作多情 提交于 2020-02-03 21:41:14
名称 githooks-Git使用的挂钩。( githook在官网的介绍 ) 描述 挂钩是可以放置在挂钩目录中的程序,可在git执行的某些点触发动作。没有设置可执行位的钩子将被忽略。 默认情况下, hooks 目录是 $GIT_DIR/hooks ,但是可以通过 core.hooksPath 配置变量来更改(请参见 git-config [1] )。 HOOKS(钩子)的几种情况 1. applypatch-msg (应用程序消息) 这个钩子由 git am 调用。它只有一个参数,即保存建议的提交日志消息的文件的名称。以非零状态退出会导致 git am 在应用补丁之前中止。 该挂钩允许在适当位置编辑消息文件,并可用于将消息规范化为某些项目标准格式。检查消息文件后,它也可以用于拒绝提交。 启用后,默认的 applypatch-msg 挂钩将运行 commit-msg 挂钩(如果后者已启用)。 2. pre-applypatch (应用前批处理) 这个钩子由 git am 调用。它不接受任何参数,并在应用补丁程序之后、提交之前调用。 如果它以非零状态退出,则在应用补丁程序后将不会提交工作树。 它可以用来检查当前的工作树,如果不通过某些测试,则拒绝提交。 默认的 pre-applypatch 钩子在启用时运行 pre-commit 钩子(如果后者已启用)。 3. post

全局键盘钩子

这一生的挚爱 提交于 2019-12-31 23:15:57
这是在系统的范围内截获键盘消息,所以需要全局键盘钩子,全局键盘钩子需要DLL文件的支持,这样系统才能把DLL强行的加载到进程中去。 建立一个新的DLL文件 ,在DllMain()函数所在的CPP中添加: 定义两个全局变量:钩子句柄和DLL模块句柄。 HHOOK g_Hook = NULL; HINSTANCE g_Instance = NULL; 在DllMain函数中保存DLL模块句柄,安装钩子SetWindowsHookEx()参数需要用到。 BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call,LPVOID lpReserved) { g_Instance = (HINSTANCE)hModule; //保存DLL模块句柄 return TRUE; } 键盘钩子函数,调用约定为_stdcall: LRESULT _stdcall KeyboradProc(int code ,WPARAM wParam,LPARAM lParam) { if (code < 0) { return CallNextHookEx(g_Hook,code,wParam,lParam); } if (code == HC_ACTION&&lParam>0) { char Buffer[10] = { 0 };

逆向学习-Windows消息钩取

匿名 (未验证) 提交于 2019-12-02 23:30:02
钩子   Hook,就是钩子。偷看或截取信息时所用的手段或工具。 消息钩子   常规Windows流:     1.发生键盘输入事件时,WM_KEYDOWN消息被添加到【OS message queue】。     2.OS判断哪个应用程序中发生了事件,然后从【OS message queue】取出消息,添加到相应应用程序的【application message queue】中。     3.应用程序监视自身的【application message queue】,发现新添加的WM_KEYDOWN消息后,调用相应的事件处理程序处理。   设置钩子,可以在应用程序之前就能收到消息。并可以修改,拦截。   最具代表性的是MS Visual Studio中提供的SPY++。 SetWindowsHookEx()   HHOOK SetWindowsHookExW(   int idHook,        //hook type   HOOKPROC lpfn,     //hook procedure 钩子过程,是由操作系统调用的回调函数。   HINSTANCE hmod,    //hook procedure所属的DLL句柄(Handle)    钩子 过程需要存在于某个DLL内部,该DLL的实例句柄(instance handle)即是hMod。   DWORD

Hook基本知识

梦想与她 提交于 2019-11-28 05:52:43
一、什么是HOOK(钩子) Windows系统,建立在事件驱动机制上,就是整个系统都是通过消息传递实现的。hook(钩子)是一种特殊的消息处理机制,它可以监视系统或者进程中的各种事件消息,截获发往目标窗口的消息并进行处理。 钩子的种类很多,每种钩子可以截获相应的消息,如键盘钩子可以截获键盘消息,外壳钩子可以截取、启动和关闭应用程序的消息等。钩子可以分为线程钩子和系统钩子,线程钩子可以监视指定线程的事件消息,系统钩子监视系统中的所有线程的事件消息。因为系统钩子会影响系统中所有的应用程序,所以钩子函数必须放在独立的动态链接库(DLL) 中。 所以说,hook(钩子)就是一个Windows消息的拦截机制,可以拦截单个进程的消息(线程钩子),也可以拦截所有进程的消息(系统钩子),也可以对拦截的消息进行自定义的处理。 二、 HOOK分类: Ring3 层的 Hook 基本上可以分为两种大的类型: 第一类即是 Windows 消息的 Hook,第二类则是 Windows API 的 Hook。 消息 Hook 是通过 SetWindowsHookEx 可以实现将自己的钩子插入到钩子链的最前端, 而对于发送给被 Hook 的窗口(也有可能是所有的窗口,即全局 Hook)的消息都会被我们的钩子处理函数所捕获到, 也就是我们可以优先于窗体先捕获到这些消息 (1)进程内消息 Hook:可以简单的将