Hook API在自动化测试、性能分析以及安全攻防领域有着广泛的应用。

Detours 作为微软研发并开源的API HOOK框架,在微软内部以及业界有着广泛的使用,正如它的官方说明一样:

Detours is a software package for re-routing Win32 APIs underneath applications. For almost twenty years, has been licensed by hundreds of ISVs and used by nearly every product team at Microsoft.

首先要介绍该框架用到的几个概念:

Source Function:用户编写的源代码

Target Function:被调用的函数(比如Windows API)

Detour Function: 自定义函数,用来替换Target Function的函数

Trampoline:从Detour Function 跳转回 Target Function 所需的指令

下面我们看一下HOOK之前的正常调用流程:

再看一下HOOK之后的流程:

为了方便理解,我们看一下伪代码示意图:

上面就是 Detours Hook API的基本原理了,下面我们在看一下源代码,是具体如何实现以上部分的。

在代码里面,如果我们想hook 一个api一般编写如下代码:

其中Old_ReadProcessMemory 与 My_ReadProcessMemory 分别为 Target Function 以及 Detour Function

看到上面的代码我们可以思考一下,函数最后为什么调用Old_ReadProcessMemory 而不是直接调用 ReadProcessMemory呢?

接下来的源码分析可以解答这个问题。

我们先分析DetourTransactionBegin这个函数

可以看到,这个函数的主要作用是修改之前已经分配的Trampoline内存的属性,确保它们是可以写入的,为之后的操作进行准备。

DetourUpdateThread函数的主要作用就是去让线程进入暂停状态,为后面的替换操作做准备。

接下来分析 DetourAttach函数

DetourAttach函数内部只有一句代码就是调用 DetourAttachEx函数。

由于DetourAttachEx函数特别长,下面的话就只指出几个关键片段

复制Target Function开始处的机器码到Trampoline

在复制到Trampoline的机器码结尾处填充跳转指令(跳转到Target Function没有被覆盖部分)

另外一个要注意的点就是 函数用数据结构保存了第一个参数

DetourAttach函数的主要作用就是把必要的信息都计算好保存起来,并没有执行真正的Hook动作

真正的Hook动作是在DetourTransactionCommit(DetourTransactionCommitEx)函数中完成的

LONG WINAPI DetourTransactionCommit()
{
return DetourTransactionCommitEx(NULL);
}

以下是关键代码片段:

将Target Function 开始处的机器码替换为跳转到Detour Function的跳转指令,同时将DetourAttach传入的第一个参数指向的地址改为Trampoline中备份的机器码

DetourAttach函数的第一个参数就传出了一个新的函数地址。

这样我们就可以回答前文的那个问题:为什么调用用Old_ReadProcessMemory 而不是直接调用 ReadProcessMemory呢?

因为Old_ReadProcessMemory 指向了Trampoline中备份的机器码,运行效果等同于被Hook前的Target Function

而ReadProcessMemory开始处的机器码已经被替换成了跳转到Detour Function的指令,如果Detour Function函数中再使用ReadProcessMemory的话就变成了死循环了~

参考文献:黑客防线2008.12《Detours源码探索》

