Detour使用方法以及原理

Detour使用方法以及原理

DetourTransactionBegin();  
        DetourUpdateThread(GetCurrentThread());  
        DetourDetach((PVOID *)&g_pPresent, New_Present);  
        DWORD nErr = DetourTransactionCommit();  
        if (!nErr)  
        {  
            ::FreeLibrary(g_hDll);  
            g_bSubclassed = false;    
        }  
        else  
        {  
         }

Detours 是一个在x86平台上截获任意Win32函数调用的工具库。中断代码可以在运行时动态加载。Detours使用一个无条件转移指令来替换目标函数的最初几 条指令,将控制流转移到一个用户提供的截获函数。而目标函数中的一些指令被保存在一个被称为“trampoline” 

具体用途是: 

拦截WIN32 API调用,将其引导到自己的子程序,从而实现WIN32 API的定制。 
为一个已在运行的进程创建一新线程,装入自己的代码并运行。 

Detours的原理 

—- 1. WIN32进程的内存管理 

—- 总所周知,WINDOWS NT实现了虚拟存储器,每一WIN32进程拥有4GB的虚存空间, 关于WIN32进程的虚存结构及其操作的具体细节请参阅WIN32 API手册, 以下仅指出与Detours相关的几点: 

—- (1) 进程要执行的指令也放在虚存空间中 
—- (2) 可以使用QueryProtectEx函数把存放指令的页面的权限更改为可读可写可执行,再改写其内容,从而修改正在运行的程序 
—- (3) 可以使用VirtualAllocEx从一个进程为另一正运行的进程分配虚存,再使用 QueryProtectEx函数把页面的权限更改为可读可写可执行,并把要执行的指令以二进制机器码的形式写入,从而为一个正在运行的进程注入任意的代码 

关于跨进程dll注入,参考文章http://www.seanyxie.com/%E8%BF%9C%E7%A8%8B%E7%BA%BF%E7%A8%8B%E6%B3%A8%E5%85%A5dll/



你可能感兴趣的:(Detour使用方法以及原理)