2018年1月25日 星期四

x64dbg - ASLR 位移自動計算

ASLR (Address space layout randomization) ,又稱為位址空間配置隨機化,在每次重新執行時,程式所執行的記憶體都會被改變,因此逆向程式時,只要記錄關鍵程式碼時,也會被ASLR搞得頭昏腦脹,不過ASLR需要編譯器的功能啟用,也需要系統功能被打開,所以也可以透過修改系統功能來讓ASLR被關閉 (不過並不是每個人都想要直接的關閉系統的ASLR,造成系統安全上的疑慮,此時就需要x64dbg自動計算位移(Offset)的功能)。


-ASLR 位移自動計算

由於為了系統的安全,並不想要直接關閉ASLR,也不想要在逆向程式時造成的困擾,x64dbg 就是一個功能健全的工具,只要在下中斷點 (software breakpoint)的位址,每次重新執行程式時,x64dbg都會自動計算位移,就可以順利在之前下的中斷點停下,並不需要再透過搜尋Machine Code或人工計算位址。

執行64位元的x64dbg。



將小算盤拖曳到x64dbg的介面裡。



點選上方功能列的Memory Map,然後會看到calc.exe主程式的區塊在每次重新執行時,位址都會不一樣 (前提是ASLR的功能要被啟用)。



在.text的起始位址按F2下中斷點。

 
在功能列上點選Breakpoints,會看到剛剛下的中斷點和x64dbg自動在entry point下中斷點。



點擊左上的Debug欄位,然後再按Restart或直接Ctrl+F2重新執行程式。



此時觀察Address的欄位,會發現跟剛剛的記憶體位址是不一樣的,不過x64dbg會正確的計算位移,因此只要下過的中斷點,下次執行還是會斷在同一個地方。