用于修改二进制文件的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相关推荐

  1. C++语言学习(十二)——C++语言常见函数调用约定

    C++语言学习(十二)--C++语言常见函数调用约定 一.C++语言函数调用约定简介 C /C++开发中,程序编译没有问题,但链接的时候报告函数不存在,或程序编译和链接都没有错误,但只要调用库中的函数 ...

  2. jQuery学习(十二)—jQuery中对象的查找方法总结

    jQuery学习(十二)-jQuery中对象的查找方法总结 一.find方法 作用:在元素1中查找元素2,类似于选择器中的后代选择器 格式:元素1.find(元素2),元素2为CSS选择器或者jQue ...

  3. Python语言入门这一篇就够了-学习笔记(十二万字)

    Python语言入门这一篇就够了-学习笔记(十二万字) 友情提示:先关注收藏,再查看,12万字保姆级 Python语言从入门到精通教程. 文章目录 Python语言入门这一篇就够了-学习笔记(十二万字 ...

  4. Mysql学习总结十二:系统变量、用户变量、定义条件和处理程序

    Mysql学习总结十二:系统变量.用户变量.定义条件和处理程序 1.变量 1.1 系统变量 1.1.1 系统变量的分类 1.1.2 查看系统变量 1.2 用户变量 1.2.1 用户变量的分类 1.2. ...

  5. C语言学习(十二)C语言中的字符(宽字符与窄字符)、从字符谈谈C语言的编码、转义字符

    C语言学习(十二)C语言中的字符(宽字符与窄字符).从字符谈谈C语言的编码.转义字符 目录 C语言学习(十二)C语言中的字符(宽字符与窄字符).从字符谈谈C语言的编码.转义字符 英文字符 字符的表示 ...

  6. Unity C# 网络学习(十二)——Protobuf生成协议

    Unity C# 网络学习(十二)--Protobuf生成协议 一.安装 去Protobuf官网下载对应操作系统的protoc,用于将.proto文件生成对应语言的协议语言文件 由于我使用的是C#所以 ...

  7. Polyworks脚本开发学习笔记(十二)-输出和读取文本文件

    Polyworks脚本开发学习笔记(十二)-输出和读取文本文件 Polyworks作为一个测量工具,将测量的数据方便的导出到文本文件则是一项必须的功能.在DATA_FILE这个命令下提供了很多子命令用 ...

  8. OpenCV学习笔记(十二)——图像分割与提取

    在图像处理的过程中,经常需要从图像中将前景对象作为目标图像分割或者提取出来.例如,在视频监控中,观测到的是固定背景下的视频内容,而我们对背景本身并无兴趣,感兴趣的是背景中出现的车辆.行人或者其他对象. ...

  9. Tensorflow深度学习之十二:基础图像处理之二

    Tensorflow深度学习之十二:基础图像处理之二 from:https://blog.csdn.net/davincil/article/details/76598474   首先放出原始图像: ...

  10. 吴恩达《机器学习》学习笔记十二——机器学习系统

    吴恩达<机器学习>学习笔记十二--机器学习系统 一.设计机器学习系统的思想 1.快速实现+绘制学习曲线--寻找重点优化的方向 2.误差分析 3.数值估计 二.偏斜类问题(类别不均衡) 三. ...

最新文章

  1. TemplateBuilder
  2. mongodb 学习笔记 2 --- 修改器
  3. PKUSC2019游记
  4. 【AutoML】激活函数如何进行自动学习和配置
  5. 1.6 动态数据抓取 -- PyQuery详解
  6. 教你学会Linux/Unix下的vi文本编辑器
  7. 网贷大数据什么时候会好_如果人类把地球钻穿了,会发生什么?大数据分析告诉你多可怕...
  8. PHP学习记录_基本语法
  9. MSDTC on server 'xxx' is unavailable
  10. php程序控制结构,PHP 控制结构
  11. DoTween函数汇总
  12. 广域网、城域网及局域网技术
  13. Python学习心得体会
  14. html自定义属性jquery怎么拿到,jquery 获取自定义属性(attr和prop)的实现代码
  15. Python获取字符串中特定的内容
  16. 每年等额本金,计算复利的方法
  17. Unity使用反射探头实现地面的镜面反射
  18. 会员管理小程序实战开发教程-消费记录功能
  19. response.reset() 与response.resetbuffer使用场景
  20. 长虹官方刷机包和刷机教程

热门文章

  1. java.lang.ClassCastException: org.apache.hadoop.mapreduce.lib.input.FileSplit cannot be cast to...
  2. sl400通过ac无法连接psk加密无线网络
  3. 东芝打印机共享怎么设置_东芝 e-studio181怎么设置网络打印机
  4. ## STAMP使用中数据上传注意事项
  5. 磁带机技术的应用解析
  6. 卡巴斯基注册码的操作
  7. 全国每年考证时间安排
  8. win7蓝屏0x0000003b解决教程
  9. 紧密中心性(closeness centrality)
  10. 现在哪款诺基亚能玩Java游戏_回忆S60(塞班)年代的JAVA游戏:有没有哪一款是你在课堂偷偷玩的?...