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/



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值