不依赖于DLL就能工作的全局钩子

利用DLL构建全局钩子 钩子是一种很神奇的东西,yefeic 阅读详情
不依赖于DLL就能工作的全局钩子

不知道大家是通过什么开始对钩子(Hook)有了解的,我是看过Jeffrey Richter的《WINDOWS 高级编程指南》(新版的中文译名为《Windows核心编程》)。在这本书里作者介绍了三种将代码注入其他进程的方法,其中一种就是使用的全局消息钩子。我就是从这本书里对全局钩子有了最初的认识。
大家应该都知道,全局消息钩子要依赖于一个DLL才能够正常工作。于是呢,我也就理所当在地认为全局钩子都要依赖于一个DLL才能正常工作的,我想大部分人肯定和我一样也这么认为的。
但实际上不是这样的。有某些全局钩子可以不依赖于任何DLL而正常工作的。这些钩子包括,WH_JOURNALPLAYBACK, WH_JOURNALRECORD,WH_KEYBOARD_LL,WH_MOUSE_LL。为什么这些钩子可以不依赖于DLL而正常工作呢?我们可以从 MSDN中得到答案,MSDN中对于这四种钩子都这样的描述“This hook is called in the context of the thread that installed it.”,翻译成中文意思是钩子函数的调用是在安装钩子的线程上下文中进行的。 
说得更明白些,意思就是这些钩子是在哪个线程当中安装的,其钩子函数就在哪个线程中执行。所以使用这四种钩子是达不到代码注入的效果的,当然也就可以不依赖于任何DLL了。MSDN中只对个别钩子指出了必须还是没有必要使用DLL。
下面是我给出的一个底层键盘钩子的代码示例,当然是不需要DLL的。

#define _WIN32_WINNT 0400

DWORD g_main_tid = 0;
HHOOK g_kb_hook = 0;

bool CALLBACK con_handler (DWORD)
{
    PostThreadMessage (g_main_tid, WM_QUIT, 0, 0);
    return TRUE;
};

LRESULT CALLBACK kb_proc (int code, WPARAM w, LPARAM l)
{
    PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT)l;
    const char *info = NULL;
    if (w == WM_KEYDOWN)
        info = "key dn";
    else if (w == WM_KEYUP)
        info = "key up";
    else if (w == WM_SYSKEYDOWN)
        info = "sys key dn";
    else if (w == WM_SYSKEYUP)
        info = "sys key up";
    printf ("%s - vkCode [%04x], scanCode [%04x]/n",
    info, p->vkCode, p->scanCode);
    // always call next hook
    return CallNextHookEx (g_kb_hook, code, w, l);
};

int main (void)
{
    g_main_tid = GetCurrentThreadId ();
    SetConsoleCtrlHandler (&con_handler, TRUE);
    g_kb_hook = SetWindowsHookEx (
    WH_KEYBOARD_LL,
    &kb_proc,
    GetModuleHandle (NULL), // 不能为NULL,否则失败
    0);
    if (g_kb_hook == NULL)
    {
        fprintf (stderr,
        "SetWindowsHookEx failed with error %d/n",
        ::GetLastError ());
        return 0;
    };
    // 消息循环是必须的,想知道原因可以查msdn
    MSG msg;
    while (GetMessage (&msg, NULL, 0, 0))
    {
        TranslateMessage (&msg);
        DispatchMessage (&msg);
    };
    UnhookWindowsHookEx (g_kb_hook);
    return 0;
};
不依赖于DLL就能工作的全局钩子apihook 不依赖于DLL就能工作的全局钩子.zip 立即下载

相关推荐

ElasticSearch集群搭建

docker安装es集群

weixin_46562226的博客 2022

不使用DLL创建全局系统钩子

http://hi.baidu.com/freeness/blog/item/3198421662d0e04821a4e93c.html  MSDN 它不是说hMod和dwThreadId不能同时为0么,而要创建全局钩子,dwThreadId是肯定要设成0的,不然就是为指定的线程创建钩子了;那么hMod设成不为0不就行了,再看MSDN的叙述:当处理函数在程序代码中,并且所监听的是自己的线程

carl2380的专栏 1027

解决PubMed卡在“正在检查浏览器”页面的完整排查指南

