March 12, 2014

NeoQuest 2014: Отмороженный компьютер (ru)

Итак, нам дан дамп оперативной памяти и мы должны с него что-нибудь получить. Первым делом необходимо определить: а этот дамп вообще от чего? Volatility imageinfo позволяет узнать и это (Win7SP0x86/Win7SP1x86) и получить множество полезной информации. Ничто не поможет так понять, что происходит на компьютере, как скрин, используем Volatility screenshot (и получим кучу странных пустых картинок, кроме одной)
VirtualBox поверх всех окон, в нем определенно что-то есть. Найдем его PID при помощи pslist (там всего 3 процесса VirtualBox но живой из них только один). Теперь нам нужно найти что-то похожее на скрин экрана. Скорее всего умные люди сделали бы это при помощи анализа энтропии, но я нашел способ попроще: запустил свой VirtualBox, открыл GIMP на виртуалке, залил его каким-нибудь непопулярным в дизайне цветом, дампнул процесс VirtualBox и поискал этот цвет в HEX представлении. Скрин обнаружился где-то вблизи конца дампа, чего мне, в общем-то хватило в дальнейшем. Важно, что скрин был в RGBA8888 (хотя понятное дело, что альфа-канал никому не нужен в непрозрачных изображениях, поэтому в значении альфы красовалось гордое FF). Теперь осталось дело за малым: получить дамп VirtualBox с нашей задачи (Volatility memdump с параметром -p <PID>) и поискать с конца ******FF******FF******FF******FF******FF******FF (потому что в альфа канале видеопамяти VirtualBox, как известно, FF).
Находим подозрительный участок памяти возле 2DA10160-2DDDC140 и открываем его в GIMP. Выбираем RGBA и зажимаем кнопку увеличения ширины, момент когда разрешение будет верным будет охарактеризован появлением вертикальных линий на экране (на самом деле это очень заметно). Итого разрешение 1152 на 85? (поехавшие пиксели мешают восстановить точное разрешение, видимо, раньше это было 864).
Итого, после некоторой обработки (замены R->B, B->R, белый экран->A) получаем:

Эта картинка определенно содержит флаг :)
Как оказалось, это не самое популярное решение (остальные решившие читали адрес видеопамяти из открытого в блокноте файла), но:
1) Мое решение не требует чтения никаких log-файлов. В самом деле, вы часто видели юзера, который открывает логи в блокноте при запуске VirtualBox? :)
2) У меня на скрине есть еще и инфа о внешнем ПК, например теперь мы знаем (из значка в трее), что у него есть "неисправленные проблемы" :)
UPD: то, что внешняя часть экрана оказалась в дампе, по-видимому связано с тем, что процессом VirtualBox была загружена одна из системных библиотек вывода на экран, которая, в свою очередь, хранила данные экранного буфера. Подтвердилось это элементарно: в дампе блокнота обнаружилось в точности то же самое. Формально мы нашли не то, что искали, однако мы нашли что-то еще покруче. (впрочем, поскольку поиск производился с конца, скорее всего, через пару ложных блоков, состоящих из FF целиком, мы нашли бы и внутренний скрин).
UPD2: похоже, цветовой режим буфера - BGRA8888, привел цвета в порядок.

No comments:

Post a Comment