钩子不仅仅是windows给你留的后门

说起钩子(Hook)熟悉windows开发的人应该比较熟悉,例如鼠标钩子、键盘钩子等。用简单的语言描述就是在正常处理流程中安置某个钩子,当执行到安置钩子的地方就将进入指定的钩子函数进行处理,待处理完再返回原流程继续处理,当然也可以直接停止原流程的执行。所以说钩子是windows消息处理的一个重要的机制,专门用于监控指定的某些事件消息。

如果往更高层更抽象的角度来看,钩子其实是一种机制是一种思想,它的核心思想是在整个复杂的处理流程的所有关键点都触发响应的事件消息,假如添加了钩子则会调用钩子函数,函数中可根据传递过来的事件消息判断执行不同的逻辑。它就好像透明地让程序挂上额外的处理,且处理的逻辑可推迟到后面由开发者自定义。

为什么要使用钩子机制?可以这样认为,在一个庞大的系统内,某些基本的处理流程是相对固定的,且涉及到系统内部逻辑不应该允许外部去修改它,但又要考虑到系统的扩展性,必须预留某些接口让开发者在不改变系统内部基本处理流程的情况下可以自定义一些额外的处理逻辑。于是引入钩子机制,按照钩子思想最后实现的效果相当是在一个允许在适当位置嵌入自定义的代码,此机制保证了系统内部不受外界修改同时又预留足够的扩展空间。

对于java大家比较熟悉的就是JVM的关闭钩子ShutdownHook了,提供一种在虚拟机关闭之前进行额外操作的功能。当然钩子并不仅仅是具体的某些功能,它更是一种机制,是一种设计方法。看看tomcat的响应对象如何使用钩子机制。

①   定义钩子接口

public interface ActionHook {

public void action(ActionCode actionCode, Objectparam);

}

②   定义消息状态值,为方便理解,假设这里只有两种状态,实际包含了几十个状态

public enum ActionCode {

CLOSE, COMMIT

}

③   响应对象,它包含了钩子属性

public class Response {

public ActionHook hook;

public ActionHook getHook() {

return hook;

}

public void setHook(ActionHook hook) {

this.hook = hook;

}

public void action(ActionCode actionCode,Object param) {

hook.action(actionCode, param);

}

}

④   钩子处理类,分别对不同的消息状态进行不同的逻辑处理

public class Http11Processor implements ActionHook {

public void action(ActionCode actionCode,Object param) {

if (actionCode ==ActionCode.CLOSE) {

System.out.println("Beforeclosing");

} else if (actionCode ==ActionCode.COMMIT) {

System.out.println("Beforecommitting");

}

}

}

⑤   测试类,假设对response对象的处理流程如下,那么在每个关键节点都通过action方法触发钩子,并附带上消息状态,于是每个关键点都能做点额外的事,只要通过修改Http11Processor中action发放即可,根据状态自定义处理逻辑。

public class HookTest {

public static void main(String[] args) {

ActionHook actionHook=new Http11Processor();

Response response=new Response();

response.setHook(actionHook);

response.action(ActionCode.COMMIT, null);

System.out.println("commit...");

response.action(ActionCode.CLOSE, null);

System.out.println("close...");

}

}

时间: 2024-10-29 01:43:30

钩子不仅仅是windows给你留的后门的相关文章

SetWinEventHook 事件钩子(有些windows事件并没有消息对应,譬如弹出菜单,切换窗口,获得焦点,滚动条滚动等)good