DNS解析是将域名转换为IP地址的基础网络服务,其稳定性和准确性直接影响网站访问。当DNS服务器响应缓慢或返回异常结果时,可能导致客户端与服务器建立连接时出现偏差,从而触发网站的安全验证机制,例如Cloudflare等安全服务提供的浏览器环境检查。这一机制旨在防御恶意流量,但偶尔也会误拦截正常访问。在生物医学信息检索领域,PubMed作为核心文献数据库,其稳定访问对科研工作流至关重要。针对因DNS或本地缓存问题导致的‘正在检查浏览器’页面卡顿,通过刷新DNS缓存、更换为Google Public DNS或C

weixin_29597551的博客 3509

全局钩子 实例(不使用DLL和使用DLL两种)

出处:优快云 作者: xstring  不知道大家是通过什么开始对钩子(Hook)有了解的,我是看过Jeffrey Richter的《WINDOWS 高级编程指南》(新版的中文译名为《Windows核心编程》)。在这本书里作者介绍了三种将代码注入其他进程的方法,其中一

yedezhanghao的专栏 1万+

开发基于GDL235KBQ6开发板的IAP升级程序(HEX协议+串口空闲中断 + DMA接收数据)

使用GDL235kB开发板,实现串口iap升级程序的bootloader代码编写,app为led灯闪烁,并完成通信c代码

zhaozijuncc的博客 642

Python中的串口通信库pyserial(基础)

pyserial是一个跨平台的库,可以在多个操作系统上使用,包括Windows、Linux和MacOS。:flushInput方法用于清除输入缓冲区中的所有数据,flushOutput方法用于清除输出缓冲区中的所有待发送数据。:PySerial允许在创建Serial对象后,通过修改对象的属性来设置串口参数,如波特率、数据位、校验位和停止位。同时,也提供了方法或属性来检查串口的状态,如是否已打开。:sendBreak方法用于向串口发送一个BREAK信号,这可以用于向连接的设备发送一个中断或重置信号。

weixin_44217158的博客 1万+

波哥写的钩子教程

钩子技术(一) 来源: 任立波的日志 下面开始了我的钩子接触过程。 第一步。了解什么是钩子。 我们可以首先从字面上了解钩子,钩子是干什么的呢?日常生活中,我们的钩子是用来钩住某种东西的,比如,说,鱼钩是用来钓鱼的,一旦鱼咬了钩,钩子就一直钩住鱼了,任凭鱼在水里怎么游,也逃不出鱼钩的控制。同样的,Windows的钩子Hook也是用来钩东西的,比较抽象的是他是用来钩Windows事件或者消息的。

windworst的专栏 779

深度学习【46】pix2pixHD

英伟达的pix2pixHD,能够合成高清的2048*1024图片,简直振奋人心。pix2pixHD是我之前介绍过的pix2pix的改进版本,使用多由粗到精的G网络和多尺度D网络(每个D网络都是用了pix2pix中同样的patch技术)。论文一开始用pix2pix尝试合成更高分辨率的图片,但发现效果不好,训练也很不稳定。所以就对pix2pix进行了一顿魔改。我们来看看他们是怎么改进的。由粗到精的G网络

DCD_LIN的博客 1万+

不依赖于DLL就能正常工作的全局钩子

不知道大家是通过什么开始对钩子(Hook)有了解的,我是看过Jeffrey Richter的《WINDOWS 高级编程指南》(新版的中文译名为《Windows核心编程》)。在这本书里作者介绍了三种将代码注入其他进程的方法,其中一种就是使用的全局消息钩子。我就是从这本书里对全局钩子有了最初的认识。大家应该都知道,全局消息钩子要依赖于一个DLL才能够正常工作。于是呢,我也就理所当在地认为全局钩子都要依

pc2s的专栏 1140

UE5 AI寻路全攻略:从Nav Mesh基础到动态障碍与多模式导航

在游戏开发中,AI寻路是赋予非玩家角色自主移动能力的关键技术。其核心原理是通过预计算或实时生成一个表示可行走区域的导航网格,AI路径查找算法(如A*)在此网格上规划最优路径。这项技术的价值在于,它能极大提升游戏世界的真实感和交互性,使NPC能够智能地绕开障碍、穿越复杂地形,广泛应用于开放世界、RPG、策略游戏等多种场景。本文聚焦于虚幻引擎5的寻路系统,深入探讨其寻路网格体配置。针对动态环境挑战,文章详细介绍了如何利用寻路修饰体积和动态障碍物组件实现导航网格的实时更新;同时,针对游泳、飞行等特殊移动需求,解析

weixin_33226816的博客 360

激光工程师必备:5个ABCDRez在谐振腔设计中的实战技巧(含热效应处理)

