Detours Hook初探
文/徐胜
Detours是微软开发的一个函数库,主要用于动态Hook运行中的程序,其具体介绍参见http://research.microsoft.com/en-us/projects/detours/。在游戏或外挂分析中,可以利用Detours库提供的接口来动态Hook任意地址,截获函数调用并输出打印信息。
Detours Hook的3个关键概念
要理解Detours Hook,必须先理解Detours中的3个关键概念。
- Target函数:即要Hook的目标函数或目标地址。
- Trampoline函数:即跳板函数,主要负责保存原始Target函数头的若条指令,并加上一个跳转指令以保持对原始Target函数调用的语义完整性。
- Detour函数:即截获Target函数的调用之后,所要执行的自定义函数。
在Detours Hook中,生成Trampoline函数与Target函数之间的关系如下图所示。
[caption id="attachment_15901" align="aligncenter" width="367" caption="Trampoline函数与Target函数的关系"][/caption]
Trampoline函数与Target函数的关系
从上图中可以看出,Trampoline函数是由Target函数头加jmp指令组成的。
Target函数、Detour函数以及Trampoline函数之间的关系如下图所示。
[caption id="attachment_15902" align="aligncenter" width="389" caption="Target函数、Detour函数和Trampoline函数间关系"][/caption]
从上图可知,一旦Target函数被执行,程序将按照1→2→3,即Traget→Detour→Trampoline的顺序执行,最后再回到Target函数的执行过程。
Detours Hook引擎
Detours Hook引擎采用上面介绍的Detours Hook机制,经过精心的设计,使这个Hook引擎支持动态Hook几乎任意地址,以方便管理,而不用为了Hook一个地址去增加代码以及重新编译代码(注意:这里的“任意地址”在可以被修改的地址区域内)。
首先还是让我们看看如下图所示的这个引擎的概要设计,然后再详细介绍一下每一块的具体内容。
[caption id="attachment_15903" align="aligncenter"width="503" caption="Detours Hook引擎概要设计"]
如上图所示的Detours Hook引擎,从涉及的内存结构上看,主要由4个块组成,分别是JMP块、HOOK_INFO块、Trampoline块和HKC块,而从处理函数上看,主要由DispatchHook和ProcessHook组成。
作者徐胜,2009年于电子科技大学获得计算机科学与工程硕士学位,现就职于阿里巴巴,从事移动安全的研究和移动产品的研发,主要研究方向包括:Windows平台下的木马、外挂、Rootkit、防火墙和二进制逆向分析,Android和iOS客户端软件安全,以及Web和WAP安全。
本文节选自《游戏外挂攻防艺术》一书。徐胜著,由电子工业出版社出版。
Detours Hook初探相关推荐
- Android安全专题(一)Hook初探以及技术前世今生
Hook概念 Hook是伴随操作系统的产生而出现的概念,原来是系统开发者提供给系统应用开发者方便管理系统而产生的概念.目的是在系统调用过程中,其他代码可以选择性的干预系统函数的处理逻辑,已达到更灵活的 ...
- Inline Hook 钩子编写技巧
Hook 技术通常被称为钩子技术,Hook技术是Windows系统用于替代中断机制的具体实现,钩子的含义就是在程序还没有调用系统函数之前,钩子捕获调用消息并获得控制权,在执行系统调用之前执行自身程序, ...
- Windows Dll Injection、Process Injection、API Hook、DLL后门/恶意程序入侵技术
catalogue 1. 引言 2. 使用注册表注入DLL 3. 使用Windows挂钩来注入DLL 4. 使用远程线程来注入DLL 5. 使用木马DLL来注入DLL 6. 把DLL作为调试器来注入 ...
- HOOK API技术
HOOK API技术 HOOK学习笔记与心得 奇技淫巧之调试被远程线程注入的DLL windows核心编程_系统消息与自定义钩子hook使用 [Windows Dll Injection.Proces ...
- 最新易语言安卓逆向视频教程
小膀子app逆向百集_01 Android体系结构 小膀子app逆向百集_02 APK根本结构 小膀子app逆向百集_03 JVM.DVM与ART 小膀子app逆向百集_04 Android开发东西装 ...
- 界面美化专家——有道桌面小词典篇
本篇文章比较长,如果你能耐心的看完,或许会有发现宝藏的喜悦. 界面美化专家请从http://iask.sina.com.cn/user/my_ishare.php?uid=1595309435下载.文 ...
- OBS Studio 窗口采集game-capture注入之OpenGL与D3D11的GPU资源进行互操作
OBS Studio 窗口采集game-capture注入之OpenGL与D3D11的GPU资源进行互操作 OBS Studio 窗口采集game-capture注入之OpenGL与D3D11的GPU ...
- 使用 detours 框架 hook 函数
detours是微软的hook框架,可以去 github 下载源码编译: https://github.com/microsoft/Detours 编译得到 detours.lib ,然后把 deto ...
- 摸索Detours 2:使用Detours 进行简单的Hook
1.准备工作 首先,在VS里创建一个C++的控制台项目,然后配置一下项目的包含目录和库目录 32位的话将摸索Detours 1:使用Vs2019 编译Detours 中编译的include添加包含目录 ...
- 基于Detours库HOOK API
背景 可能我们开发程序的时候,会用到Inline Hook Api的技术.Inline Hook 的原理是在系统访问一个函数的时候先替换原函数入口处的内容跳转到自己设计的Hook函数中,然后在自己函数 ...
最新文章
- C#中DataTable添加外部行数据
- LeetCode Construct Quad Tree(dfs)
- centos 7 配置nginx
- python加法怎么写_51NOD 大数加法以及python写法
- 在Spring 中如果Girl要Kiss Boy咋办捏?
- SQLAlchemy 报错 NotSupportedError: Authentication plugin ‘caching_sha2_password’ is not supported 解决方法
- kafka php 0.8,php5.6 centos7 kafka0.8.1
- 【转】Java MySQL数据类型对照
- Jupyter notebook 使用多个Conda 环境
- configure: error: invalid variable name: `'
- usermod命令,用户密码管理,makpasswd
- Script:Diagnostic Resource Manager
- IT人不要一辈子靠技术生存
- 从零实现深度学习框架——实现Tensor的反向传播
- Pytorch实现FGSM(Fast Gradient Sign Attack)
- PPT打印预览无背景
- leetcode845. 数组中的最长山脉
- 图计算简介和Pregel简介
- 用C语言求和、找数组中的最大值以及求平均值
- 猿创征文|我命由我,不由天