观察模式
在HOOK很多应用中,有一类应用最为常用,那就是观察模式。对于信息获取的要求,在很多时候都是非常的重要的功能。在很多时候,我们都需要根据一定量的信息去判断如何决策。正如打仗一样,没有一定量的有意义的数据,就是摸黑,只能死路一条。
像Windows提供的SetWindowHook就是典型地为这类应用准备的。而且这也是最普遍的用法。
这个模式的特点是,在事情发生的时候,发出一个通知信息。观察者只可以查看过程中的信息,根据自己关心的内容处理自己的业务,但是不可以更改原来的流程。
如全局钩子中,经常使用的鼠标消息、键盘消息的监视等应用。金山词霸屏幕取词的功能是一个典型的应用(具体技术可以参考此类文章)。
注入模式
这个模式和观察模式最大的不一样的地方在于,注入的代码是为了扩展原始代码的功能业务。插件模式是此类模式的典型案例。
不管瘦核心的插件系统(如Eclipse)还是胖核心的插件系统(如Delphi、Visual Studio等IDE环境),其对外提供的插件接口都是为了扩展本身系统的功能的。
这种扩展的应用方式的典型特点,就是新的扩展代码和原来的代码会协调处理同类业务。
还有一些好的例子。我们曾经有一个应用,就是替换ReadFile和WriteFile,用以做到对所有文件操作的加密工作。这种应用和插件的差异在于被注入方是主动还是被动的。但是都是在完成同一类业务。
替换模式
如果针对应用目的不同,可以叫修复模式或破解模式。前者是为了修改系统中的BUG,后者是为了破解原有系统的限制。
比如我在前言中提到的,Delphi的VCL中,TObject并没有提供从接口到对象的转换服务,如果我们使用了此类模式,就可以让我们获得这种非常好的服务。对于一个设计或实现上有缺陷的原有系统(一般不能直接修改代码)来说,HOOK机制往往是很好的选择。
这类称之为修复模式非常好。
很多黑客也使用此种模式,必然替换访问加密锁的DLL中的导出表,替换成自己的函数,这样跳过对软件的控制代码。我们这里不是重点讲述软件破解,所以不继续深究其破解原理。但是,可以强调的是,这类应用的难点是,找出函数的参数。
这类模式的特点是,原有的代码会被新的代码所替换。
前面三个是基本模式,还有很多和实际应用相关的模式。
集权模式
此类模式的出现,大都是为了在全部系统中,统一处理某类事情。它的特点不在于注入的方式,而在于处理的模式。
这个模式,大都应用到某类服务上,比如键盘服务,鼠标服务,打印机服务等等特定服务上。通过统一接管此类服务的访问,限制或者协调对服务的访问。
比如键盘锁功能的实现,就是暂时关闭键盘的所有应用。
这类模式的特点主要会和特点服务有关联。
修复模式
替换模式的一种,这里强调的是其应用的目的是为了修复或扩展原有系统的功能。
破解模式
替换模式的一种,这里强调的是其应用的目的是为了跳过原有系统的一部分代码。如加密检测代码,网络检测代码等等。
插件模式
注入模式的一种,在系统的内部直接依靠HOOK机制进行扩展业务功能。
共享模式
这类应用中,经常是为了获取对方的数据。必然我希望获取对方系统中,所有字符串的值。可以通过替换对方的内存管理器,导出所有字符串。
这个应用比较特殊。不过其特点在于,目的是达到系统之间的数据共享。
其实现,可能是观察模式,也可能是替换模式。
其他不能一一详述,欢迎大家一起补充。

