你不能不知道到的Hook!

Hook是什么?

    hook翻译之后是钩子的意思,hook的用途主要是用来拦截消息的,看到这里大家可能会迷茫,What is a hook?所以这时就不得不普及一下操作系统的原理。

    举个例子:假如你是一名游戏热衷者,在玩游戏时,你要释放技能那么你就会对键盘鼠标进行操作,表面上你是直接操作游戏,其实中间经过了几个环节。

                  首先,你操作键盘鼠标,那么计算机底层键盘鼠标的驱动就会收到一个消息。

                  然后,这个驱动会把消息传个操作系统。

                  其次,操作系统会判断这个消息是作用在哪个程序上。

                  最后,操作系统会把这个事件传给相应的程序,那么,你就可以看到你操作游戏的样子了。

做自己的Hook!

    好!说了这些,大家想想假如你写了一个hook,在别人的电脑上拦截了这个消息,操作系统就不知道这个消息,你可以把这个消息通过网络发到你的电脑,那个那台电脑的一举一动你都清楚....(当然我教大家这个不是希望你们做坏事,而是同过hook更深入学习计算     机    和保护自己电脑),下面我来同过一个简单的程序来让大家了解hook。

1 int main()
2 {
3     MessageBox(NULL, L"Hello world", L"this",MB_OK);
4     system("pause");
5     return 0;
6 }

  这是一段简单的程序,其功能是为了显示一个对话窗口。这个对话窗口操作系统已经帮我们写好了,我们实际上是在调用这段代码。好!大家想一下我们能不能在调用这个函数之前截断这个调用,让程序调用自己的函数。(想想做插件是不是这个原理)答案是肯定的,我们能够截断这个消息并让他调用自己的函数。下面我们来代码实现一下。

 1 int WINAPI myMSG( HWND hWnd,
 2                   LPCTSTR IpText, 
 3                   LPCTSTR IpCaption,
 4                   UINT uType)
 5 {
 6 
 7     printf("哈哈你的消息被我截断了"); 
 9     return 1;
10 }

     这是我写的一个函数(注意:函数返回值和参数一定要和MessageBox一样,这样接口才能对上,不然会报错),我们要让程序执行我们的函数,那么我们就要写一个钩子。

 1 bool Hook()
 2 {
 3     //获取调用代码的首地址
 4     PROC p = GetProcAddress(GetModuleHandle(L"user32.dll"), "MessageBoxW");
 5     if (!p) return 0;
 6 
 7            BYTE b[5] = { 0 };
 8     //0xE9无条件跳转(学过汇编的同学应该知道)
 9     b[0] = 0xE9;
10        //计算偏移地址。 偏移地址 = 跳转地址-MessageBox的地址 
11     *(DWORD*)(b + 1) = (DWORD)myMSG - (DWORD)p - 5;
12        /*通过上面三行代码,这个数组储存的代码意思是(无条件跳转到我的函数地址位置)*/
13 
14         //在计算位置的内存中写入数据
15     WriteProcessMemory(GetCurrentProcess(), p, b, 5, NULL);
16     return 1;
17 }

     我已经写好了一个钩子,下面我放出完整程序的代码

 1  #include <stdio.h>
 2  #include <Windows.h>
 3  
 4  int WINAPI myMSG( HWND hWnd,
 5                     LPCTSTR IpText, 
 6                    LPCTSTR IpCaption,
 7                     UINT uType)
 8   {
 9       printf("哈哈你的消息被我截断了");
10      return 1;
11  }
12  
13  bool Hook()
14  {
15       //获取调用代码的首地址
16       PROC p = GetProcAddress(GetModuleHandle(L"user32.dll"), "MessageBoxW");
17       if (!p) return 0;
18   
19              BYTE b[5] = { 0 };
20       //0xE9无条件跳转(学过汇编的同学应该知道)
21       b[0] = 0xE9;
22         //计算偏移地址。 偏移地址 = 跳转地址-MessageBox的地址 
23      *(DWORD*)(b + 1) = (DWORD)myMSG - (DWORD)p - 5;
24         /*通过上面三行代码,这个数组储存的代码意思是(无条件跳转到我的函数地址位置)*/
25  
26          //在计算位置的内存中写入数据
27      WriteProcessMemory(GetCurrentProcess(), p, b, 5, NULL);
28      return 1;
29  }
30  int main() 
31 { 
32      Hook(); 
33      MessageBox(NULL, L"Hello world", L"this",MB_OK);         system("pause");
34      return 0; 
35     }

 

    首先我们把Hook注释掉运行。运行结果如下。

     如何加上hook,你会发现一件令人兴奋的事情,并没有弹出对话框。运行结果如下

 

   通过这个例子相信大家对hook有了一些了解,现在大家肯能会有一个疑问,我能跳转,能不能回去呢,答案是能的。我也给大家提供一个点思路ReadProcessMemory()用这个api来保存原来的段地址和内存中的代码,回去时在利用WriteProcessMemory()再跳转一次,就可以会到原来调用的代码处了,这些是不是很棒,大家可以回家自行试验,也可以巩固一下今天所学的知识。

  如果中间有什么错误,还请高手能帮我指出。

 

