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使用方法以及原理相关推荐
- 多线程下ArrayList类线程不安全的解决方法及原理
多线程下ArrayList类线程不安全的解决方法及原理 参考文章: (1)多线程下ArrayList类线程不安全的解决方法及原理 (2)https://www.cnblogs.com/fangting ...
- 可逆加密算法 php,php可逆加密的方法及原理
本篇文章主要介绍php可逆加密的方法及原理,感兴趣的朋友参考下,希望对大家有所帮助. PHP代码如下:<?php class encryptCalss { var $key=12; functi ...
- Vue2.0+vuex+H5实现音乐播放及歌曲切换功能的方法及原理解释
最近在用mint-ui重写一个vue.js音乐App项目,做到播放器模块,感觉挺有意思,记录一下播放器歌曲播放及歌曲切换功能实现方法及原理. 先上一张运行效果图(歌词尚未抓取.播放进度条及时间尚未开发 ...
- [react] render方法的原理你有了解吗?它返回的数据类型是什么?
[react] render方法的原理你有了解吗?它返回的数据类型是什么? render的第一个参数通过babel转为React.createElement,后者根据参数类型的不同调用不同的内部方法来 ...
- VMware虚拟机的三种联网方法及原理
VMware虚拟机的三种联网方法及原理 博客分类: 操作系统 虚拟机Vmware互联网网络应用网络协议 一.Brigde--桥接 :默认使用VMnet0 1.原理: Bridge 桥"就 ...
- ArrayList类contains方法实现原理
以ArrayList集合示例 思考:contains方法如何执行? public static void main(String [] args){List<String> list=ne ...
- ajax连接前后端原理,前后端数据交互方法和原理
前后端数据交互方法和原理 发布时间:2018-10-28 11:25, 浏览次数:742 对于想要搞web的新手而言,会用html+css+javascript实现一个页面没什么太大的困难,但是想要前 ...
- IO流-ReadLine方法的原理 自定义BufferedReader
package com.yyq; /** readLine 方法的原理* 无论是读一行,获取读取多个字符其实最终都是在硬盘上一个一个的读取,所以最终使用的都是* read方法一次读一个的发法* 缓冲区 ...
- Atitit.编程语言原理---方法重载的实现与设计 调用方法的原理
Atitit.编程语言原理---方法重载的实现与设计 调用方法的原理 1. 重载包括:普通方法的重载和构造方法的重载 1 1.1. 横向重载"和"纵向重载"1 1.2. ...
最新文章
- Webview页面的控件元素定位
- Qt中定时器使用的两种方法
- Failed to initiate service connection to simulator
- mysql 插入数据时 自动设置创建时间和更新时间
- iPhone 13 的十大爆料:“十三”到底“香不香”?
- 数据在内存中的大小端模式存储
- 远程读取mysql_远程获取数据库和文件的方法
- 利用向日葵远程控制工具实现远程控制电脑
- 百度 图像识别Api logo识别 基于java的Demo
- NRF52832-DFU升级-蓝牙抓包数据解析
- Spring Boot2 系列教程(三十三)整合 Spring Security
- 如何转换图片格式为png?图片格式如何进行转换?
- Swift 基础 高阶函数 forEach filter map compactMap compactMapValues flatMap reduce sort sorted shuffled ...
- Visual Studio 快速统一设置项目属性(以VS2017为例)
- 暴雪娱乐-魔兽世界:地下城的环境艺术
- 高德地图开发(二)加载瓦片数据
- vivos9保密柜从哪里进
- 模拟网上手机抽奖界面(供大家BS......)
- 《精益数据分析》-第二部分概括笔记
- libreCAD源码阅读笔记3