相信消息钩子大家听的比较多,消息钩子能够在应用程序处理系统消息之前将其截获,提前处理并可以决定是否继续将消息往下传送,有些windows事件并没有消息对应,譬如弹出菜单,切换窗口,获得焦点,滚动条滚动等等,要截获这些事件可以使用SetWinEventHook,它的原型如下: HWINEVENTHOOK WINAPI SetWinEventHook(  __in  UINT eventMin,  __in  UINT eventMax,  __in  HMODULE hmodWinEventPro

Windows API 教程(七) hook 钩子监听

Windows API 教程(七) hook 钩子监听 Posted on 2013-08-15 茵蒂克丝 如何创建一个窗口 手动创建窗口的流程 实际代码 安装钩子 (Install hook) 钩子简介 SetWindowsHookEx 函数 设置监听[键盘]消息 设置监听[鼠标]消息 如何创建一个窗口 另外一个再录的 Windows SDK教程 里面有讲到快捷创建窗口的方式,不过这样的话要分好几个文件,感觉有点混所以这里就用原始的方式创建一个窗口. 那么,为什么讲到 hook(钩子)的时候要

入侵者已经拿到了主机的管理员权限,请你列举几种留后门的方法:(windows和LINUX系统均可)

Webshell后门 XSS后门 远控后门&rootit(windows&LINUX) SSH后门 SHIFT终端服务器后门 系统用户账号克隆 SQL数据库扩展存储型后门 SQL数据库沙盒模式后门 Oralce/mysql自定义函数 Oralce的特权用户 文件捆绑型后门 下载系统用户密码HASH到本地进行破解 IIS/Tomcat/WEBLOGIC/APACHE应用型后门 键盘记录 .... 后面的继续,HEHE 收藏感谢(0) 分享到:0 32 个回复 1#哲璇 (<小学结业生&

windows消息钩子

1.消息钩子的概念: Windows应用程序是基于消息驱动的,不论什么线程仅仅要注冊窗体类都会有一个消息队列用于接收用户输入的消息和系统消息.为了拦截消息,Windows提出了钩子的概念.钩子(Hook)是Windows消息处理机制中的一个监视点,钩子提供一个回调函数.当在某个程序中安装钩子后,它将监视改程序的消息,在指定消息没有到达该窗体之前钩子先捕获这个消息,这样就会对消息进行过滤或者对window消息进行实时监控 消息分为局部钩子和全局钩子,局部钩子仅仅拦截指定进程中的指定消息,全局钩子拦

利用钩子函数来捕捉键盘响应的windows应用程序

一:引言: 你也许一直对金山词霸的屏幕抓词的实现原理感到困惑,你也许希望将你的键盘,鼠标的活动适时的记录下来,甚至你想知道木马在windows操作系统是怎样进行木马dll的加载的…..其实这些都是用到了windows的钩子函数.因此本文将对钩子函数的相关知识进行阐述.当然,本文的目的并不是想通过此程序让读者去窃取别人的密码,只是由于钩子函数在windows系统中是一个非常重要的系统接口函数,所以想和大家共同的探讨,当然本文也对怎样建立动态连结库(DLL)作了一些简单的描述.(本文的程序为vc6.

钩子编程(HOOK) 安装进程内鼠标钩子

作者 : 卿笃军 钩子函数: WINDOWS的钩子函数可以认为是WINDOWS的主要特性之一.利用它们,您可以捕捉您自己进程或其它进程发生的事件.通过"钩挂",您可以给WINDOWS一个处理或过滤事件的回调函数,该函数也叫做"钩子函数",当每次发生您感兴趣的事件时,WINDOWS都将调用该函数. 下面介绍如何安装一个进程内的鼠标钩子. 第一步:打开VC6.0,新建一个基于对话框的MFC应用程序. 第二步:将如下代码拷贝到BOOL CInnerHookDlg::OnI

VB指针操作和消息钩子

二.VB怎么用指针 要想弄明白VB怎么使用指针,就必须要弄明白两件事,第一,如何取得数组的指针,第二,如何将指针所指向的数组取出来.     A.在讲解这两个问题之前,我们需要了解几个问题:     1.VB的数组与C++的数组的区别 有可能,大家现在认为VB的数组和C++的数组没有任何区别,都是内存中的一段地址而已,其实不然. C++中是真的数组,真的是一段地址,而且,当你的指针访问超出了数组的范围,也没人理你,只是很容易导致系统崩溃而已. 而VB数组其实是一个结构体,在这个结构体中包含了关于

windows azure Vm、cloud service、web application 如何选择可用的服务

windows azure 的web应用和虚拟机都经常用.我们经常把我们的网站部署上去.一般选择web应用或者开一个虚拟机.开一个虚拟机就会按照虚拟机的使用时间进行计费. 那么我们选择web部署在哪里有什么区别呢. 这是从一个azure的研究人员那里找到的文章. 文章如下: 相信大家看过我的博文之后,对于Windows Azure托管服务有了一定的了解.那我们会发现一般情况下Windows Azure 服务分为三种,分别是: Windows Azure Website Cloud Service

Windows Azure HandBook (2) Azure China提供的服务

<Windows Azure Platform 系列文章目录> 对于传统的自建数据中心,从底层的Network,Storage,Servers,Virtualization,中间层的OS,Middleware,Runtime,最上层的Application,Data,都需要企业进行管理.这就好比农村自建房. 对于公有云平台,一般分为三种类型: IaaS, PaaS和SaaS. Microsoft Azure平台属于IaaS和PaaS范畴. 1. IaaS 对于用户来说,底层的Network,