Detours框架实现原理探究相关推荐

  1. KVM 虚拟化原理探究--启动过程及各部分虚拟化原理

    KVM 虚拟化原理探究- overview 标签(空格分隔): KVM 写在前面的话 本文不介绍kvm和qemu的基本安装操作,希望读者具有一定的KVM实践经验.同时希望借此系列博客,能够对KVM底层 ...

  2. 并发队列-无界非阻塞队列 ConcurrentLinkedQueue 原理探究

    并发队列-无界非阻塞队列 ConcurrentLinkedQueue 原理探究 http://www.importnew.com/25668.html 一. 前言 常用的并发队列有阻塞队列和非阻塞队列 ...

  3. 框架学习与探究之AOP--Castle DynamicProxy

    前言 先说一点废话,在此之前博主也在早期就接触了或者看了些许AOP相关的文章,然后再去做了一些相关的实验,但是始终没有将AOP内化到自己的内功心法当中去,包括从概念还是应用环境,以及当前生态当中的AO ...

  4. 浏览器工作原理探究详解

    浏览器工作原理探究 标签: 浏览器工作原理 / web性能优化 引言 最近对web的性能优化比较感兴趣,而前端代码主要在浏览器工作的.如果对浏览器的工作原理了解清楚,可以为web性能优化提供方向以及理 ...

  5. java lock的原理,Java中Lock原理探究

    在对于lock锁的使用上,很多人只是掌握了最基础的方法,但是对实现的过程不是很清楚.这里我们对lock锁功能的实现进行分析,以ReentrantLock为例,分析它的锁类型,并对相关的调用方法进行展示 ...

  6. vmware nat模式原理探究,实现虚拟机跨网段管理

    vmware nat模式原理探究: 理解nat模式,我们能更加了解主机与虚拟机之间如何通信,以及虚拟机如何实现上网. 以及便于我们分析虚拟机与主机无法通信和无法上外网的问题. 下面通过实战:虚拟网络拓 ...

  7. Ajax框架及原理分析--视频

    Ajax框架及原理分析 下载地址:http://v.51work6.com/courseInfoRedirect.do?action=courseInfo&courseId=240576 AJ ...

  8. Android免Root环境下Hook框架Legend原理分析

    0x1 应用场景 现如今,免Root环境下的逆向分析已经成为一种潮流! 在2015年之前的iOS软件逆向工程领域,要想对iOS平台上的软件进行逆向工程分析,越狱iOS设备与安装Cydia是必须的!几乎 ...

  9. KVO-基本使用方法-底层原理探究-自定义KVO-对容器类的监听

    书读百变,其义自见! 将KVO形式以代码实现呈现,通俗易懂,更容易掌握 :GitHub   -链接如果失效请自动搜索:https://github.com/henusjj/KVO_base 代码中有详 ...

  10. 底层框架_你有必要了解一下Flink底层RPC使用的框架和原理

    1. 前言 对于Flink中各个组件(JobMaster.TaskManager.Dispatcher等),其底层RPC框架基于Akka实现,本文着重分析Flink中的Rpc框架实现机制及梳理其通信流 ...

最新文章

  1. Windows10上编译MXNet源码操作步骤(Python)
  2. Docker初学5:下载安装可视化图形工具Portainer
  3. Python删除list里面的重复元素的俩种方法
  4. centos 6.5安装VMware tools
  5. html h1 背影设为图片,CSS Backgrounds(背景)
  6. 高效 保活长连接:手把手教你实现 自适应的心跳保活机制
  7. Android 开发工程师自述:毕业两年后,我明白的那些事!
  8. Nexus1000v部署
  9. 如何列出所有用户的所有cron作业?
  10. python实现二分类_感知器做二分类的原理及python numpy实现
  11. PS制作视频字幕教程
  12. EJB是什么?有什么优点?
  13. C语言程序设计---跟随Frank-FuckPPT
  14. Cloudera Manager 安装
  15. mac系统下,vm虚拟机打不开/dev/vmmon,如何解决?
  16. 【厨艺提升】炒土豆丝
  17. php惠新宸框架,首位国人惠新宸加入PHP官方开发组
  18. Definer 预言机攻击事件分析
  19. Java毕业设计_基于javaweb的网上预约实验室管理系统的设计与实现
  20. echarts修改数据视图格式

热门文章

  1. 教你如何选择网络机顶盒
  2. 遥感影像几何校正方法
  3. 助推“内循环”,华侨城激活国内旅游市场
  4. 计算机病毒 爱虫病毒(lovebug),有哪些是典型计算机病毒
  5. windows11错误代码0x0000011b怎么解决? 0x0000011b问题的相应解决办法
  6. 图片去水印工具(Teorex Inpaint) v7.1
  7. 为什么要学习Linux内核,如何学习?
  8. DTCC | 2021中国图数据库技术大会链接分享
  9. dell 恢复介质_在戴尔计算机上重置或重新安装Windows 10
  10. 如何生成WIFI二维码供手机扫一扫连接WIFI