java中asl_带你认识绕不开的ASLR
微軟從windows vista/windows server 2008(kernel version 6.0)開始采用ASLR技術,主要目的是為了防止緩沖區溢出ASLR技術會使PE文件每次加載到內存的起始地址隨機變化,并且進程的棧和堆的起始地址也會隨機改變。
ASLR(Address space layout randomization)是一種針對緩沖區溢出的安全保護技術,通過對堆、棧、共享庫映射等線性區布局的隨機化,通過增加攻擊者預測目的地址的難度,防止攻擊者直接定位攻擊代碼位置,達到阻止溢出攻擊的目的。據研究表明ASLR可以有效的降低緩沖區溢出攻擊的成功率,如今Linux、FreeBSD、MacOS、Windows等主流操作系統都已采用了該技術。
一、主要特點
1、映像隨機化
經典的方法是用注冊表項HKLM\SYSTEM\CurrentControlSet\Session Manager\Memory Management的方法對映像隨機化禁用 ?設置為0 禁用 ,-1強制對可隨機化的映像進行處理,其他值正常工作;
各模塊的低位2位不變;
只是對加載基址的前2個字節做了隨機處理;
2、堆棧隨機化
XP下不具備,VISTA具備,每次獲取堆地址不同;不需要精確跳轉的,溢出手段影響有限;
3、PEB TEB隨機化
XP SP2中已經引入了,使用隨機性的基址。
提取代碼:
unsigned int teb;
unsigned int peb;
__asm
{
mov eax,fs:[0x18]
mov teb,eax
mov eax,dword ptr [eax+0x30
mov teb,eax]
}
printf("PEB:%#x\nTEB:%#x",peb,teb);
getchar();
4、VS2019中支持ASLR
該技術需要操作系統和編譯工具的雙重支持(主要是操作系統的支持,編譯工具主要作用是生成支持ASLR的PE格式);?若不想使用ASLR功能,可以在VS(2019)編譯的時候將“配置屬性->鏈接器->高級->隨機基址”的值修改為否即可。
5、工具鑒別
這里我們用一個工具ASLRProcessScanner來查看下ASLR是否打開,
發現這個程序是打開了ASLR。
這個程序有如下的用法,
可以批量指出當前運行的進程有哪些具備ASLR,也可以對指定進程、程序進行檢測。
二、比對PE信息
準備兩個PE程序,一個有ASLR,一個沒有?ASLR,用PEView查看,
ASLR.exe比NoASLR.exe多了一個.reloc節區,這個節區存儲了程序中的硬編碼信息。
IMAGE_FILE_HEADER\Characteristics
發現ASLR.exe比NoASLR.exe少了一個“IMAGE_FILE_RELOCS_STRRIPED(0001)”標志,該標志的含義是:
Relocation information was strippedfrom the file. The file must be loaded at its preferred base address. If the base address is not available, the loader reports an error.
換個工具看下,
ASLR.exe位置的數值為 0,而NoASLR.exe位置的數值為 1;也就意味著這里我只要置為 1 就可關閉ASLR;
三、關閉ASLR,便于調試
ASLR技術會使PE文件每次加載到內存的起始地址隨機變化,并且進程的棧和堆的起始地址也會隨機改變。
該技術需要操作系統和編譯工具的雙重支持(主要是操作系統的支持,編譯工具主要作用是生成支持ASLR的PE格式)。
1、關閉操作系統的ASLR
操作系統方面關閉ASLR支持,不知道在哪里關閉怎么辦呢?沒關系,我們可以看看別人是怎么做的。
可以看到注冊表添加了一個DWORDRD鍵值項HKLM\System\CurrentControlSet\Control\SESSION MANAGER\MEMORY MANAGEMENT\MoveImages,其值為0。
2、關閉PE頭中ASLR
那么這個時候我們可以通過修改PE頭中可選頭的Characteristics來達成我們的目的。
將這個0x0103改成0x0102就可以關閉PE中的ASLR了。
3、這樣每次加載的時候都是在同一個地址,調試起來的時候是固定地址了。用OD逆向的時候,和IDA中的地址對上了。
至此,簡單介紹完畢。
這是我的第100篇文章,非常有紀念意義!
同時,這篇文章居然是在“魔都”完成的,沒想到的緣份;今天也是這個公眾號開辦整整9個月,一切都值得紀念。
總結
以上是生活随笔為你收集整理的java中asl_带你认识绕不开的ASLR的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 运算符优先级与结合性
- 下一篇: html定位的所有属性,HTML CSS