2.3.3 实现原理
Windows下应用程序有自己的地址空间,它们只能调用自己地址空间中的函数,所以在挂钩API之前,必须将一个可以代替API执行代码注入到目标进程,然后再想办法将目标进程对该API的调用改为对注入到目标进程中自定义函数的调用。一般称这个自定义函数为代理函数。在代理函数中,可以去调用原来的API,也可以做其他事情。
在这个要被注入到目标进程的DLL中写一个与感兴趣的API函数的签名完全相同的函数(代理函数),当DLL执行初始化代码的时候,把目标进程对这个API的调用全部改为对代理函数的调用,即可实现拦截API函数。Hook API示意图如图2。
图2  Hook API示意图
2.4  Detours技术
2.4.1 Detours技术原理
Detours是一种基于Inline Hook技术,在x86平台上截获任意Win32函数调用的软件包。它定义了三个概念:
(1)    Target函数:要拦截的函数,通常为Windows的API  。
(2)    Trampoline函数:Target函数的部分复制品。因为Detours将会改写Target函数,所以先把Target函数的前5个字节复制保存好,一方面仍然保存Target函数的过程调用语义,另一方面便于以后的恢复。
(3)    Detour函数:用来替代Target函数的函数。
它的中断代码在运行时动态加载。它使用了一个无条件转移指令(JMP)来替换目标函数的最初几条指令,将控制流转移到用户提供的Detour函数。 Target函数中的一些指令被保存在Trampoline函数中,这些指令包括目标函数中被替换的代码以及一个专业到目标函数的无条件分支。Trampoline函数中还可以包括作为功能扩展的代码。可以根据需要,在Detour函数中自行决定调不调用目标函数。当将Target函数作为可调用分支时,调用流程为1→2→3→4→5→6 ,当不作为可调用分支时,调用流程为1→2→6。采用Detours技术拦截函数前后,函数调用过程如图3所示 。
 
图3 Detours拦截后程序执行流程
Detours原理图如图4.
 
图4 Detours原理图
已知当前执行的代码都会被调入内存执行,运行时动态加载Detour函数,则目标函数的更改并不会影响到其他应用程序对Target函数的调用,具有很强的可执行性。
2.5 Windows消息机制
(1)  消息队列
    Windows中有一个系统消息队列,对于没一个正在执行的Windows应用出曾向,系统为其建立了一个“消息队列”,即应用程序中一段称作“消息循环”的代码,用来从消息队列中检索这些消息并将它们分发到相应的窗口函数中。
(2)  消息循环
Windows为当前执行的每个Windows程序文护一个「消息队列」。在发生输入事件之后,Windows将事件转换为一个「消息」并将消息放入程序的消息队列中。程序通过执行一块称之为「消息循环」的程序代码从消息队列中取出消息。
(3)   队列化消息与非队列化消息
消息消息能够被分为「队列化的」和「非队列化的」队列化的消息是由Windows放入程序消息队列中的。在程序的消息循环中,重新传回并分配给窗口消息处理程序。非队列化在Windows呼叫窗口时直接送给窗口消息处理程序。也就是说,队列化的消息被「发送」给消息队列,而非队列化的消息则「发送」给窗口消息处理程序。任何情况下,窗口消息处理程序都将获得窗口所有的消息--包括队列化的和非队列化的。窗口消息处理程序是窗口的「消息中心」。
队列化消息基本上是使用者输入的结果,以击键(如WM_KEYDOWN和WM_KEYUP消息)、击键产生的字符(WM_CHAR)、鼠标移动(WM_MOUSEMOVE)和鼠标按钮(WM_LBUTTONDOWN)的形式给出。队列化消息还包含时钟消息(WM_TIMER)、更新消息(WM_PAINT)和退出消息(WM_QUIT)。
上一篇:VC++数字图像边缘检测算法研究与实现
下一篇:ASP.NET的家教网站设计与开发+文献综述

茬RedHat中使用ReiserFS文件系统【1804字】

使用indy的IdTcpServer,IdTcpclient传輸文件【68字】

使用http协议和winsockapi实现...

Android移动终端文件透明加密技术设计与实现

移动端Android公司文件管理系统设计

OpenSSL文件安全传输工具设计与实现

Android文件自毁技术的分析和实现

国内外图像分割技术研究现状

C#学校科研管理系统的设计

医院财务风险因素分析及管理措施【2367字】

神经外科重症监护病房患...

AT89C52单片机的超声波测距...

中国学术生态细节考察《...

公寓空调设计任务书

承德市事业单位档案管理...

志愿者活动的调查问卷表

10万元能开儿童乐园吗,我...