HOOK启思录---第三章 HOOK的应用模式相关推荐

  1. 面向对象编程启思录——读《OOD启思录》有感

    <OOD启思录>给我留下最深刻的三个印象是:首先,作者谦逊而委婉地建议面向对象成为为软件开发的首选方法.其次,作者以严谨的研究方式详细地介绍和讨论了关于面向对象编程的诸多细节性.关键性问题 ...

  2. 《OOD启思录》—第2章2.6节角色与类

    本节书摘来自异步社区<OOD启思录>一书中的第2章2.6节角色与类,作者[美]Arthur J.Riel,更多章节内容可以访问云栖社区"异步社区"公众号查看. 2.6 ...

  3. 《OOD启思录》目录—导读

    版权声明 OOD启思录 Authorized translation from the English language edition, entitled OBJECT-ORIENTED DESIG ...

  4. java程序语言设计第三章答案_java语言程序设计课后习题解答张思民第三章

    java语言程序设计课后习题解答张思民第三章 1 第3章 面向对象程序设计基础 [1]什么是 Java 程序使用的类?什么是类库? [解答]:Java 程序的基本单位是类.对象是对事物的抽象,而类是对 ...

  5. 《Head First设计模式》第三章笔记 装饰者模式

    装饰者模式(Decorator Pattern) *利用组合(composition)和委托(delegation)可以在运行时实现继承行为的效果,动态地给对象加上新的行为. *利用继承扩展子类的行为 ...

  6. 计算机网络 学习通 第三章作业

    题又有几道重的.. 第三章 目 录 第三章 一.单选题 二.填空题 三.简答题 四.论述题 五.计算题 一.单选题 1.在计算机网络中,所有的计算机均连接到一条通信传输线路上,在线路两端连有防止信号反 ...

  7. Elixir元编程-第三章 编译时代码生成技术进阶

    Elixir元编程-第三章 编译时代码生成技术进阶 注:本章内容来自 Metaprogramming Elixir 一书,写的非常好,强烈推荐.内容不是原文照翻,部分文字采取意译,主要内容都基本保留, ...

  8. X Window 程式设计入门--第三章 绘图(Graphic)

    http://cnpa.yzu.edu.tw/~thinker 作者:李圭烽 (Thinker; Thinker.bbs@bbs.yzu.edu.tw) (2001-06-01 20:10:00) I ...

  9. 读书笔记: C# 7.0 in a nutshell (第 三 章 Creating Types in C#)

    内容: 第三章: C#中创建类型 类 继承 object类型 struct 访问修饰符 接口 枚举 嵌套类 泛型 1. Classes 典型的class定义: class YourClassName ...

最新文章

  1. java 无法取消引用_Java的新手,并出现错误“无法取消引用int” - java
  2. Spring Boot 打包不同环境配置与 Shell 脚本部署
  3. 为什么HR 20分钟就淘汰了一个前端高级工程师?
  4. JavaScript——易班优课YOOC课群在线测试自动答题解决方案(十六)利用PC端和移动端BUG
  5. python的全局变量能暂存数据吗_【Python】Python之全局变量
  6. 静态Include和动态Include测试并总结
  7. Server.Transfer 和 Response.Redirect 的用法
  8. iPhone 播放音频声音文件
  9. java 注释添加引用_java – 如何引用注释处理中的方法的实现?
  10. iOS应用商店审核指南
  11. 六子棋人机程序Java版(附源码+设计思路)
  12. 采样定理的证明与推导
  13. flutter web 微信授权和微信支付
  14. 【单例模式、多例模式、工厂模式和枚举】
  15. live2d web笔记之一:官方SDK尝试
  16. 偶的流氓老公zt (超搞笑-转)
  17. 新建的web项目为什么默认访问index.jsp
  18. matlab离散点数字微分,MATLAB数值积分与微分
  19. java学了之后老忘_老程序员的建议,零基础学java,常见的误区和解决方法
  20. ggplot2-设置坐标轴

热门文章

  1. 高防IP跟高防CDN怎么选择
  2. linux中打开pdf文件_在Linux中减少PDF文件大小
  3. 第8代CPU i5-8250U 电脑安装核显 WIN7X64位驱动
  4. matlab车牌识别的外文文献翻译,车牌识别外文文献翻译中英文.doc
  5. linux自带i2c工具使用
  6. opencascade获取面的法向
  7. V2X定位-GNSS系列定位方法小结
  8. 学校怎么培养计算机竞争优势,浅谈中职计算机教学论文
  9. 想从事人工智能AI相关的工作,大学可以学什么专业?
  10. PyQt5实例 — 温度转换