天天看點

ASLR

@author:dlive

ASLR address space layout randomization

微軟從windows vista/windows server 2008(kernel version 6.0)開始采用ASLR技術,主要目的是為了防止緩沖區溢出

ASLR技術會使PE檔案每次加載到記憶體的起始位址随機變化,并且程序的棧和堆的起始位址也會随機改變。

該技術需要作業系統和編譯工具的雙重支援(主要是作業系統的支援,編譯工具主要作用是生成支援ASLR的PE格式)

若不想使用ASLR功能,可以在VS編譯的時候将“配置屬性->連結器->進階->随機基址”的值修改為否即可

下面對比ASLR.exe和ASLR_no.exe的PE資訊的差別。(x86的可執行檔案,兩個exe編譯時的差別僅為是否開啟ASLR選項)

PE資訊對比

.reloc節區

ASLR

ASLR.exe比ASLR_no.exe多了一個.reloc節區,這個節區在前面DLL的章節講解過,其中存儲了程式中的寫死資訊。

IMAGE_FILE_HEADER\Characteristics

ASLR

ASLR.exe中

Characteristics(0102) = IMAGE_FILE_EXECUTABLE_IMAGE(0002) | IMAGE_FILE_32BIT_MACHINE(0100)

ASLR_no.exe中

Characteristics(0103) = IMAGE_FILE_RELOCS_STRRIPED(0001) | IMAGE_FILE_EXECUTABLE_IMAGE(0002) | IMAGE_FILE_32BIT_MACHINE(0100)

後者比前者多一個IMAGE_FILE_RELOCS_STRRIPED标志,該标志含義為:

Relocation information was stripped from the file. The file must be loaded at its preferred base address. If the base address is not available, the loader reports an error.
           

https://msdn.microsoft.com/en-us/library/windows/desktop/ms680313(v=vs.85).aspx

IMAGE_OPTIONAL_HEADER\DllCharacteristics

ASLR

ASLR.exe比ASLR_no.exe的DllCharacteristics多了一個IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE标志

該标志的含義為

The DLL can be relocated at load time.

删除PE檔案的ASLR功能

Tips: 如果一個要詳細分析的檔案應用了ASLR功能,分析前可以暫時将ASLR功能删除,然後再調試分析,由于檔案總是被加載到相同的記憶體位址,分析起來會更簡便

删除ASLR功能的方法很簡單,隻需将

IMAGE_OPTIONAL_HEADER\DllCharacteristics

中的

IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE

标志去掉即可

即将PE中8140的資料改為8100即可

注:本部落格文章轉載需帶上原文連結