Detours学习之十二:Detours API用于修改二进制文件的api
用于修改二进制文件的api
- DetourBinaryOpen
- DetourBinaryEnumeratePayloads
- DetourBinaryFindPayload
- DetourBinarySetPayload
- DetourBinaryDeletePayload
- DetourBinaryPurgePayloads
- DetourBinaryEditImports
- DetourBinaryResetImports
- DetourBinaryWrite
- DetourBinaryClose
一、DetourBinaryOpen
将二进制文件的内容读入内存进行编辑。
定义
PDETOUR_BINARY DetourBinaryOpen(_In_ HANDLE hFile);
参数
hFile:要打开进行编辑的二进制文件的句柄。
返回值
如果成功,返回一个指向detours二进制对象的指针;否则,返回NULL。
错误代码
如果合适,该函数将设置以下错误代码。在函数返回后,可以通过调用GetLastError来检索错误代码。
ERROR_OUT_OF_MEMORY:内存不足,无法完成操作。
说明
DetourBinaryOpen将Windows PE COFF二进制文件的内容读入内存进行编辑。
有关使用Detours进行二进制编辑的更多信息,请参阅Detours概述中的有效负载和DLL导入编辑。
相关的应用实例
Dumpi、Impmunge Setdll。
二、DetourBinaryEnumeratePayloads
在二进制文件中枚举有效负载。
定义
_Writable_bytes_(*pcbData) _Readable_bytes_(*pcbData) _Success_(return != NULL) PVOID DetourBinaryEnumeratePayloads(_In_ PDETOUR_BINARY pBinary,_Out_opt_ GUID * pGuid,_Out_ DWORD * pcbData,_Inout_ DWORD * pnIterator );
参数
指向DetourBinaryOpen打开的二进制文件的指针。
pGuid:指向变量的指针,用于接收下一个负载的GUID。
pcbData:指向变量的指针,用于接收下一个有效负载的字节大小。
pnIterator:枚举变量。应设置为零以开始枚举。在对该函数的连续调用之间不应修改枚举变量。
说明
DetourBinaryEnumeratePayloads枚举由DetourBinaryOpen打开的二进制文件中的所有有效负载。
有关使用Detours和有效负载进行二进制编辑的更多信息,请参阅Detours概述中的有效负载和DLL导入编辑。
返回值
如果成功,返回指向下一个有效负载的指针;否则,返回NULL。
三、DetourBinaryFindPayload
在二进制文件中找到有效负载。
定义
_Writable_bytes_(*pcbData) _Readable_bytes_(*pcbData) _Success_(return != NULL) PVOID DetourBinaryFindPayload(_In_ PDETOUR_BINARY pBinary,_In_ REFGUID rguid,_Out_ DWORD * pcbData );
参数
指向DetourBinaryOpen打开的二进制文件的指针。
rguid:指定负载的GUID。
pcbData:指向变量的指针,该变量接收以字节为单位的指定负载的大小。
说明
detourbinaryfindpayload在由DetourBinaryOpen打开的二进制文件中找到一个特定的负载。
有关使用Detours和有效负载进行二进制编辑的更多信息,请参阅Detours概述中的有效负载和DLL导入编辑。
返回值
如果成功,返回TRUE;否则,返回FALSE。
四、DetourBinarySetPayload
将有效载荷附加到二进制文件上。
定义
PVOID DetourBinarySetPayload(_In_ PDETOUR_BINARY pBinary,_In_ REFGUID rguid,_In_reads_opt_(cbData) PVOID pData,_In_ DWORD cbData );
参数
指向DetourBinaryOpen打开的二进制文件的指针
rguid:要添加到二进制文件中的有效负载的GUID。
pData:指向有效负载数据的指针。
cbData:负载数据的大小,以字节为单位。
说明
DetourBinarySetPayload将一个有效负载附加到由DetourBinaryOpen打开的二进制文件上。可以使用DetourFindPayload API在运行时定位负载。
有关使用Detours进行二进制编辑的更多信息,请参阅Detours概述中的有效负载和DLL导入编辑。
返回值
如果成功,返回TRUE;否则,返回FALSE。
五、DetourBinaryDeletePayload
从二进制文件中移除有效负载。
定义
BOOL DetourBinaryDeletePayload(_In_ PDETOUR_BINARY pBinary, _In_ REFGUID rguid);
参数
指向DetourBinaryOpen打开的二进制文件的指针。
rguid:要移除的负载的GUID。
说明
DetourBinaryDeletePayload从DetourBinaryOpen打开的二进制文件中删除一个有效负载。
有关使用Detours和有效负载进行二进制编辑的更多信息,请参阅Detours概述中的有效负载和DLL导入编辑。
返回值
如果成功,返回TRUE;否则,返回FALSE。
六、DetourBinaryPurgePayloads
从二进制文件中删除所有有效负载。
定义
BOOL DetourBinaryPurgePayloads(_In_ PDETOUR_BINARY pBinary);
参数
pBinary:指向要被清除的二进制文件的指针,由DetourBinaryOpen打开。
说明
DetourBinaryPurgePayloads移除由DetourBinaryOpen打开的二进制文件中的所有有效负载。
有关使用Detours进行二进制编辑的更多信息,请参阅Detours概述中的有效负载和DLL导入编辑。
返回值
如果成功,返回TRUE;否则,返回FALSE。
七、DetourBinaryEditImports
编辑二进制文件的导入表。
定义
BOOL DetourBinaryEditImports(_in_pdetour_binary pBinary, _In_opt_ PVOID pContext, _In_opt_ PF_DETOUR_BINARY_BYWAY_CALLBACK pfByway, _In_opt_ PF_DETOUR_BINARY_FILE_CALLBACK pfFile, _In_opt_ PF_DETOUR_BINARY_SYMBOL_CALLBACK pfSymbol, _In_opt_ PF_DETOUR_BINARY_COMMIT_CALLBACK pfFinal);
参数
指向DetourBinaryOpen打开的二进制文件的指针。
pContext:特定于程序的上下文指针,要不加修改地传递给每个回调函数。
pfByway:在导入表中每个模块之前调用的回调函数。
pfFile:为导入表中的每个模块调用一次回调函数。
pfSymbol:为导入表中的每个符号调用一次的回调函数。
pfCommit:如果没有错误,在导入表的末尾调用回调函数。
返回值
如果成功,返回TRUE;否则,返回FALSE。
说明
DetourBinaryEditImports编辑由DetourBinaryOpen打开的二进制文件的导入表。Detours使用Detours有效载荷以可逆格式存储编辑。可以使用DetourBinaryResetImports函数来删除编辑。
DetourBinaryEditImports按顺序遍历二进制文件的导入表,对所有感兴趣的点进行回调。目前支持四个感兴趣的点,每个点都有自己的回调函数:
- Files:对导入表中列出的每个文件调用pfFile函数。回调函数可以自行更改文件名。
- Symbol:对导入表中每个文件中列出的每个符号调用pfSymbol函数。回调函数可以自行更改符号名。
- Byways:pfByway函数在导入表的开头、每对导入函数之间调用一次,然后在导入表的结尾再次调用一次。的
pfByway
函数可以自行决定将新的导入文件导入到导入表中。当插入一个旁路时,导入表被修改为从命名的导入文件导入序号为#1的函数。 - Commit:如果之前的回调函数没有返回任何错误,则在遍历导入表的最后调用pfCommit函数。
考虑一个二进制文件,它从Kernel32.dll中导入CreateFileW和CloseHandle函数,从Shell32.dll中导入CommandLineToArgvW函数,从AdvApi32.dll中导入RegOpenKeyExW, RegQueryValueW和RegCloseKey函数,并从先前调用DetoursBinaryEditImports中插入mydetourl .dll。调用DetoursBinaryEditImports的程序将收到以下回调:
BywayCallback (..., NULL, ...)
BywayCallback (..., "MyDetour.dll", ... )
BywayCallback (..., NULL, ...)
FileCallback (..., "Kernel32.dll", ...)
SymbolCallback (..., "CloseHandle", ...)
SymbolCallback (..., "CreateFileW", ...)
BywayCallback (..., NULL, ...)
FileCallback (..., "Shell32.dll", ...)
SymbolCallback (..., "CommandLineToArgvW", ...)
BywayCallback (..., NULL, ...)
FileCallback (..., "AdvApi32.dll", ...)
SymbolCallback (..., "RegCloseKey", ...)
SymbolCallback (..., "RegQueryValueW", ...)
SymbolCallback (..., "RegOpenKeyExW", ...)
BywayCallback (..., NULL, ...)
CommitCallback (...)
有关使用Detours进行二进制编辑的更多信息,请参阅Detours概述中的有效负载和DLL导入编辑。
注意:作为旁路插入的每个DLL必须导出序号为#1的函数。如果DLL的导出表没有导出序号#1的函数,则目标二进制文件将无法正确加载。
相关的应用实例
Dumpi、Impmunge Setdll。
八、DetourBinaryResetImports
删除Detours对二进制文件导入表的所有编辑。
定义
BOOL DetourBinaryResetImports(_In_ PDETOUR_BINARY pBinary);
参数
指向DetourBinaryOpen打开的二进制文件的指针。
返回值
如果成功,返回TRUE;否则,返回FALSE。
说明
DetourBinaryResetImports删除所有DetourBinaryOpen打开的二进制文件导入表的编辑。
有关使用Detours进行二进制编辑的更多信息,请参阅Detours概述中的有效负载和DLL导入编辑。
相关的应用实例
Setdll。
九、DetourBinaryWrite
将更新后的二进制文件写入文件。
定义
BOOL DetourBinaryWrite(_In_ PDETOUR_BINARY pBinary, _In_ HANDLE hFile);
参数
pBinary:指向要写入文件的二进制文件的指针。
hFile:接收二进制文件内容的句柄。
返回值
如果成功,返回TRUE;否则,返回FALSE。
说明
DetourBinaryWrite将由DetourBinaryOpen打开的更新的二进制文件写入一个文件。
有关使用Detours进行二进制编辑的更多信息,请参阅Detours概述中的有效负载和DLL导入编辑。
相关的应用实例
Impmunge Setdll。
十、DetourBinaryClose
关闭打开供编辑的二进制文件。
定义
BOOL DetourBinaryClose(_In_ PDETOUR_BINARY pBinary);
参数
指向DetourBinaryOpen打开的二进制文件的指针。
返回值
如果成功,返回TRUE;否则,返回FALSE。
说明
DetourBinaryClose关闭由DetourBinaryOpen打开用于编辑的二进制文件。
有关使用Detours进行二进制编辑的更多信息,请参阅Detours概述中的有效负载和DLL导入编辑。
相关的应用实例
Dumpi、Impmunge Setdll。
Detours学习之十二:Detours API用于修改二进制文件的api相关推荐
- C++语言学习(十二)——C++语言常见函数调用约定
C++语言学习(十二)--C++语言常见函数调用约定 一.C++语言函数调用约定简介 C /C++开发中,程序编译没有问题,但链接的时候报告函数不存在,或程序编译和链接都没有错误,但只要调用库中的函数 ...
- jQuery学习(十二)—jQuery中对象的查找方法总结
jQuery学习(十二)-jQuery中对象的查找方法总结 一.find方法 作用:在元素1中查找元素2,类似于选择器中的后代选择器 格式:元素1.find(元素2),元素2为CSS选择器或者jQue ...
- Python语言入门这一篇就够了-学习笔记(十二万字)
Python语言入门这一篇就够了-学习笔记(十二万字) 友情提示:先关注收藏,再查看,12万字保姆级 Python语言从入门到精通教程. 文章目录 Python语言入门这一篇就够了-学习笔记(十二万字 ...
- Mysql学习总结十二:系统变量、用户变量、定义条件和处理程序
Mysql学习总结十二:系统变量.用户变量.定义条件和处理程序 1.变量 1.1 系统变量 1.1.1 系统变量的分类 1.1.2 查看系统变量 1.2 用户变量 1.2.1 用户变量的分类 1.2. ...
- C语言学习(十二)C语言中的字符(宽字符与窄字符)、从字符谈谈C语言的编码、转义字符
C语言学习(十二)C语言中的字符(宽字符与窄字符).从字符谈谈C语言的编码.转义字符 目录 C语言学习(十二)C语言中的字符(宽字符与窄字符).从字符谈谈C语言的编码.转义字符 英文字符 字符的表示 ...
- Unity C# 网络学习(十二)——Protobuf生成协议
Unity C# 网络学习(十二)--Protobuf生成协议 一.安装 去Protobuf官网下载对应操作系统的protoc,用于将.proto文件生成对应语言的协议语言文件 由于我使用的是C#所以 ...
- Polyworks脚本开发学习笔记(十二)-输出和读取文本文件
Polyworks脚本开发学习笔记(十二)-输出和读取文本文件 Polyworks作为一个测量工具,将测量的数据方便的导出到文本文件则是一项必须的功能.在DATA_FILE这个命令下提供了很多子命令用 ...
- OpenCV学习笔记(十二)——图像分割与提取
在图像处理的过程中,经常需要从图像中将前景对象作为目标图像分割或者提取出来.例如,在视频监控中,观测到的是固定背景下的视频内容,而我们对背景本身并无兴趣,感兴趣的是背景中出现的车辆.行人或者其他对象. ...
- Tensorflow深度学习之十二:基础图像处理之二
Tensorflow深度学习之十二:基础图像处理之二 from:https://blog.csdn.net/davincil/article/details/76598474 首先放出原始图像: ...
- 吴恩达《机器学习》学习笔记十二——机器学习系统
吴恩达<机器学习>学习笔记十二--机器学习系统 一.设计机器学习系统的思想 1.快速实现+绘制学习曲线--寻找重点优化的方向 2.误差分析 3.数值估计 二.偏斜类问题(类别不均衡) 三. ...
最新文章
- TemplateBuilder
- mongodb 学习笔记 2 --- 修改器
- PKUSC2019游记
- 【AutoML】激活函数如何进行自动学习和配置
- 1.6 动态数据抓取 -- PyQuery详解
- 教你学会Linux/Unix下的vi文本编辑器
- 网贷大数据什么时候会好_如果人类把地球钻穿了,会发生什么?大数据分析告诉你多可怕...
- PHP学习记录_基本语法
- MSDTC on server 'xxx' is unavailable
- php程序控制结构,PHP 控制结构
- DoTween函数汇总
- 广域网、城域网及局域网技术
- Python学习心得体会
- html自定义属性jquery怎么拿到,jquery 获取自定义属性(attr和prop)的实现代码
- Python获取字符串中特定的内容
- 每年等额本金,计算复利的方法
- Unity使用反射探头实现地面的镜面反射
- 会员管理小程序实战开发教程-消费记录功能
- response.reset() 与response.resetbuffer使用场景
- 长虹官方刷机包和刷机教程
热门文章
- java.lang.ClassCastException: org.apache.hadoop.mapreduce.lib.input.FileSplit cannot be cast to...
- sl400通过ac无法连接psk加密无线网络
- 东芝打印机共享怎么设置_东芝 e-studio181怎么设置网络打印机
- ## STAMP使用中数据上传注意事项
- 磁带机技术的应用解析
- 卡巴斯基注册码的操作
- 全国每年考证时间安排
- win7蓝屏0x0000003b解决教程
- 紧密中心性(closeness centrality)
- 现在哪款诺基亚能玩Java游戏_回忆S60(塞班)年代的JAVA游戏:有没有哪一款是你在课堂偷偷玩的?...