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.exe比ASLR_no.exe多了一個.reloc節區,這個節區在前面DLL的章節講解過,其中存儲了程序中的硬編碼信息。

IMAGE_FILE_HEADER\Characteristics

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.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即可


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM