观察模式
在HOOK很多应用中,有一类应用最为常用,那就是观察模式。对于信息获取的要求,在很多时候都是非常的重要的功能。在很多时候,我们都需要根据一定量的信息去判断如何决策。正如打仗一样,没有一定量的有意义的数据,就是摸黑,只能死路一条。
像Windows提供的SetWindowHook就是典型地为这类应用准备的。而且这也是最普遍的用法。
这个模式的特点是,在事情发生的时候,发出一个通知信息。观察者只可以查看过程中的信息,根据自己关心的内容处理自己的业务,但是不可以更改原来的流程。
如全局钩子中,经常使用的鼠标消息、键盘消息的监视等应用。金山词霸屏幕取词的功能是一个典型的应用(具体技术可以参考此类文章)。
注入模式
这个模式和观察模式最大的不一样的地方在于,注入的代码是为了扩展原始代码的功能业务。插件模式是此类模式的典型案例。
不管瘦核心的插件系统(如Eclipse)还是胖核心的插件系统(如Delphi、Visual Studio等IDE环境),其对外提供的插件接口都是为了扩展本身系统的功能的。
这种扩展的应用方式的典型特点,就是新的扩展代码和原来的代码会协调处理同类业务。
还有一些好的例子。我们曾经有一个应用,就是替换ReadFile和WriteFile,用以做到对所有文件操作的加密工作。这种应用和插件的差异在于被注入方是主动还是被动的。但是都是在完成同一类业务。
替换模式
如果针对应用目的不同,可以叫修复模式或破解模式。前者是为了修改系统中的BUG,后者是为了破解原有系统的限制。
比如我在前言中提到的,Delphi的VCL中,TObject并没有提供从接口到对象的转换服务,如果我们使用了此类模式,就可以让我们获得这种非常好的服务。对于一个设计或实现上有缺陷的原有系统(一般不能直接修改代码)来说,HOOK机制往往是很好的选择。
这类称之为修复模式非常好。
很多黑客也使用此种模式,必然替换访问加密锁的DLL中的导出表,替换成自己的函数,这样跳过对软件的控制代码。我们这里不是重点讲述软件破解,所以不继续深究其破解原理。但是,可以强调的是,这类应用的难点是,找出函数的参数。
这类模式的特点是,原有的代码会被新的代码所替换。
前面三个是基本模式,还有很多和实际应用相关的模式。
集权模式
此类模式的出现,大都是为了在全部系统中,统一处理某类事情。它的特点不在于注入的方式,而在于处理的模式。
这个模式,大都应用到某类服务上,比如键盘服务,鼠标服务,打印机服务等等特定服务上。通过统一接管此类服务的访问,限制或者协调对服务的访问。
比如键盘锁功能的实现,就是暂时关闭键盘的所有应用。
这类模式的特点主要会和特点服务有关联。
修复模式
替换模式的一种,这里强调的是其应用的目的是为了修复或扩展原有系统的功能。
破解模式
替换模式的一种,这里强调的是其应用的目的是为了跳过原有系统的一部分代码。如加密检测代码,网络检测代码等等。
插件模式
注入模式的一种,在系统的内部直接依靠HOOK机制进行扩展业务功能。
共享模式
这类应用中,经常是为了获取对方的数据。必然我希望获取对方系统中,所有字符串的值。可以通过替换对方的内存管理器,导出所有字符串。
这个应用比较特殊。不过其特点在于,目的是达到系统之间的数据共享。
其实现,可能是观察模式,也可能是替换模式。
其他不能一一详述,欢迎大家一起补充。
分享到:
相关推荐
centos7.4+ nvidia-docker2 安装所需要的必备包之一 libnvidia-container-tools-1.0.2-1.x86_64.rpm ...nvidia-container-runtime-hook-1.4.0-2.x86_64.rpm nvidia-docker2-2.0.3-3.docker18.09.6.ce.noarch.rpm
NVIDIA-DOCKER-18.06版本 nvidia-container-runtime-hook_1.4.0-1_amd64.deb
离线安装包,亲测可用
【标题】"前端开源库-sails-hook-autoreload-fork" 涉及的主要知识点是前端开发中的自动化工具,特别是针对Sails.js框架的一个增强功能——自动重载(autoreload)。 Sails.js是一个基于Node.js的MVC(Model-View-...
本文将详细探讨`ast-hook`的工作原理、使用方法以及它在js逆向工程中的应用。 首先,我们了解什么是AST(抽象语法树,Abstract Syntax Tree)。在编程语言解析过程中,源代码会被转换成一个由节点构成的树形结构,...
标题“pc-vx-hook-http-api-36018.zip”和描述“pc-vx-hook-http-api-36018”暗示了这是一个与计算机软件相关的压缩文件,可能包含一个或多个程序或库,用于在PC(个人电脑)上钩取(hook)HTTP API。在IT领域,...
【Hook学习笔记-----钩子的应用】 Hook,全称为“钩子”,是Windows操作系统提供的一种机制,允许应用程序在系统层面上监控特定类型的消息或事件。它实际上是一个处理消息的程序段,通过系统调用挂入系统,形成钩子...
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
在实际使用中,你需要解压 "apache-atlas-hive-hook-1.2.0" 压缩包,然后按照官方文档的指引进行安装和配置。这可能包括编译源代码、添加依赖、修改 Hive 配置以及启动服务。通过正确配置和使用 Atlas Hive Hook,你...
前端开源库-mongoose-hook-ensure-indexesmongoose hook确保索引,一个mongoose插件,改进了'model.ensure indexes'方法,允许删除未使用的索引,并使用更改的选项重新索引。
这个"API-Hook-Open-Process.rar"压缩包文件显然与API Hook相关,特别是针对`OpenProcess`函数的Hook。`OpenProcess`是Windows API中一个重要的函数,允许一个进程获取对另一个进程的访问权限,从而可以读取、写入或...
- **源码限制**:对于封闭的第三方服务,缺乏源码访问权限限制了埋点技术的应用范围。 #### Hook技术详解 为了解决上述挑战,网易APM项目采用了hook技术来实现对应用的监控。根据操作时机的不同,hook技术可以分为...
本压缩包包含的资源涉及了用户层API Hook、内核驱动层的SSDT(System Service Dispatch Table)Hook、IDT(Interrupt Descriptor Table)Hook以及sysenter Hook,这些都是Windows操作系统中实现系统级控制的关键技术...
《PyPI官网下载:backports.hook_compressed-1.0.0-py3-none-any.whl》 在Python的世界中,PyPI(Python Package Index)是官方的第三方Python库分发平台,开发者们可以在这里发布自己的软件包,供其他用户下载使用...
"taskwarrior_jrnl_hook-0.1.0-py3-none-any.whl" 是一个针对Python开发者的特定库,主要用于与TaskWarrior任务管理工具集成,并利用jrnl日记应用进行日志记录。这个库的版本是0.1.0,适配Python 3解释器,且适用于...
这个压缩包"apache-atlas-2.1.0-kafka-hook.tar.gz"包含了Apache Atlas的2.1.0版本,特别针对CDH(Cloudera Data Hub)6.3.1版本进行了编译优化。CDH是一个流行的企业级大数据平台,它集成了多种开源大数据组件,...
learn-hook-shop-a.jsx
githook-maven-plugin Maven插件来配置和安装本地git钩子 保护您的VCS 在提交更改之前先检查一下更改始终是一个好主意:运行单元测试,执行构建等。但是,这样的检查列表很容易被忽略,尤其是在大型项目中。 为了...
1、文件内容:perl-Hook-LexWrap-0.24-2.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/perl-Hook-LexWrap-0.24-2.el7.tar.gz #Step2、进入解压后的目录,...
"apache-atlas-2.0.0-hbase-hook.tar.gz" 是一个特定于Apache Atlas 2.0.0版本的HBase Hook压缩包,这意味着它包含了使Apache Atlas与HBase数据库集成的组件。 Apache Atlas的HBase Hook是一个关键的特性,它允许...