本文为激光工程师分享了5个利用ABCDRez矩阵光学工具进行谐振腔设计的实战技巧,重点涵盖热效应处理、模式匹配优化与稳定性分析。通过建立参数化模型、动态热透镜补偿、模式匹配仿真及灵敏度分析,帮助工程师实现从“黑箱”到“白盒”的腔体设计与调试,提升激光器设计的鲁棒性与效率。

k6l7m8n9的博客 706

DLL注入——使用全局钩子

因为进程的地址空间是独立的,发生对应事件的进程不能调用其他进程地址空间的钩子函数。如果钩子函数的实现代码在DLL中,则在对应事件发生时,系统会把这个DLL加载到发生事件的进程地址空间中,使它可以调用钩子函数进行处理。所以只要在系统中安装了全局钩子,那么只要进程接收到可以发出钩子的消息,全局钩子的DLL就会被系统自动或者强行加载到进程空间中,这就可以实现DLL注入。);参数1:表示要安装的挂钩类型。参数2:表示的是钩子的回调函数。参数3:包含由lpfn参数执行的钩子过程的DLL句柄。

希望能帮助大家,希望大家多多支持,你们的支持是我前进的动力。 3131

符合DO-178C和DO-331的机载软件研制体系

DO-178C的核心要求软件开发生命周期:DO-178C定义了软件开发的生命周期过程,包括需求获取、设计、实现、验证和确认等。它为机载软件开发提供了一套系统化的指导,确保在开发过程中考虑安全性和可靠性。安全等级(DAL):根据系统的重要性,DO-178C将软件划分为不同的开发保障等级(DAL A到E),DAL A的要求最为严格,适用于关键安全功能,而DAL E的要求较低,适用于非关键功能。DO-178C在非基于模型软件开发中的应用。

qq_41854911的博客 976

全局钩子实例分析

1.关于全局钩子 如果要屏蔽其他进程的鼠标和键盘消息的话,那么局部钩子是不能实现的,我们需要使用远程钩子。而远程钩子的实现是需要借助DLL的,安装的钩子过程需要必须在动态链接库中去实现。远程钩子的设置过程与局部钩子的安装过程所用函数都是SetWindowsHookEx,只是参数不同而已,远程钩子的第4个参数应该设置为0,并把第三个参数指定为安装钩子过程的代码所在的DLL的句柄。 2.全局钩子的

bobopeng 2712

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【C++】代码实现:全局钩子注入技术

介绍 Windows 操作系统下程序全局钩子注入编程技术。

风语留痕 6171

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

依赖于DLL就能工作的全局钩子

文档标题:不依赖于DLL就能工作的全局钩子 原作者:佚名更新日期:2006-08-25浏览次数:372 关键字:Dll,全局,钩子,Hook,SetWindowsHookEx,HOOKPROC来源:(http://blog.sina.com.cn/s/blog_3ec38a67010005mz.html) - 依赖于DLL就能工作的全局钩子_闹海金蛟_新浪博客<br />不依赖于DLL就能工作的全局钩子<br /><br />不知道大家是通过什么开始对钩子(Hook)有了解的,我是看过Jeffrey Ric

adonis1620的专栏 574

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

阻止全局钩子的加载

网上有一篇关于这个问题的文章,题目叫《防止全局钩子的侵入》,作者不祥。文中简单分析了一下钩子的原理,然后使用了微软的Detours库进行 API拦截。如果只是为了拦截一个函数,使用Detours好像有点儿浪费。本文不使用Detours库,直接对LoadLibraryExW函数进行拦截。 先说一下全局钩子是怎么进入到我们的程序里来的。假如有个程序A安装了WH_GETMESSAGE的全局钩子,钩子函...

weixin_34290352的博客 1568

全局钩子原理以及操作流程

一、原理部分 1钩子的作用 监控其他程序,劫持其他程序。是黑客技术在本地的基础。 2什么是钩子 钩子是Windows的消息处理机制中的一个监视点,应用程序可以在这里安装一个监视子程序,这样就可以在系统的消息流到达目的窗口的过程前监控它们。 3钩子程序组成部分 1主程序——用来实现界面或其他功能 2钩子回调函数——用来接收系统发过来的消息 3钩子的安装和卸载模块 这是一个...

子曰小玖的博客 6075
上一篇: 免费的linux系统虚拟实验室
下一篇: 落尘无语,忆高中三年 之 信息学奥赛
ShellEx
博客等级 码龄21年 4粉丝 43原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值