文/徐胜
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"
[/caption]
如上图所示的Detours Hook引擎,从涉及的内存结构上看,主要由4个块组成,分别是JMP块、HOOK_INFO块、Trampoline块和HKC块,而从处理函数上看,主要由DispatchHook和ProcessHook组成。
作者徐胜,2009年于电子科技大学获得计算机科学与工程硕士学位,现就职于阿里巴巴,从事移动安全的研究和移动产品的研发,主要研究方向包括:Windows平台下的木马、外挂、Rootkit、防火墙和二进制逆向分析,Android和iOS客户端软件安全,以及Web和WAP安全。
本文节选自《游戏外挂攻防艺术》一书。徐胜著,由电子工业出版社出版。
本文介绍了微软开发的Detours库,它是一个用于动态Hook运行中程序的函数库。通过理解Detours中的三个关键概念——Target函数、Trampoline函数和Detour函数,可以有效地在游戏或外挂分析中截获函数调用并进行打印输出。
769

被折叠的 条评论
为什么被折叠?



