钩子程序钩子程序的常用类型

钩子程序  时间:2021-07-10  阅读:()

钩子程序是什么东西

木马钩子其实也是一个dll文件,这个东东讲起来比较麻烦。

我尽量说简单点。

dll文件叫动态链接库文件,系统正常运行需要调用一些程序就是通过dll文件里的函数来执行的,一个正常运行的系统进程会调用许多的dll文件,而这些dll文件在系统用到某些功能时还会调用其它的dll文件。

木马钩子就是这样一种dll文件,通过其内置的函数,使系统进程认为这个dll文件是个正常的需要调用的dll,然后再通过这个dll来启动木马。

这就有点象使用钩子一样,先钩住挂靠再贴上去。

------说得不是很贴切。

关于VB编程中钩子代码?

最上面添加两个api声明 Public Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long Public Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long 另外 Address of 改为Addressof Call Unhook WindowsHookEx(hHook) 改为Call UnhookWindowsHookEx(hHook)

c#写钩子程序

C#写HOOK还是延续WINDOWS HOOK的思路的,使用标准的API :SetWindowHookEx....思路很简单:写个类自己定义一个钩子事件然后再自己程序中调用,下面是我以前写的一个NET HOOK框架,网上相关资源也是很多的======================================写多了其他语言实现的HOOK,突然很想写个不一样的,想来想去Net HOOK是最合适的了使用的方法还是传统的 Gui‘Thread Hook : SetWindowsHookEx/CallNextHookExHOOK -- 拦截,一种改变程序执行流程的技术手段,这里我不想过多的去谈如果去改变 一个程序的执行流程只是简单的演示下,如何实现一个HOOK在Net里面实现挂钩和在其他语言实现虽然在本质上是相同的,但细节上却是有点不同的 NET 采用的是事件驱动(消息机制的封装版),所有要实现一个消息的拦截,你必须实现 一个事件,而该事件的作用就是接受和处理 ======================================= 1。

