`
ruilin215
  • 浏览: 1161579 次
  • 性别: Icon_minigender_2
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

HOOK启思录---第二章 HOOK的根源

阅读更多
我一直在避免写HOOK的技术实现,想尽可能地将一些看不到的东西收集起来。相对于了解一个成熟的技术,还不如去了解其中的思想吧。我是这样认为的。
这一章会暂时远离HOOK本身,我们会尝试着去思考这些技术出现的根源。
很多人象我一样,从OP的衰败中走向OO的繁荣。软件的复杂度也是突飞猛进。当年“没有银弹”的断言,非常准确地说明了软件的发展趋势,当新技术发展的时候,软件的复杂度也随之发展。我们现在的软件,已经不再是OP时代的软件了。
大家需要的不再是一段会计算的代码。大家需要图形界面,大家需要管理流程,大家需要信息共享!
假设我们以前那些单一功能的软件都可以比喻成一条路的话。它非常简单,你只要考虑从A如何走到B就可以了。

后来,我们的软件慢慢复杂起来,他们已经不再满足于一个功能,进行多功能整合的软件比比皆是。事实上,那个时候,好多软件都是一个功能的集合。

随着技术的发展,我们不再满足于这些简单功能的叠加。事实上,正是这个时候,我们的软件产业才真正发展起来。在中国,2000年以来,软件企业开始尝试工业化生产技术,发展速度明显加快,与国际差距明显缩小。
随着工业化发展,我们的软件复杂度是急剧的增加。它的功能需求也非常多。也许正如下图说画的那样,各种功能交错。
遗憾的是,如果软件只是需要这种层次的复杂度,我们就会很开心了!你时常会发现,在某些时候,你从A走到B的过程中,需要走到M到N上。然后在拐道走去P到O,然后再到B。这就是我们业务的交错性。
比如,我们现在有两个功能,一个是拷贝文件,一个是日志。从面向对象的角度来看,文件的维护工作和日志的维护工作都可以使用独立的类来完成:
上面两个类都能完成独自的相关业务,就正如我们上面描述的一段独立功能类似。可以假想,我们每个类,都是封装的相关业务功能。
那么剩下来我们就会发现一个非常严重,但是又很少被人提起的事:并不是写完两个类,我们的工作就完成了!
我们虽然是面向对象编程,但是最终总会发现,对象写完的时候,并不是功能完成的时候!为什么?因为我们的功能往往是交错的,就拿这个例子,写文件的时候也可能需要写日志!这些都是面向对象无法使用对象的概念来解决的。
于是从一开始,面向对象就有事件的概念提出来(Event)。这个概念的提出,并不仅仅是炒作一个概念,它的实现机制虽然和回调函数一样,但是思想却又是那么无可奈何!
如果没有事件,那么我们会如何编程呢?我想下面的这种道路图可能大家能从中看到什么。
多说几句,这其实在我们在编程中经常犯的错误,如果AB和CD都是我们自己编写的(如果AB是类库提供的另当别论),我们往往将AB和CD的交叉业务部分直接写成关联代码。即AB和CD会变得互相依赖!
从社会实践,我们会知道,要提高AB和CD的效率,他们的道路是不能重叠的。可以采取高架桥、隧道、地下通道等等措施。高速公路永远不可能和别人公用交叉路口。
这些交错的方式,其实就是我们软件中可以借鉴的方式啊!以前提供的回调函数,现在提供的事件,以及AOP中提出的HOOK方式都是!这类方法其实就是我们开始统一说的HOOK。
因此采用这些方式的本质源由是软件的复杂度,导致我们在编写独立功能的时候,不能完全预测或根本不能,预测到其他功能是如何扩展的。因此预先留一些可以扩展点,或者某些可以扩展的方式,来完成交错功能的实现。
上面这些的讲述,好像和HOOK没关系,其实可以更深入的帮助我们理解使用HOOK的意义所在。
分享到:
评论

相关推荐

    nvidia-container-runtime-hook-1.4.0-2.x86_64.rpm

    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

    NVIDIA-DOCKER-18.06版本 nvidia-container-runtime-hook_1.4.0-1_amd64.deb

    oci-systemd-hook-0.2.0-1.git05e6923.el7_6.x86_64.rpm

    离线安装包,亲测可用

    ast-hook用于js逆向根据参数值快速定位到生成加密参数位置

    `ast-hook`工具就是针对这种情况设计的,它专注于帮助开发者在JavaScript代码中快速定位到特定参数值的生成位置,特别是涉及到加密参数的场景。本文将详细探讨`ast-hook`的工作原理、使用方法以及它在js逆向工程中的...

    前端开源库-sails-hook-autoreload-fork

    【标题】"前端开源库-sails-hook-autoreload-fork" 涉及的主要知识点是前端开发中的自动化工具,特别是针对Sails.js框架的一个增强功能——自动重载(autoreload)。 Sails.js是一个基于Node.js的MVC(Model-View-...

    vdsm-hook-ethtool-options-4.20.39.1-1.el7.noarch.rpm

    官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装

    pc-vx-hook-http-api-36018.zip

    标题“pc-vx-hook-http-api-36018.zip”和描述“pc-vx-hook-http-api-36018”暗示了这是一个与计算机软件相关的压缩文件,可能包含一个或多个程序或库,用于在PC(个人电脑)上钩取(hook)HTTP API。在IT领域,...

    前端开源库-mongoose-hook-ensure-indexes

    前端开源库-mongoose-hook-ensure-indexesmongoose hook确保索引,一个mongoose插件,改进了'model.ensure indexes'方法,允许删除未使用的索引,并使用更改的选项重新索引。

    atlas hive hook 编译依赖 apache-atlas-1.2.0-hive-hook.tar.gz

    在实际使用中,你需要解压 "apache-atlas-hive-hook-1.2.0" 压缩包,然后按照官方文档的指引进行安装和配置。这可能包括编译源代码、添加依赖、修改 Hive 配置以及启动服务。通过正确配置和使用 Atlas Hive Hook,你...

    githook-maven-plugin:Maven插件安装本地git钩子

    githook-maven-plugin Maven插件来配置和安装本地git钩子 保护您的VCS 在提交更改之前先检查一下更改始终是一个好主意:运行单元测试,执行构建等。但是,这样的检查列表很容易被忽略,尤其是在大型项目中。 为了...

    API-Hook-Open-Process.rar_HOOK openprocess_Process_hook api_hook

    这个"API-Hook-Open-Process.rar"压缩包文件显然与API Hook相关,特别是针对`OpenProcess`函数的Hook。`OpenProcess`是Windows API中一个重要的函数,允许一个进程获取对另一个进程的访问权限,从而可以读取、写入或...

    learn-hook-shop-a.jsx

    learn-hook-shop-a.jsx

    Python库 | taskwarrior_jrnl_hook-0.1.0-py3-none-any.whl

    "taskwarrior_jrnl_hook-0.1.0-py3-none-any.whl" 是一个针对Python开发者的特定库,主要用于与TaskWarrior任务管理工具集成,并利用jrnl日记应用进行日志记录。这个库的版本是0.1.0,适配Python 3解释器,且适用于...

    PyPI 官网下载 | backports.hook_compressed-1.0.0-py3-none-any.whl

    《PyPI官网下载:backports.hook_compressed-1.0.0-py3-none-any.whl》 在Python的世界中,PyPI(Python Package Index)是官方的第三方Python库分发平台,开发者们可以在这里发布自己的软件包,供其他用户下载使用...

    所有种类的钩子,用户层的API HOOK,内核驱动层的SSDT-hook,IDT-hook,sysenter-hook.zip

    本压缩包包含的资源涉及了用户层API Hook、内核驱动层的SSDT(System Service Dispatch Table)Hook、IDT(Interrupt Descriptor Table)Hook以及sysenter Hook,这些都是Windows操作系统中实现系统级控制的关键技术...

    perl-Hook-LexWrap-0.24-2.el7.x64-86.rpm.tar.gz

    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.1.0-kafka-hook.tar.gz

    这个压缩包"apache-atlas-2.1.0-kafka-hook.tar.gz"包含了Apache Atlas的2.1.0版本,特别针对CDH(Cloudera Data Hub)6.3.1版本进行了编译优化。CDH是一个流行的企业级大数据平台,它集成了多种开源大数据组件,...

    网易APM hook方案探索-郑文

    ### 网易APM Hook方案探索 #### 背景与选型 在软件开发过程中,为了确保应用程序能够高效稳定地运行,开发者们需要借助一系列的工具和技术来进行性能监测和管理。这其中,应用性能管理(APM)系统就显得尤为重要。...

    apache-atlas-2.0.0-hbase-hook.tar.gz

    "apache-atlas-2.0.0-hbase-hook.tar.gz" 是一个特定于Apache Atlas 2.0.0版本的HBase Hook压缩包,这意味着它包含了使Apache Atlas与HBase数据库集成的组件。 Apache Atlas的HBase Hook是一个关键的特性,它允许...

    hook-deploy-源码.rar

    《hook-deploy源码解析与应用实践》 在软件开发过程中,部署自动化是提升效率、减少错误的关键环节。"hook-deploy"项目提供了一种基于钩子(hook)的自动化部署解决方案,允许开发者自定义各个阶段的操作,实现灵活...

Global site tag (gtag.js) - Google Analytics