Как я могу определить, применяет ли Windows ASLR без перезагрузки? - PullRequest
0 голосов
/ 22 августа 2011

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

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

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

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

1 Ответ

1 голос
/ 22 августа 2011

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...