用于修改二进制文件的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。