当前位置: 首页 > news >正文

基于detours的Windows Hook

Detours是一个用于在Windows上监视和检测API调用的软件包。
Detours 是一个由 Microsoft Research 开发的库,它允许开发人员在运行时动态地拦截(或“钩子”)Windows API 函数调用。这对于诸如调试、日志记录、模拟、扩展或修改应用程序行为等任务特别有用。通过使用 Detours,开发者可以透明地替换任何已存在的函数,同时保持其原始功能(如果需要)的可用性。

Detours 的工作原理是通过修改目标函数的地址解析表(IAT, Import Address Table)或函数指针,将调用重定向到一个新的函数,这个函数被称为“trampoline”。这个新的函数会执行所需的自定义代码,然后可以选择性地调用原始函数,或者完全忽略它。

使用 Detours 时需要谨慎,因为它允许开发者在运行时修改正在运行的程序的行为。如果修改不当,可能会导致程序崩溃、数据损坏或其他不可预见的问题。因此,在使用 Detours 进行开发时,最好先在非生产环境中进行彻底的测试。

值得注意的是,由于 Detours 修改了 Windows API 的底层机制,因此它可能与某些安全软件(如防病毒程序)发生冲突。在部署使用 Detours 的应用程序时,可能需要与这些软件供应商进行协调。

另外,虽然 Detours 是一个强大的工具,但它并不是解决所有问题的最佳方法。在某些情况下,使用其他技术(如插件系统、代理服务器或虚拟化)可能更为合适。因此,在选择使用 Detours 之前,最好先评估其他可用的选项。

样例

#include<Windows.h>
#include<stdio.h>
#include<detours/detours.h>// 声明一个函数指针OldMessageBoxA,指向MessageBoxA。
static int(WINAPI* OldMessageBoxA) (HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType) = MessageBoxA;// 自定义函数MyFunction0,当调用MessageBoxA时,会跳转到此处。
int WINAPI MyFunction0(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType)
{// 执行特定的MessageBoxA函数return OldMessageBoxA(NULL, "Hook Success!", "Warning", MB_OKCANCEL);
}
int main()
{// 开始DetourTransactionBegin();// 更新到线程DetourUpdateThread(GetCurrentThread());// 附加HOOKDetourAttach(&(PVOID&)OldMessageBoxA, MyFunction0);// 提交DetourTransactionCommit();// 调用MessageBoxA,会转到MyFunction0MessageBoxA(0, 0, 0, 0);// 移除HOOKDetourDetach(&(PVOID&)OldMessageBoxA, MyFunction0);return 0;
}

1

相关链接

https://mp.weixin.qq.com/s/wbsjxv7Zt67pMi5ZYD0cfQ
https://github.com/microsoft/Detours
https://github.com/microsoft/Detours/wiki
https://idiotc4t.com/persistence/detous-inline-hook#inline-hook-jian-jie
https://github.com/microsoft/vcpkg/blob/master/README_zh_CN.md

相关文章:

  • 每天五分钟计算机视觉:如何在现有经典的卷积神经网络上进行微调
  • 阿里云 app 备案 获取公钥和md5
  • OS复习笔记ch11-3
  • 1. zabbix监控服务器部署
  • 高性价比MOS推荐:惠海HC090N10L,HC025N10L,100V高耐压,12V/24V加湿器和3.7V打火机专用MOS
  • JAVAEE之网络原理(2)_传输控制协议(TCP)的连接管理机制,三次握手、四次挥手,及常见面试题
  • PHP转Go系列 | 字符串的使用姿势
  • 初阶 《数组》 1. 一维数组的创建和初始化
  • Github 2024-06-19 开源项目日报 Top10
  • 什么是RPA
  • 【王树森】深度强化学习(DRL)学习笔记
  • 系统安全(补充)
  • 【Linux】CentOS 7 安装配置 postfix 邮件服务器随笔
  • 57.Linux/Unix 系统编程手册(下) -- SOCKET : Unix domain
  • C++ Windows Hook使用
  • 【译】JS基础算法脚本:字符串结尾
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • ES6之路之模块详解
  • java8-模拟hadoop
  • javascript 哈希表
  • JavaScript对象详解
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • nodejs:开发并发布一个nodejs包
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • Vue2.x学习三:事件处理生命周期钩子
  • 对象管理器(defineProperty)学习笔记
  • 力扣(LeetCode)357
  • 你不可错过的前端面试题(一)
  • 排序算法之--选择排序
  • 盘点那些不知名却常用的 Git 操作
  • 前端之Sass/Scss实战笔记
  • 深度学习在携程攻略社区的应用
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • #Z0458. 树的中心2
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (面试必看!)锁策略
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (转)C#调用WebService 基础
  • (轉貼) UML中文FAQ (OO) (UML)
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .NET delegate 委托 、 Event 事件
  • .NET HttpWebRequest、WebClient、HttpClient
  • .NET WPF 抖动动画
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .NET6 命令行启动及发布单个Exe文件
  • .NET8 动态添加定时任务(CRON Expression, Whatever)
  • .NET单元测试
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • .NET委托:一个关于C#的睡前故事
  • [ 数据结构 - C++]红黑树RBTree