Как я могу определить, применяет ли Windows ASLR без перезагрузки?

Насколько я понимаю, ASLR рандомизация разметки адресного пространства < / sup> будет выполнять только случайное перемещение при запуске системы (при перезагрузке).

Рандомизация разметки адресного пространства (ASLR)

ASLR перемещает исполняемые образы в случайные места при загрузке системы, что затрудняет предсказуемую работу кода эксплойта. (...)

Если это так, как я могу затем «протестировать» или, скорее, проверить, что ASLR выполняется для моего модуля C ++ или для системного модуля (скажем, kernel32.dll), не перезагружая Windows повторно и надеясь, что случайность появляется?


person Martin Ba    schedule 22.08.2011    source источник


Ответы (1)


Вот что я бы попробовал:

Помните, что дескриптор модуля HMODULE на самом деле является базовым адресом образа модуля. Вы можете использовать GetModuleHandle, чтобы получить это ценность. Если вы сравните это с базовым адресом в дополнительных значениях заголовка изображения, мы ожидаем, что эти два значения будут разными при включении ASLR.

Имейте в виду, что это будет четким индикатором ASLR только тогда, когда GetModuleHandle используется в определенных системных библиотеках DLL; он будет работать для kernel32, потому что это не типичный кандидат на перемещение изображения:

  1. Всем системным DLL Microsoft даются уникальные рекомендуемые базовые адреса; и
  2. Это одна из первых библиотек DLL, отображаемых в адресное пространство процесса.

Поскольку kernel32 обычно не перемещается, если ASLR был отключен, было бы разумно ожидать, что он будет загружен по рекомендованному базовому адресу.

Как получить рекомендуемый базовый адрес из заголовков изображений? Самый простой способ - использовать утилиту DUMPBIN, входящую в состав Visual C ++. Если вы предпочитаете делать это программно, вам нужно будет немного изучить заголовки исполняемого образа, пока вы не найдете поле ImageBase структуры IMAGE_OPTIONAL_HEADER. Для получения дополнительной информации о заголовках PE я бы порекомендовал "Углубленное изучение Win32 Portable Executable File Format » Мэтта Питрека.

person Aaron Klotz    schedule 22.08.2011