2014-03-24 70 views
0

據說在struct PEB_LDR_DATA的偏移量0x1C處存儲了指向In InitializationOrderModuleList的頭指針,對嗎?kernel32.dll和kernelbase.dll之間令人困惑的基地址

除此之外,中In InitializationOrderModuleList第二個節點應該是kernel32.dll,但是,當我找到第二個節點,原來不被的kernel32.dll基地址,相反,它是像kernelbase.dll,這怎麼解釋?

謝謝!

回答

1

您依賴未記錄的實現細節,並且遇到了更新的實現。

實現細節不保證保持不變。

這個特別的細節似乎已經改變,提供了使用緩衝區溢出錯誤來防禦代碼注入攻擊的縱深防禦。

+0

具體來說,我怎麼能寫彙編代碼來定位的基址'kernel32.dll'?這個問題困擾了我好幾天...... –

+0

@RichardMorning:你在C代碼中的做法相同:將字符串''kernel32.dll''傳遞給'GetModuleHandleA',來自同一系統上的任何進程。遠程執行注射不再容易,故意。這就是ASLR的重點。 –

+0

謝謝。但我試圖插入一段代碼到溢出的緩衝區中......如果我使用反彙編的C代碼,它會帶來太多開銷,再加上緩衝區不夠大... –

0

這裏的評論是正確的,你正在運行到新的ISH(實際上很舊,在這一點上)改變到動態加載kernel32.dll的Windows。您嘗試的策略在Vista之後停止工作。

這並不意味着你不能,當然。這種戰術對我的作品只是罰款:

http://blog.harmonysecurity.com/2009_06_01_archive.html