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
提供瞭如下函式:
- [x]
DetourBinaryEditImports
用於編輯匯入表 - [x]
DetourBinarySetPayload
新增Payload - [x]
DetourBinaryEnumeratePayloads
列舉Payload和DetourBinaryPurgePayloads
Detours
還提供了,用於列舉對映到地址空間DetourEnumerateModules
中的二進位制檔案並在這些對映的二進位制檔案DetourFindPayload
中定位 Payload。
每個Payload由一個128位的GUID標識。Payload可用於將每個應用程式的配置資料附加到應用程式二進位制檔案。
可以使用DetourCopyPayloadToProcess
將Payload直接複製到目標程序中。