Win10 Hook 进程创建的研究 Win7甚至在它之前开始,想要hook进程创建已经不能简单的HookCreateProcessInternalW这一个函数了,因为Vista开始引入了UAC机制。如果一个进程想要通过UAC弹窗创建管理员进程,hook这个进程的CreateProcessInternalW已经不起作用,我在几年前的博文《Win7/VistaHook CreateProcess 的特别之处》(http://blog 阅读详情

相关推荐

其实用高大上的Hook技术动态注入代码很简单,一看就会!

背景介绍 很多时候系统处于安全考虑,将很多东西对外隐藏,而有时我们偏偏又不得不去使用这些隐藏的东西。甚至,我们希望向系统中注入一些自己的代码,以提高程序的灵活性。刚好有这么一种特殊的回调模式,Hook模式可以实现上述愿景。 Hook动态注入代码 Hook机制是回调机制的一种,普通的回调是静态的,我们必须提前写好回调接口;而Hook机制在Java中则可以利用反射,针对切入点(通常是一个成员变量),...

chice的博客 3665

hook framework_hook反越狱检测解读

抖音系列检测很严格 包括ker fish 等类型的hook 还有签名, 非法模块, 以及非官方dylib检测都有做包含了大概3000+的AB点, 能过的基本大仙级别, 能做的基本都是大佬, pay for much muchmoney, 很值得!1、iOS App运行的步骤为:用户点击App启动-> load(各种framework和dylib, 包含MobileLoader...

weixin_39621488的博客 808

Android hook原理及APP安全

Xposed原理 如何保证APP最安全。 这篇文章不对逆向和hook进行分析,如有不知道的,请看我之前的文章。 原理: 通过替换/system/bin/app_process程序控制zygote进程,使得app_process在启动过程中会加载XposedBridge.jar这个jar包,从而完成对Zygote进程及其创建的Dalvik虚拟机的劫持 Zygote启动进程时 1、都会将这个D...

weixin_39079048的博客 8022

Hook技术揭秘:如何在不改代码的情况下掌控程序流程

摘要: Hook技术通过在操作系统或应用程序流程中插入自定义代码,实现拦截、修改或监控系统调用、事件或方法。Windows平台可通过DLL注入、Inline Hook或消息钩子实现;Android平台可通过Java层反射、Native层函数修改或系统服务代理等方式;iOS则依赖工具如Cydia Substrate。游戏App中,Hook常用于外挂、反作弊、录屏或按键映射,但存在安全风险与合规问题。主流工具包括Xposed、Frida等,需权衡功能与稳定性风险。(150字)

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 3208

Android Hook机制(1)

Hook 的这个本领,使它能够将自身的代码「融入」被勾住(Hook)的程序的进程中,成为目标进程的一个部分。当然,根据 Hook 对象与 Hook 后处理的事件方式不同,Hook 还分为不同的种类,比如消息 Hook、API Hook 等。Zygote进程在启动时会创建一个Dalvik虚拟机实例,每当它孵化一个新的应用程序进程时,都会将这个Dalvik虚拟机实例复制到新的应用程序进程里面去,从而使得每一个应用程序进程都有一个独立的Dalvik虚拟机实例。而对象B就是就是我们所说的Hook点。

2401_87537934的博客 1136

Pytorch的hook函数

return x * 2 # 假设这个模块简单地将输入乘以2。

2401_83817689的博客 924

Android Hook 机制之简单实战

简介 什么是 Hook Hook 又叫“钩子”,它可以在事件传送的过程中截获并监控事件的传输,将自身的代码与系统方法进行融入。这样当这些方法被调用时,也就可以执行我们自己的代码,这也是面向切面编程的思想(AOP)。 Hook 分类 1.根据Android开发模式,Native模式(C/C++)和Java模式(Java)区分,在Android平台上 Java层级的Hook; ...

徐公,微信公众号同名 6万+

MouseHook: 掌控Windows系统鼠标事件的DLL实现

本文还有配套的精品资源,点击获取 简介:在Windows系统中,MouseHook技术通过设置钩子来捕获鼠标事件,为开发者提供了监控或控制鼠标行为的能力。通过使用SetWindowsHookEx函数,开发者可以在鼠标事件发生时进行干预。本文将介绍MouseHook的工作原理、鼠标事件、应用场景、注意事项与限制,并提供一个示例项目"MouseHook-main",帮助开发者了...

weixin_28949937的博客 1978

你知道abrt-hook-ccpp吗

abrt也可以叫abrtd,展开应该是automatically bug report daemon,也就是自动错误报告守护进程。从字面意义就可以看出,他是一个守护进程,监控进程,如果进程出现崩溃,那么他就会开始工作,收集bug,收集现场。用于在发生崩溃时报告软件包中的错误。

Vic的博客 2746

全局鼠标钩子MouseHook实现指南

全局鼠标钩子是Windows编程中一个高级但强大的工具,它允许开发者截获和处理系统级别的鼠标事件。这种技术常被用于各种场景,从用户界面增强到辅助功能应用程序,再到复杂的游戏开发。鼠标钩子可以监视所有的鼠标活动,并在事件发生时执行预定义的函数,使得开发者能够对用户的鼠标操作做出响应。在深入探讨其背后的技术和应用之前,让我们先理解全局鼠标钩子是如何定义的,并探讨其用途和潜在的应用场景。全局鼠标钩子是通过使用Windows API中的SetWindowsHookEx函数来实现的。

weixin_33773084的博客 1336

电网渗透之终端安全

        电力系统安全不仅关系到电网的稳定运行,也关系到国家能源安全和国计民生,甚至关系到国家的安全和利益,电力系统由于结构复杂多样、分布广泛、重要性高,一旦系统瘫痪影响巨大,因此,极容易成为敌对势力攻击的首选目标。随着信息安全暴露面迅速增加,将给公司网络安全防线带来严峻挑战。       监控、保障这些电力系统安全运行变的尤为重要。内部安全防护产品有防火墙、纵向加密、反向隔离设备等...

guapi007008的博客 2722

各种HOOK方式和检测对抗方法

hook翻译过来是拦截的意思, 我们很多时候也叫钩子,其实是很形象的.hook有什么作用呢?1.当代码执行到某行时,获取寄存器值和内存里的值,进行调试分析,例如hook明文包.2.当代码执行到某行时,插入想执行的代码.例如迅雷拦截发包函数.3.当代码执行到某行时,修改寄存器,达到某些篡改目的.

任鸟飞2217777779的博客 1万+

别再死磕文档了!用国产MBSES软件5分钟上手MBSE建模(保姆级图文教程)

本文通过国产MBSES软件,详细演示了如何在5分钟内完成智能家居系统的MBSE建模。从模块图定义到状态机图构建,再到参数约束验证,全程图文指导,帮助工程师快速掌握基于模型的系统工程方法,显著提升复杂系统设计效率。

weixin_26833503的博客 237

Hook技术之API拦截(API Hook)

Inline Hook就是修改

bobopeng 3万+

Rockchip MPP解码H264实战:从文件到YUV的完整流程解析

本文详细解析了在Rockchip平台上使用MPP(Media Process Platform)硬件解码H264视频文件并输出YUV数据的完整流程。通过实战代码示例,深入讲解了MPP解码器的初始化、数据包投递、非阻塞模式下的双循环控制以及YUV帧的提取与保存等核心步骤,并提供了环境搭建、编译运行和常见问题排查指南,帮助开发者高效利用硬件加速进行视频处理。

life6的博客 479

OpenClaw + Qwen 模型集成飞书完整教程

1、环境要求:- **操作系统**: Windows- **Node.js**: v18+ (推荐 v20+)- **飞书账号**: 需要企业管理员权限(创建应用用)或者个人飞书账号创建个人应用- **网络**: 能访问 GitHub 和飞书开放平台2、安装Node.js下载完成后验证是否安装成功,cmd窗口输入“node --version”,显示版本号即为安装成功(如下图所示)3、获取大模型APIKEY(这里以Qwen为例)

qq_29609427的博客 478

Hook 机制(转帖, 一直很想知道的)

本文转贴自http://armystone.bokee.com/,访问地址为http://armystone.bokee.com/viewdiary.14189069.html无意冒犯,如有侵权,请提前通知,本博客将及时处理。 本文将试图以下面的顺序讲解HOOK的大部分内容:  1、 WINDOWS的消息机制  2、 HOOK介绍  3、 HOOK链  4、 HOOK钩子的作用范围

xiaodongdehome的专栏 1162

rk3576之imx415 4k@60fps

1;0;1;0;1;0;1;0;1;0;1;0;1;0;

darennet的专栏 705

Hook 实战之 Hook AMS

本文 Android 系统源码基于 9.0 我们知道新建一个 Activity 之后我们需要在 manifest 中注册,否则启动的时候就会崩溃,现在使用 Hook 的方法绕过检查来启动一个没有注册的 Activity。 如果我们不注册的话就会报下面的错误: Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.jeanboy.app.hooktrainning/.

jeanboy 5066

7、初级视觉皮层(V1)的研究综述

本文综述了初级视觉皮层(V1)的基本功能特性、计算理解、细胞相互作用及理论模型。V1不仅执行方向和空间频率的选择性滤波,还通过相位选择性和上下文调制参与高级视觉处理。研究从信息编码角度解释了V1感受野的形成,并介绍了基于自然图像统计的建模方法。横向与反馈连接揭示了V1在全局视觉整合中的作用,尤其是上下文对细胞响应的快速调节。李的动态模型提出V1可生成视觉显著性图,支持前注意分割和注意力引导。未来研究聚焦于V1在注意力、意识和硬件实现中的潜在应用,推动视觉神经科学与人工智能的交叉发展。

7z8x2c4v6b9的博客 146

【Unity】 预制体Prefab使用说明

在 Unity 中,Prefab 是一个可以预先制作并重复使用的 GameObject 或组件集合,Prefab 中的 GameObject 可以有子对象和其他组件。

灵境引路人 2851
上一篇: python 数据结构中被忽视的小技巧
下一篇: 给Ubuntu 16.04更换更新源
ccc82284
博客等级 码龄11年 15粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值