开始我们定义一个基础类,实现一些基本的方法和变量 namespace Mr.Krcl.BaseHookLibrary { /* hook library by Mr.krcl 283018011 2010-5-12 BMD : 这里给出的只是一个NET HOOK 模型 并未完全实现功能 */ // ================================================================= // 事件参数类 public class HookEventArgs: EventArgs { //根据需要你可以添加变量或函数实现功能的扩展 } // ================================================================== // 挂钩的消息类型,具体查阅MSDN public enum HookType : int { WH_JOURNALRECORD = 0, WH_JOURNALPLAYBACK = 1, WH_KEYBOARD = 2, WH_GETMESSAGE = 3, WH_CALLWNDPROC = 4, WH_CBT = 5, WH_SYSMSGFILTER = 6, WH_MOUSE = 7, WH_HARDWARE = 8, WH_DEBUG = 9, WH_SHELL = 10, WH_FOREGROUNDIDLE = 11, WH_CALLWNDPROCRET = 12, WH_KEYBOARD_LL = 13, WH_MOUSE_LL = 14 } // ==================================================================== // 导出API : 最烦人的工作了,不像C/C++其他语言直接调用头文件就OK [DllImport("user32.dll")] protected static extern IntPtr SetWindowsHookEx(HookType code, HookProc func, IntPtr hInstance, int threadID); [DllImport("user32.dll")] protected static extern int UnhookWindowsHookEx(IntPtr hhook); [DllImport("user32.dll")] protected static extern int CallNextHookEx(IntPtr hhook, int code, IntPtr wParam, IntPtr lParam); // ==================================================================== // HOOK基类 public abstract class BaseHookLib:IDisposable{ // 事件委托 + 回调函数委托 public delegate CallBackHookProc(int nCode , IntPtr wparam ,IntPtr lparam) ; public delegate HookEventHandler(object sender , HookEventArgs e); public event HookEventHandler InvokeHook ; // 构造函数 public BaseHookLib(HookType hType) { _hookType = hType ; } public BaseHookLib(HookType hType , CallBaseHookProc proc) { _hookType = hType ; callBackFun = proc ; } // 内部变量 protected IntPtr _hhook = IntPtr.Zero; // 判断系统是否已经加载HOOK protected bool _isHook = false ; // 回调函数 protected CallBackHookProc callBackFun ; // 挂钩消息的类型 protected HookType _hookType ; public bool IsHook{ get { return _isHook; } } // 引发时间 protected void OnHook(HookEventArgs e) { if(InvokeHook != null) InvokeHook(this , e); } // 钩子回调函数 protected int CallBackFunction(int nCode ,IntPtr wParam , IntPtr lparam) { if( nCode < 0) return CallNextHookEx(_hhook , nCode , wParam ,lparam); // 事件参数类实例化 HookEventArgs e = new HookEventArgs(....) ; OnHook(e) ; // ............... // 这里可以做你想做的,作为基类我们总是直接返回 // ................ return CallNextHookEx(_hhook,nCode ,wParam ,lparam); } // 安装钩子 protected void InstallHook() { _hhook = SetWindowsHookEx(_hookType ,callbackFun , Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]),, 0/*(int) AppDomain.GetCurrentThreadId()*/); _hook = true ; } // 卸载钩子 protected void UnInstallHook() { UnhookWindowsHookEx(_hhook); _hhook = IntPtr.Zero; _hook = false ; } // ============================================================================= // // 继承IDisposable接口的目的在于实现Dispose方法 ,该接口继承可在派生类中实现继承 // // ============================================================================= }现在我们需要做的就是关键步骤的了实现一个鼠标的HOOK类,该类从BaseHookLib中派生 namespace Mr.Krcl.BaseHookLibrary { // 鼠标时间参数类 public class MouseHookEventArgs{ /* 这里你可以通过添加任何可用的成员变量或方法来实现该类的扩展 当然你也可以同对MouseEventArgs类的继承来扩展,例如: public class MouseHookEventArgs : MouseEventArgs{ ... } */ } // ================================================================================= // 定义鼠标时间委托 // 委托的形式是可变的,这里我们遵循原始的鼠标委托写法 // public delegate void MouseEventHandler(object sender ,MouseEventArgs e) public delegate void MouseHookEventHandler(object sender,MouseHookEventArgs e); // ================================================================================= // 主打类 MouseHookLib // 因为我们要继承BaseHookLib所有我们这里就不需要在进程IDISxxx接口了 public class MouseHookLib { // 构造函数 // HOOK鼠标消息的类型由基类负责传递,利用C#构造函数层分布特点 public MouseHookLib():base(HookType.WH_MOUSE_LL){ callBackFun = new CallBackHookProc(MouseHookCallBackFunction); } public MouseHookLib():base(HookType.WH_MOUSE_LL,new CallBackHookProc(MouseHookCallBackFunction){ } // 析构函数 // 作用通过调用重载的Dispose函数卸载钩钩 ~MouseHookLib(){ Dispose(false); } // 实现Dispose方法 // 如果你在基类已经实现了改方法那么,这里你需要采用重载方式实现,或者直接基类该方法 // 这里假设积累没有实现该方法 protected void Dispose( bool disposing ) { if ( IsInstalled ) Uninstall(); if ( disposing ) GC.SuppressFinalize( this ); } public void Dispose() { Dispose( true ); } /* 积累实现该方法后本类的重载实现 public override void Dispose( bool disposing ) { if ( IsInstalled ) Uninstall(); if ( disposing ) GC.SuppressFinalize( this ); } */ // 事件 // 定义了时间和事件的触发方法 // 单独的定义事件是毫无意义的 // 这里我们以定义两个事件MouseDown ,MouseMove为例,具体根据自己的需要,方法是相同 public event MouseHookEventHander MouseMove ; public void OnMouseMove(MouseHookEventArgs e) { if(MouseMove != null){ MouseMove(this , e); } } public event MouseHookEventHander MouseDown ; public void OnMouseMove(MouseHookEventArgs e) { if(MouseDown != null){ MouseDown(this , e); } } // 鼠标钩子回调函数 public IntPtr MouseHookCallBackFunction(int nCode , IntPtr wParam , IntPtr lparam) { if( nCode < 0 ) return CallNextHookEx(_hhook , nCode ,wParam ,lParam); MouseHookEventArgs e = new MouseHookEventArgs(.....) ; /* 这里可以根据你自己的需要对拦截的消息进行过滤或者获取你自己需要的信息 例如: if ( code == Win32.HC_ACTION ){ switch ( wParam.ToInt32() ) { case Win32.WM_MOUSEMOVE: OnMouseMove( e ); break; case Win32.WM_LBUTTONDOWN: case Win32.WM_RBUTTONDOWN: case Win32.WM_MBUTTONDOWN: case Win32.WM_XBUTTONDOWN: OnMouseDown( e ); break; } } 这里只是一个模型 ,具体需要具体实现,关键就是根据lparam和wparam参数来实现事件的激活 从而调用事件,对目标消息进行拦截 */ return CallNextHookEx(_hhook , nCode ,wParam ,lParam); } } }

SVN钩子程序如何写,新手入门,完全不懂,从零开始

如果服务器端是windows环境的话,那么钩子实际就是批处理文件(扩展名bat) 这些钩子都存放在服务器端的hooks文件夹内,比较常用的钩子包括mit.tmpl、mit.tmpl等,mit.tmpl是当服务器端接收mit请求的时候自动调用这个钩子,mit.tmpl是当完mit操作的时候服务器端自动调用这个钩子,在windows环境下钩子程序的扩展名要改成bat,而不能用tmpl 至于钩子的内容,就看自己的发挥了,你需要熟悉DOS批处理文件的编写技巧,常见的应用比如:mit完成后,自动调用钩子程序,通过svn update命令,将最新版本发布到服务器上的测试环境中

钩子程序的常用类型

WH_CALLWNDPROC 1、WH_CALLWNDPROC和WH_CALLWNDPROCRET Hooks WH_CALLWNDPROC和WH_CALLWNDPROCRET Hooks使你可以监视发送到窗口过程的消息。

系统在消息发送到接收窗口过程之前调用WH_CALLWNDPROC Hook子程,并且在窗口过程处理完消息之后调用WH_CALLWNDPROCRET Hook子程。

WH_CALLWNDPROCRET Hook传递指针到CWPRETSTRUCT结构,再传递到Hook子程。

CWPRETSTRUCT结构包含了来自处理消息的窗口过程的返回值,同样也包括了与这个消息关联的消息参数。

WH_CBT Hook 在以下事件之前,系统都会调用WH_CBT Hook子程,这些事件包括: 1. 激活,建立,销毁,最小化,最大化,移动,改变尺寸等窗口事件; 2. 完成系统指令; 3. 来自系统消息队列中的移动鼠标,键盘事件; 4. 设置输入焦点事件; 5. 同步系统消息队列事件。

Hook子程的返回值确定系统是否允许或者防止这些操作中的一个。

WH_DEBUG Hook 在系统调用系统中与其他Hook关联的Hook子程之前,系统会调用WH_DEBUG Hook子程。

你可以使用这个Hook来决定是否允许系统调用与其他Hook关联的Hook子程。

WH_FOREGROUNDIDLE Hook 当应用程序的前台线程处于空闲状态时,可以使用WH_FOREGROUNDIDLE Hook执行低优先级的任务。

当应用程序的前台线程大概要变成空闲状态时,系统就会调用WH_FOREGROUNDIDLE Hook子程。

WH_GETMESSAGE Hook 应用程序使用WH_GETMESSAGE Hook来监视从GetMessage or PeekMessage函数返回的消息。

你可以使用WH_GETMESSAGE Hook去监视鼠标和键盘输入,以及其他发送到消息队列中的消息。

WH_JOURNALPLAYBACK Hook WH_JOURNALPLAYBACK Hook使应用程序可以插入消息到系统消息队列。

可以使用这个Hook回放通过使用WH_JOURNALRECORD Hook记录下来的连续的鼠标和键盘事件。

只要WH_JOURNALPLAYBACK Hook已经安装,正常的鼠标和键盘事件就是无效的。

WH_JOURNALPLAYBACK Hook是全局Hook,它不能象线程特定Hook一样使用。

WH_JOURNALPLAYBACK Hook返回超时值,这个值告诉系统在处理来自回放Hook当前消息之前需要等待多长时间(毫秒)。

这就使Hook可以控制实时事件的回放。

WH_JOURNALPLAYBACK是system-wide local hooks,它们不会被注射到任何行程位址空间。

(估计按键精灵是用这个hook做的) WH_JOURNALRECORD Hook WH_JOURNALRECORD Hook用来监视和记录输入事件。

典型的,可以使用这个Hook记录连续的鼠标和键盘事件,然后通过使用WH_JOURNALPLAYBACK Hook来回放。

WH_JOURNALRECORD Hook是全局Hook,它不能象线程特定Hook一样使用。

WH_JOURNALRECORD是system-wide local hooks,它们不会被注射到任何行程位址空间。

WH_KEYBOARD Hook 在应用程序中,WH_KEYBOARD Hook用来监视WM_KEYDOWN and WM_KEYUP消息,这些消息通过GetMessage or PeekMessage function返回。

可以使用这个Hook来监视输入到消息队列中的键盘消息。

WH_KEYBOARD_LL Hook WH_KEYBOARD_LL Hook监视输入到线程消息队列中的键盘消息。

WH_MOUSE Hook WH_MOUSE Hook监视从GetMessage 或者 PeekMessage 函数返回的鼠标消息。

使用这个Hook监视输入到消息队列中的鼠标消息。

WH_MOUSE_LL Hook WH_MOUSE_LL Hook监视输入到线程消息队列中的鼠标消息。

WH_MSGFILTER / hooks WH_MSGFILTER 和 WH_SYSMSGFILTER Hooks WH_MSGFILTER 和 WH_SYSMSGFILTER Hooks使我们可以监视菜单,滚动条,消息框,对话框消息并且发现用户使用ALT+TAB or ALT+ESC 组合键切换窗口。

WH_MSGFILTER Hook只能监视传递到菜单,滚动条,消息框的消息,以及传递到通过安装了Hook子程的应用程序建立的对话框的消息。

WH_SYSMSGFILTER Hook监视所有应用程序消息。

WH_MSGFILTER 和 WH_SYSMSGFILTER Hooks使我们可以在模式循环期间过滤消息,这等价于在主消息循环中过滤消息。

通过调用CallMsgFilter function可以直接的调用WH_MSGFILTER Hook。

通过使用这个函数,应用程序能够在模式循环期间使用相同的代码去过滤消息,如同在主消息循环里一样。

WH_SHELL Hook 外壳应用程序可以使用WH_SHELL Hook去接收重要的通知。

当外壳应用程序是激活的并且当顶层窗口建立或者销毁时,系统调用WH_SHELL Hook子程。

WH_SHELL 共有5钟情况: 1. 只要有-level、unowned 窗口被产生、起作用、或是被摧毁; 2. 当Taskbar需要重画某个按钮; 3. 当系统需要显示关于Taskbar的一个程序的最小化形式; 4. 当目前的键盘布局状态改变; 5. 当使用者按Ctrl+Esc去执行Task Manager(或相同级别的程序)。

按照惯例,外壳应用程序都不接收WH_SHELL消息。

所以,在应用程序能够接收WH_SHELL消息之前,应用程序必须调用SystemParametersInfo function注册它自己。

  • 钩子程序钩子程序的常用类型相关文档

Sharktech($49/月),10G端口 32GB内存,鲨鱼机房新用户赠送$50

Sharktech 鲨鱼机房商家我们是不是算比较熟悉的,因为有很多的服务商渠道的高防服务器都是拿他们家的机器然后部署高防VPS主机的,不过这几年Sharktech商家有自己直接销售云服务器产品,比如看到有新增公有云主机有促销活动,一般有人可能买回去自己搭建虚拟主机拆分销售的,有的也是自用的。有看到不少网友在分享到鲨鱼机房商家促销活动期间,有赠送开通公有云主机$50,可以购买最低配置的,$49/月的...

Ftech:越南vps,2核/2G/20G SSD/1Gbps不限流量/可安装Windows系统,$12.5月

ftech怎么样?ftech是一家越南本土的主机商,成立于2011年,比较低调,国内知道的人比较少。FTECH.VN以极低的成本提供高质量服务的领先提供商之一。主营虚拟主机、VPS、独立服务器、域名等传统的IDC业务,数据中心分布在河内和胡志明市。其中,VPS提供1G的共享带宽,且不限流量,还可以安装Windows server2003/2008的系统。Ftech支持信用卡、Paypal等付款,但...

Fiberia.io:$2.9/月KVM-4GB/50GB/2TB/荷兰机房

Fiberia.io是个新站,跟ViridWeb.com同一家公司的,主要提供基于KVM架构的VPS主机,数据中心在荷兰Dronten。商家的主机价格不算贵,比如4GB内存套餐每月2.9美元起,采用SSD硬盘,1Gbps网络端口,提供IPv4+IPv6,支持PayPal付款,有7天退款承诺,感兴趣的可以试一试,年付有优惠但建议月付为宜。下面列出几款主机配置信息。CPU:1core内存:4GB硬盘:...

钩子程序为你推荐
mdm乳化剂MDM起什么作用微信收款语音播报怎么设置微信收款码声音怎么设置showwindowC#中showwindow控件在哪里??jdk6Java 中的 JDK 6 Update 6 到哪下载啊 ? 有一点急spawningvc出现error spawning c1.exe怎么解决?jsindexofjavascript 中indexof 的用法easeljswindow.webkit.messagehandlers js中这句是什么意思建立qq号怎样建一个QQ号数学作业小学生的作业本有几种?mac地址过滤怎么设置mac地址过滤 急
域名服务dns的主要功能为 代理域名备案 域名备案批量查询 新通用顶级域名 电影服务器 kdata 优惠码 免费ftp空间 域名优惠码 68.168.16.150 admit的用法 100m独享 太原网通测速平台 微软服务器操作系统 上海服务器 支持外链的相册 重庆电信服务器托管 web应用服务器 国外在线代理服务器 谷歌台湾 更多