1. 程式人生 > 實用技巧 >Detours學習3

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
    刪除Payload

Detours還提供了,用於列舉對映到地址空間DetourEnumerateModules中的二進位制檔案並在這些對映的二進位制檔案DetourFindPayload中定位 Payload。

每個Payload由一個128位的GUID標識。Payload可用於將每個應用程式的配置資料附加到應用程式二進位制檔案。

可以使用DetourCopyPayloadToProcess將Payload直接複製到目標程序中。