发布时间:2026/9/1 14:32:30
黑客爱用的 HOOK 技术大揭秘! 黑客爱用的 HOOK 技术大揭秘什么是 HOOK 技术病毒木马为何惨遭杀软拦截商业软件为何频遭免费破解系统漏洞为何能被补丁修复这一切的背后到底是人性的扭曲还是道德的沦丧敬请收看今天的专题文章《什么是 HOOK 技术》上面是开个玩笑言归正传今天来聊的话题就是安全领域一个非常重要的技术HOOK 技术。HOOK英文意思是“钩子”。在计算机编程中HOOK 是一种「劫持」程序原有执行流程添加额外处理逻辑的技术。按照这个定义其实我们 Python 中的装饰器和 Java 中的注解这种面向切面编程的手法在某种程度上来说也算是 HOOK。不同的是本文要探讨的 HOOK 并非属于程序原有的逻辑而是在程序已经编译成可执行文件甚至已经在运行中的时候如何劫持和修改程序的流程。按照劫持的目标不同常见的 HOOK 有以下这些类型Inline HOOKIAT HOOKC virtable HOOKSEH HOOKIDT HOOKSSDT HOOKIRP HOOKTDI HOOK NDIS HOOKWindows Message HOOK接下来咱们挨个来看一下。Inline HOOK程序和代码是给程序员们看的计算机要运行最终是要编译成 CPU 的机器指令才能执行。Inline HOOK的目标就是直接修改程序编译后的指令属于最基础也最常见的 HOOK 技术。下面我们以一个实例来感受一下 Inline HOOK 的效果void functionA() { cout this is function A endl; } void hookFunction() { cout this is hookFunction endl; } int main() { cout before hook endl; functionA(); // prepare hook unsigned char code[5] { 0xe9, 0x00, 0x00, 0x00, 0x00 }; unsigned int offset (unsigned int)hookFunction - ((unsigned int)functionA 5); *(unsigned int*)code[1] offset; // install hook unsigned long old 0; VirtualProtect(functionA, 0x1000, PAGE_EXECUTE_READWRITE, old); memcpy(functionA, code, 5); cout after hook endl; functionA(); return 0; }输出代码中定义了目标函数 functionA 和 hook 函数 hookFunction。第一次调用输出显示调用了原函数。然后安装一个 HOOK准备了一条jmp指令覆盖函数入口处的指令。此时观察覆盖前后的函数指令变化对比再次调用该函数则一进入就发生跳转我们安装的 HOOK 函数得到了执行。所以第二次输出显示 HOOK 函数得到了调用。大部分情况下我们习惯于在函数入口处执行 HOOK但这并不是绝对的还需要具体问题具体分析。比如如果我们需要等待函数执行完毕时拿到返回值才能介入处理这个时候就需要在函数 return 的地方进行 HOOK。甚至有可能需要在函数中途某个地方介入这个时候就需要更进一步地对函数的反编译指令进行分析确定 HOOK 的点位和处理逻辑。执行 Inline HOOK 非常关键的几点指令所在的内存页是否允许写入操作若只读须先添加写入权限。需要动态解析目标位置处的指令不能像上面那样暴力覆盖否则会影响原来函数的执行逻辑。如果在 HOOK 处理函数中需要调用原函数注意别陷入死循环。如果有参数需要处理好堆栈平衡。Inline HOOK 由于是直接在 CPU 机器指令层面上的操作所以首先是无法做到跨平台。同时还需要对 CPU 的指令集有一定程序的了解具备一定的汇编语言功底。好在IT 行业从来不缺造轮子的人已经有不少优秀的开源项目将 Inline HOOK 封装成库比如Detours。除了直接修改函数的机器指令还有一类 HOOK它们修改的是某些重要的函数指针从而达到劫持执行的目的。形形色色的函数指针就衍生出各式各样的 HOOK 技术。IAT HOOK一个程序的所有代码一般不会全部都编译到一个模块中分拆到不同的模块既有利于合作开发也有利于代码管理降低耦合。动态链接库就提供了这样的能力将不同的模块编译成一个个的动态库文件在使用时引入调用。在 Windows 平台上动态链接库一般以 DLL 文件的形式存在主程序模块一般是 EXE 文件形式存在。无论是 EXE 还是 DLL都是属于 PE 文件。一个模块引用了哪些模块的哪些函数是被记录在 PE 文件的导入表 IAT中。这个表格位于 PE 文件的头部里面记录了模块的名字函数的名字。在模块加载时模块加载器将解析对应函数的实际地址填入到导入表中。通过修改导入表 IAT 中函数的地址这种 HOOK 叫IAT HOOK。SEH HOOKSEH 是 Windows 操作系统上结构化异常处理的缩写在代码中通过 try/except 来捕获异常时操作系统将会在线程的栈空间里安置一个异常处理器其实就是一个数据结构里面定义了发生异常时该去执行哪里的代码处理异常。异常处理可以多级嵌套那多个异常处理就构成了一个链表存在于栈空间之上。当发生异常时操作系统就从最近的异常处理器进行寻求处理如果能处理则罢了不能处理就继续寻求更上一级的异常处理器直到找到能处理的异常处理器。如果都没法处理那对不起只好弹出那个经典的报错对话框进程崩溃。SEH HOOK针对的目标就是修改这些异常处理器中记录的函数指针当异常发生时就能获得执行从而劫持到执行流因为这些异常处理器都位于线程的栈空间修改起来并非难事。C virtable HOOKC 是一门面向对象的编程语言支持面向对象的三大特性封装性、继承性、多态性。其中的多态性各个 C 编译器基本上都是通过一种叫虚函数表的机制来实现。下面通过一个实际的例子来感受一下虚函数表在 C 多态性上发挥的作用。#include iostream using namespace std; class Animal { public: virtual void breathe() { cout Animal breathe endl; } virtual void eat() { cout Animal eat endl; } }; class Fish : public Animal { public: virtual void breathe() { cout Fish breathe endl; } virtual void eat() { cout Fish eat endl; } }; class Cat : public Animal { public: virtual void breathe() { cout Cat breathe endl; } virtual void eat() { cout Cat eat endl; } }; int main() { Animal* animal nullptr; Fish* fish new Fish(); Cat* cat new Cat(); animal fish; animal-breathe(); animal-eat(); cout -------------- endl; cout sizeof(fish) sizeof(fish) endl; cout sizeof(cat) sizeof(cat) endl; cout -------------- endl; animal cat; animal-breathe(); animal-eat(); delete fish; delete cat; return 0; }输出通过上面的输出可以看到fish 和 cat 对象都只占据 4 个字节。因为这两个类都没有成员变量唯一需要存储的就是一个虚函数表指针。以 cat 对象为例看一下它的地址是 0x005cfc30看一下这个地址起始的 4 个字节是什么虚表指针是 0x000d9b90这里需要注意字节顺序。通过这个地址找到虚函数表里面有两个函数地址查看这两个地址都是指向了一个 jmp 指令分别跳到了 Cat 类的两个虚函数。通过上面的实例总结一下对象、虚函数表和虚函数代码之间的关系如下图所示每个包含虚函数的类对象在内存中都有一个指针位于对象头部指向的是一个虚函数表表中的每一项都是虚函数地址。类继承后如果重写了父类的虚函数子类对象指向的表格中对应函数的地址将会更新为子类的函数。这样使用父类指针指向子类对象通过指针调用虚函数时就能调用到子类重写的虚函数从而实现多态性。既然是记录函数地址的表格那就有存在被篡改的可能这就是C virtable HOOK。通过篡改对应虚函数的地址实现对相应函数调用的拦截。实施这种 HOOK需要逆向分析目标 C 对象的结构掌握虚函数表中各个函数的位置才能精准打击。上面几种 HOOK修改的都是应用层的函数指针而操作系统内核中还有一些非常重要的表格它们的表项中记录了一些更加关键的函数HOOK 这些表格中的函数是非常高危的操作操作不当将导致操作系统崩溃。当然高风险高回报HOOK 这些函数能实现一些非常强大的功能是病毒、木马、安全软件非常爱干的事情。SSDT HOOK系统调用是操作系统提供给应用程序的编程接口 API应用程序通过这些 API 得以操作计算机的资源如进程、网络、文件等。执行系统调用的时候CPU 将从用户模式切换到内核模式进入内核后将会根据系统调用的 API 编号去找到对应的系统服务函数实现对应 API 的功能。操作系统将所有的系统服务函数地址存放在了一个表格中这个表格就是系统服务描述符表。在 Linux 上这个表格的名字叫sys_call_table在 Windows 上它叫KeServiceDescriptorTable简称SSDT。Windows 上的 SSDT 向来是兵家必争之地安全软件为了监控应用程序的行为通常都会替换 SSDT 表格中的系统服务函数地址为它们的函数。当系统调用触发时安全软件将会及时知晓并通过应用程序的参数来判定是否“放行”这次调用。IDT HOOK内核中除了记录系统服务的 SSDT还有一个非常重要的表格中断描述符表 IDT。IDT 用于记录 CPU 执行过程中遇到中断、异常等情况时该转向哪里去处理这些情况的函数地址。HOOK IDT 有一个注意事项不同于 SSDT 是全局唯一的IDT 是与 CPU 核心紧密相关的对于多核处理器会对应多个 IDT 表。如果想通过 HOOK IDT 中的函数来搞事情的话可能需要同时处理多个表。除了直接修改函数指令和修改函数指针之外还有一类特殊的 HOOK它们通过系统提供的机制拦截某些消息、通知从而有机会介入监听、拦截。IRP HOOK在 Windows 系统上用户程序和内核驱动之间的交互是通过一种称为IRP的数据结构实现的你可以简单将其理解为应用程序发送了一个消息下去这个消息就是一个 IRP。而接收消息的目标是驱动程序创建的设备 Device。注意这个设备不一定是物理设备也可能是完全不存在的虚拟设备驱动程序可以任意创建一个不存在的设备。Windows 内核中提供了驱动设备的挂载操作允许别的驱动程序对指定设备进行挂载从而可以截获发送给该设备的“消息”这种 HOOK 方式被称为IRP HOOK。国内一些安全软件为了互相攻击经常用这种方式拦截对方驱动程序的消息从而可以“保护”自己不被对方干掉。TDI HOOK NDIS HOOK这两种 HOOK 方式与 Windows 内核中的网络子系统密切相关。Windows 内核中的网络结构是分层式设计。从最上层的 API socket 层、到 TCP/IP 协议栈层、再到底层的网卡驱动程序分了很多个层次。而层与层之间的交互是通过一系列标准接口来实现的其中最重要的两个接口标准就是TDI和NDIS。TDI 封装了不同协议栈的差异Windows 不止支持 TCP/IP 协议栈提供给上层统一的调用接口。NDIS 则封装了底层不同网卡的驱动程序接口差异提供给上层统一的收发数据包接口。Windows 为了扩展性支持允许类似防火墙之类的软件通过这些接口接入从而能够截获到网络通信流量进行安全审计。既然开了这些接口一些流氓软件和木马病毒也就盯上了它们通过这些接口就能轻松监听、篡改网络数据达到邪恶的目的。Windows Message HOOKWindows 操作系统的 UI 交互是以消息来驱动的用户的键盘输入、鼠标操作都会被操作系统以消息的形式发送到各个应用程序处理。Windows 提供了 API 接口可以被程序用于捕获这些消息从而实现一些特定的功能。HHOOK SetWindowsHookEx( int idHook, HOOKPROC lpfn, HINSTANCE hmod, DWORD dwThreadId );这种机制叫做 Windows 消息钩子最常见的就要数键盘钩子了在十多年前流氓软件和木马病毒大行其道的时候这些恶意软件经常喜欢通过这种方式来监听用户的键盘输入从而来盗取 QQ 密码当然现在肯定是不行的了。总结以上就是要介绍的全部 HOOK 技术了。当然有 HOOK就有反 HOOK很多安全软件都会检查关键的位置是否被篡改。不仅如此因为流氓软件随意修改系统Windows 从 Win7 x64 开始加入了PatchGuard机制针对操作系统核心数据结构都加入了定时检测机制一旦发现被篡改立刻蓝屏给你看而且随着系统升级换代这个检查的粒度和强度变得越来越强。最后来回到文章开头的几个问题病毒木马为何惨遭杀软拦截因为安全软件在内核中 HOOK 了大量的关键位置病毒木马的进程、文件、网络行为都将受到监控一举一动都难逃杀软的眼睛想要拦截易如反掌。商业软件为何频遭免费破解通过逆向分析加上 Inline HOOK破解者可以篡改掉商业软件的注册校验机制让校验函数返回成功绕开软件的限制。系统漏洞为何能被补丁修复统一通过 Inline HOOK操作系统能够修改原来有 bug 的代码转而执行修复后的新版本解决系统漏洞。据结构都加入了定时检测机制一旦发现被篡改立刻蓝屏给你看而且随着系统升级换代这个检查的粒度和强度变得越来越强。最后来回到文章开头的几个问题病毒木马为何惨遭杀软拦截因为安全软件在内核中 HOOK 了大量的关键位置病毒木马的进程、文件、网络行为都将受到监控一举一动都难逃杀软的眼睛想要拦截易如反掌。商业软件为何频遭免费破解通过逆向分析加上 Inline HOOK破解者可以篡改掉商业软件的注册校验机制让校验函数返回成功绕开软件的限制。系统漏洞为何能被补丁修复统一通过 Inline HOOK操作系统能够修改原来有 bug 的代码转而执行修复后的新版本解决系统漏洞。你看技术就是一柄双刃剑善或恶一念之间。接下来我会教你零基础入门快速入门上手网络安全。最后关于网络安全技术储备网络安全是当今信息时代中非常重要的一环。无论是找工作还是感兴趣黑客都是未来职业选择中上上之选为了保护自己的网络安全学习网络安全知识是必不可少的。如果你是准备学习网络安全黑客或者正在学习下面这些你应该能用得上①网络安全学习路线②20份渗透测试电子书③安全攻防357页笔记④50份安全攻防面试指南⑤安全红队渗透工具包⑥网络安全必备书籍⑦100个漏洞实战案例⑧安全大厂内部视频资源⑨历年CTF夺旗赛题解析一、网络安全黑客学习路线网络安全黑客学习路线形成网络安全领域所有的知识点汇总它的用处就在于你可以按照上面的知识点去找对应的学习资源保证自己学得较为全面。二、网络安全教程视频我们在看视频学习的时候不能光动眼动脑不动手比较科学的学习方法是在理解之后运用它们这时候练手项目就很适合了。三、网络安全CTF实战案例光学理论是没用的要学会跟着一起敲要动手实操才能将自己的所学运用到实际当中去这里带来的是CTFSRC资料HW资料毕竟实战是检验真理的唯一标准嘛~四、网络安全面试题最后我们所有的作为都是为就业服务的所以关键的临门一脚就是咱们的面试题内容所以面试题板块是咱们不可或缺的部分这里我给大家准备的就是我在面试期间准备的资料。网安其实不难难的是坚持和相信自己我的经验是既然已经选定网安你就要相信它相信它能成为你日后进阶的高效渠道这样自己才会更有信念去学习才能在碰到困难的时候坚持下去。机会属于有准备的人这是一个实力的时代。人和人之间的差距不在于智商而在于如何利用业余时间只要你想学习什么时候开始都不晚不要担心这担心那你只需努力剩下的交给时间这份完整版的网络安全学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

相关新闻

2026/9/1 14:32:30

Deepseek Harness 本地安装配置全指南:从环境搭建到实战应用

最近在尝试将大模型能力集成到本地开发工作流时,发现很多工具要么配置复杂,要么功能单一。Deepseek Harness 作为一个新兴的AI助手工具,因其轻量、开源和强大的代码生成与调试能力,吸引了不少开发者的目光。然而,其安装…

2026/9/1 14:32:30

OPPO前端秋招笔试复盘:工程化与微前端实战考察

2023年秋招那阵子,我在电脑前点开OPPO前端岗的笔试链接,摄像头调试、屏幕共享、签名确认,一套流程走完,90分钟倒计时启动。说实话,那次笔试跟我之前刷过的不少大厂前端题感觉都不太一样——它没有堆特别偏门的冷知识&a…

2026/9/1 14:32:30

Claude结合设计模式:高效实现动态图形开发的工程化方案

这次我们来看一个技术组合方案:用 Claude 配合设计模式,来搞定动态图形的生成与实现。如果你一直觉得动态图形(比如 Lottie 动画、SVG 交互)的开发门槛高、流程繁琐,那么这个思路值得你花十分钟了解一下。核心不是某个…

2026/9/1 14:47:33

AI开发Skill实战:用自然语言一键生成微信小程序完整指南

1. 背景与核心概念 1.1 什么是 Skill?一个全新的 AI 开发范式 在传统的软件开发流程中,从需求分析、原型设计、UI 开发、后端联调、测试到最终部署上线,往往需要多个角色、多轮迭代、多套工具配合才能完成一个最小可用产品。对于微信小程序这…

2026/9/1 14:47:33

基于LangChain的RAG知识库问答系统实现与调优

简介:面向软件开发者的Langchain RAG源码包,聚焦如何用Langchain搭建可运行的检索增强生成系统,适合正在学习RAG、想快速上手LLM应用开发的初中级工程师。代码完整实现了从安装依赖、配置API密钥、加载本地知识库文档,到构建向量数…

2026/9/1 14:47:33

Python爬虫实战:阿里云盘福利码自动监控与推送工具

简介:一个主打阿里云盘福利码持续更新的轻量源码包,面向有扩容需求的个人用户以及关注云盘福利活动的网民,解决存储空间不足、四处找码不便的问题。压缩包共2个文件,包括一个可直接在浏览器打开运行的 index.html 页面和配套的 in…

2026/9/1 14:47:33

Flowable 6.7.2数据库建表SQL脚本详解:MySQL与Oracle实操指南

简介:面向使用Flowable 6.7.2工作流引擎的Java开发人员,这份压缩包提供了分别适配MySQL与Oracle两种主流数据库的初始化建表SQL脚本,能够一键创建流程定义表、运行时表、历史表、变量表、事件表及辅助表等核心数据表,帮助开发者快…

2026/9/1 14:47:33

COMSOL电树枝仿真:从电场计算到分叉生长全流程解析

简介:COMSOL绝缘材料电击穿与电树枝生成机理仿真资料,面向电气工程专业学生、绝缘技术研究人员及高压设备工程师,聚焦高电压下绝缘失效的核心问题。内容基于COMSOL Multiphysics建立多物理场模型,系统演示电场集中、电荷积累、局部…

2026/9/1 14:42:32

Design Compiler:常量触发器的移除

相关阅读 Design Compilerhttps://blog.csdn.net/weixin_45791458/category_12738116.html?spm1001.2014.3001.5482 简介 其实在下面这篇关于Formality的文章中,笔者已经介绍了常量触发器的移除,但仅提了一句“当Design Compiler识别到常量触发器后&am…

2026/8/31 1:05:20

vSound小提琴数字处理器实操指南:从接线到演出的完整配置

电小提琴或者原声小提琴插电演出,第一个绕不开的坎就是声音难听。原声琴的共鸣和空气感一旦进了拾音器,出来的往往是一坨干瘪、发尖、带着奇怪塑料味的信号。我当初第一次把琴接上乐队调音台,直接被主唱吐槽"你这声音像在锯钢丝"。…

2026/9/1 8:27:47

传感器接口IC如何攻克生物化学传感的微弱信号难题?

1. 从电极到比特流:为什么生物化学传感必须依赖专用接口IC 做生物化学传感的人都有过类似的经历:明明传感器本身性能很好,信号输出却一塌糊涂——噪声大、漂移明显、重复性差,怎么调都达不到预期。很多时候问题并不在传感器&#…

2026/9/1 7:04:43

STM32F411CEU6多通道ADC采集:扫描模式+DMA实现详解

1. 多通道 ADC 的用武之地把“Multichannel ADC”和“STM32F411CEU6”这两个关键字放在一起,其实就是嵌入式开发里最常遇到的一类需求:用一块不算贵的 MCU,同时采集多路模拟信号。STM32F411CEU6 是 48 引脚的 Cortex-M4F 主控,主频…

2026/9/1 0:00:42

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/1 0:00:42

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/1 0:00:42

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

2026/9/1 0:00:42

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行&#xff0c;Type-C接口算是典型的“看着简单&#xff0c;做起来全坑”的东西。光引脚就24个&#xff0c;高低速信号、电源、控制线全部塞在一个小小的连接器里&#xff0c;如果PCB布局不做规划&#xff0c;打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/1 0:00:42

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/1 0:00:42

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…