BSOD / ASLR / ImageBase

May 26, 2021 01:15

Как же бесит, что в случае отсутствия дампа при BSOD, даже в том случае, если была возможность определить имя модуля (оно хотя бы выводится!), не выводится фактическая база загрузки модуля. Какой смысл в virtual offset на современных 64-битных ОС с полноценно работающим ASLR? Бессмысленно знать последние 12 бит адреса? В чем сложность-то написать ( Read more... )

bugs, coding, windows, debug

Leave a comment

Comments 25

anonymous May 26 2021, 14:31:34 UTC
Ну а что вы хотите от этих колхозников?), они только так и умеют

Reply


nightriderz1 May 26 2021, 14:33:03 UTC
А каков сценарий дальнейшего использования, зачем imagebase если все равно дампа нет? Так-то вроде логично - вот смещение в развернутом, отмаппированном модуле, где бы он ни был развернут.

Reply

sporaw May 26 2021, 15:25:34 UTC
> А каков сценарий дальнейшего использования, зачем imagebase если все равно дампа нет?

В IDA загрузить и посмотреть код.
Кучу багов в своем/чужом коде так разбирал/находил.

> Так-то вроде логично - вот смещение в развернутом, отмаппированном модуле, где бы он ни был развернут.

Без знания реальной базы мэппинга этот виртуальный адрес = %random%, просто мусор. Ничего не дает вообще.

Вычисление фактического адреса:
RelativeOffset = MappedAddress - AslrMappedImageBase
Дальше в файле: PeImageBase + RelativeOffset

Reply

nightriderz1 May 26 2021, 18:25:47 UTC
А..., я неверно понял, что ты под virtual offset имел в виду - никогда BSOD'овскими данными не пользовался, думал про RVA. Тогда да, засада.
Вообще, ну её такую жизнь без дампа. Все же возможность "посмертного" дебага пмсм IDA не заменит.

Reply


anonymous May 26 2021, 15:09:43 UTC
Нуб ипаный цуко.

Reply

sporaw May 26 2021, 15:27:45 UTC
Кто?
Пусть "не-нуб" расскажет как узнать адрес, не имея базы.

Reply

nightriderz1 May 27 2021, 13:10:58 UTC
Ну, чисто гипотетически, можно, наверно, посмотреть, какие инструкции при заданной гранулярности рандомизации, плюс-минус размер модуля, попадают на такие-то 12 бит смещения. Наверняка, будут случаи, когда попадет на середину инструкции - их можно отсеять. Только вот автоматизировать надо.

Reply

sporaw May 27 2021, 13:17:59 UTC
Не поможет. Я уже это сделал (до написания поста).

Это хорошо еще, что в моем случае это access violation, т.е. там операнды, связанные с [].
Но вот реальный пример: драйвер, 36 мегабайт, ~140 подходящих операндов на указанных 12-бит адресах (т.е. отфильтровано уже по самым жестким критериям, осталось ~140 адресов).

Одно дело разобрать баг (пытаться понять причины), когда понимаешь где он происходит, другое дело ПРЕДПОЛАГАТЬ баг в 140 (!) местах - это просто бессмысленная трата времени.

Reply


anonymous May 28 2021, 17:18:17 UTC
Microsoft обвинила Россию в масштабной кибератаке на госагентства США
https://theins.ru/news/242271

Reply



Leave a comment

Up