Вредоносные программы иногда запускают шеллкод прямо в памяти. В этой небольшой статье я покажу, как извлечь шеллкод из памяти.
Еще по теме: Как обнаружить шелл-кoд на взломанной машине
Размещение шеллкода в памяти
Обычный способ размещения шелл-кода в памяти — это использовать VirtualAlloc для выделения памяти с нужными разрешениями. Затем вредоносная программа использует RtlMoveMemory для записи шелл-кода в выделенное пространство. После чего создается поток для передачи элемента управления в это место.
Как извлечь шелл-код из памяти
Для извлечения шеллкода мы можем использовать хуки api. Обычно устанавливают точку останова при любом вызове API. Я буду использовать x64dbg. Вы можете использовать любое другое приложение.
Загрузите исполняемый файл в x64dbg. Перейдите к символам и найдите VirtualAlloc. Установите точку останова и выполняйте до возврата.
VirtualAlloc вернет адрес выделенной памяти. Он будет в регистре rax / eax. Это адрес, по которому вы найдете шеллкод.
Установите точку останова при вызове функции CreateThread. Третий аргумент будет адресом памяти, куда мы скопировали шеллкод.
Следуйте по адресу в дампе. Вот где находится шеллкод:
Давайте сравним шеллкод, найденный в памяти, с шелл-кодом в исходном коде. Первые три байта — это DA CB BB.
Да, совпадает. Этот метод можно использовать для извлечения распакованных / расшифрованных исполняемых файлов в память.
Еще по теме: Лучшие программы для реверс-инжиниринга