木馬核心技術剖析讀書筆記之Windows 64 位系統下的木馬技術

對比 32位系統 64位系統
物理內存最大容量 4GB 2TB
單進程地址空間最大容量 3GB 8TB

Windows 64 位系統

當前64位平臺上只實現了48位的線性地址空間,0-47位是地址,48-63保持與第47位相同。低地址範圍:0x0000000000000000-0x00007FFFFFFFFFFF,高地址範圍:0xFFFF800000000000-0xFFFFFFFFFFFFFFFF。Windows 64 位系統內核使用高地址範圍,用戶態使用低地址範圍

Wow 64 子系統

Wow64 是 Windows 64 位系統的一個子系統,負責在 Windows 64 位系統上執行 32 位的應用程序

木馬要同時支持 32 位系統和 64 位系統,需要針對 Wow64 的實現與運行機制,進行有針對性的處理,才能更好地適應 Windows64 位環境,並進行有效的防護。木馬使用 IsWow64Process 函數判斷其是否運行在 Wow64 子系統中,由於 32 位的 Windows 系統也實現了該函數,故該函數只能判斷進程是否運行在 Wow64 中,而不能判斷所在系統爲 64 位系統。要獲取是否爲 64 位系統,需要使用 GetNativeSystemInfo 函數

Wow64 子系統主要由用戶模式下的一組 DLL 及系統內核中的部分功能組成

image_1c50h8vnd1hucim1evci0cs6r9.png-202.5kB

Wow 64 中執行 64 位代碼

32 位進程中執行 64 位指令

在 Wow64 子系統中,32 位應用程序使用的 32 位系統功能 API,都是 Wow64 子系統的組件通過調用對應的 64 位版本 API 實現的。這一過程後,Wow64 會從 32 位處理器模式切換到 64 位處理器模式,待 64 位函數執行完成後,再切換回 32 位處理器模式

32 位進程中調用 64 位 API

對於運行在 Wow64 中的 32 位進程,只加載了 ntdll.dll 這個 64 位的 DLL,該 DLL 的導出函數基本上能滿足大部分木馬的功能要求。要調用 64 位版本 ntdll.dll 中的函數,首先需要找到該 ntdll.dll 在內存中的鏡像,然後通過解析該函數的導出表,找到相應的函數地址,再進行調用

image_1c50q341v131j1eib1upphcf05m.png-396.7kB

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章