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使用方法以及原理相关推荐

  1. 多线程下ArrayList类线程不安全的解决方法及原理

    多线程下ArrayList类线程不安全的解决方法及原理 参考文章: (1)多线程下ArrayList类线程不安全的解决方法及原理 (2)https://www.cnblogs.com/fangting ...

  2. 可逆加密算法 php,php可逆加密的方法及原理

    本篇文章主要介绍php可逆加密的方法及原理,感兴趣的朋友参考下,希望对大家有所帮助. PHP代码如下:<?php class encryptCalss { var $key=12; functi ...

  3. Vue2.0+vuex+H5实现音乐播放及歌曲切换功能的方法及原理解释

    最近在用mint-ui重写一个vue.js音乐App项目,做到播放器模块,感觉挺有意思,记录一下播放器歌曲播放及歌曲切换功能实现方法及原理. 先上一张运行效果图(歌词尚未抓取.播放进度条及时间尚未开发 ...

  4. [react] render方法的原理你有了解吗?它返回的数据类型是什么?

    [react] render方法的原理你有了解吗?它返回的数据类型是什么? render的第一个参数通过babel转为React.createElement,后者根据参数类型的不同调用不同的内部方法来 ...

  5. VMware虚拟机的三种联网方法及原理

    VMware虚拟机的三种联网方法及原理 博客分类: 操作系统 虚拟机Vmware互联网网络应用网络协议 一.Brigde--桥接  :默认使用VMnet0 1.原理: Bridge  桥"就 ...

  6. ArrayList类contains方法实现原理

    以ArrayList集合示例 思考:contains方法如何执行? public static void main(String [] args){List<String> list=ne ...

  7. ajax连接前后端原理,前后端数据交互方法和原理

    前后端数据交互方法和原理 发布时间:2018-10-28 11:25, 浏览次数:742 对于想要搞web的新手而言,会用html+css+javascript实现一个页面没什么太大的困难,但是想要前 ...

  8. IO流-ReadLine方法的原理 自定义BufferedReader

    package com.yyq; /** readLine 方法的原理* 无论是读一行,获取读取多个字符其实最终都是在硬盘上一个一个的读取,所以最终使用的都是* read方法一次读一个的发法* 缓冲区 ...

  9. Atitit.编程语言原理---方法重载的实现与设计 调用方法的原理

    Atitit.编程语言原理---方法重载的实现与设计 调用方法的原理 1. 重载包括:普通方法的重载和构造方法的重载 1 1.1. 横向重载"和"纵向重载"1 1.2.  ...

最新文章

  1. Webview页面的控件元素定位
  2. Qt中定时器使用的两种方法
  3. Failed to initiate service connection to simulator
  4. mysql 插入数据时 自动设置创建时间和更新时间
  5. iPhone 13 的十大爆料:“十三”到底“香不香”?
  6. 数据在内存中的大小端模式存储
  7. 远程读取mysql_远程获取数据库和文件的方法
  8. 利用向日葵远程控制工具实现远程控制电脑
  9. 百度 图像识别Api logo识别 基于java的Demo
  10. NRF52832-DFU升级-蓝牙抓包数据解析
  11. Spring Boot2 系列教程(三十三)整合 Spring Security
  12. 如何转换图片格式为png?图片格式如何进行转换?
  13. Swift 基础 高阶函数 forEach filter map compactMap compactMapValues flatMap reduce sort sorted shuffled ...
  14. Visual Studio 快速统一设置项目属性(以VS2017为例)
  15. 暴雪娱乐-魔兽世界:地下城的环境艺术
  16. 高德地图开发(二)加载瓦片数据
  17. vivos9保密柜从哪里进
  18. 模拟网上手机抽奖界面(供大家BS......)
  19. 《精益数据分析》-第二部分概括笔记
  20. libreCAD源码阅读笔记3

热门文章

  1. NodeJS加解密之Crypto
  2. IVR业务基础知识(转)
  3. 微信小程序宽高百分百,解决页面仍然可滑动问题
  4. 微信小程序流量主开通及如何收益
  5. 胡学纲数据结构c语言PDF,辽宁工程技术大学综合训练项目任务书一(数据结构)
  6. 关于winrar自解压创建快捷方式的问题
  7. linux 访问虚拟磁盘,详解Linux物理主机Host访问虚拟机
  8. SystemV 共享内存(一)—— 共享内存的创建与释放(shmget / shmctl)
  9. MP3文件格式及编解码流程
  10. 2.2 动态范围的常用计算方法