Detours学习3 - 二进制文件编辑
Payloads and Dll Import Editing
除了拦截目标函数的功能外,Detours还包括用于将任意数据段(称为有效载荷)附加到Windows二进制文件、编辑Dll导入表。Detours中的二进制编辑是完全可恢复的;Detours将恢复信息存在在二进制文件中,以便随时可以恢复原始内容。

Format of a Windows PE binary file.
Windows二进制文件的PE格式是COFF(通用对象文件格式)的扩展。Windows二进制文件由DOS兼容头、PE头、程序代码部分、初始化数据的数据部分、导入的Dlls和函数的导入表、导出函数的导出表、调试符号。除了两个头(DOS兼容头、PE头)外,文件的其它部分都是可选的,并且在给定的二进制文件中可能不存在。

Format of a Detours-modified binary file
要修改Windows二进制文件,Detours在导出表区和调试符号区之间创建了一个新的.detours区,如上图所示。请注意,调试符号区必须始终位于Windows二进制文件的末尾。新的.detours区包含一个detour header和原始PE头的副本。如果要修改导入表,Detours会创建新的导入表,将其附加到复制的PE副本中,然后修改原始PE头指向新的导入表。最后,Detours在.detours区的末尾写入用户所有的Payloads,并附加调试符号区。从.detorus区恢复原始PE头并删除.detours区,则Detours可以撤消对Widnows二进制文件的修改。
创建一个新的导入表有两个目的。首先,如果需要撤消对Windows二进制文件的所有修改,它将保留原始的导入表。其次,新的导入表可以包含重命名的导入Dll和函数或全新的Dll和函数。作为应用程序导入表中的第一个条目,用户的Dll始终是在应用程序的地址空间中运行的第一个Dll。
Detours提供了如下函数:
Detours还提供了,用于枚举映射到地址空间DetourEnumerateModules中的二进制文件并在这些映射的二进制文件DetourFindPayload中定位 Payload。
每个Payload由一个128位的GUID标识。Payload可用于将每个应用程序的配置数据附加到应用程序二进制文件。
可以使用DetourCopyPayloadToProcess将Payload直接复制到目标进程中。
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号