Киберколизей CODEBY 04-2024. Writeup Reverse Stranger

Киберколизей CODEBY 04-2024. Writeup Reverse Stranger

балобаш

Скачиваем архив с сайта, распаковываем и обнаруживаем task.exe в заблокированных угрозах сразу с двумя видами троянов: Trojan:Win32/Znyonm и Trojan:Script/Wacatac.B!ml. Удаляем винду отключаем антивирус и идем разбирать приложение.

Первым делом попытаемся запустить файл. Состоятельных людей (с лицензией IDA) сразу же встретит приветливое окно с ящерскими глифами, по закрытии которого приложение успешно закончит работу. Людям с Ghidra повезет несколько меньше, и они увидят ровным счетом ничего. Но грустить рано, запускаем диссасемблер и начинаем разбираться, что вообще происходит.

sus

Тут же нас встречает изобилие непонятных функций. Есть несколько вариантов для дальнейших действий: прогнать .exe файл на строчки и попытаться отыскать что-то интересное, начать судорожно метаться по code browser'у в надежде обрести понимание происходящего, пойти дебаггать приложение. Я попробовал все три варианта, и поэтому рекомендую пойти первым путем.

Среди подозрительных строчек замечаем следующие: "ida.exe", "ida64.exe", "notepad.exe". Попытаемся найти в каких функциях они фигурируют. Поиск по памяти программы быстро приводит нас к единственной функции по адресу FUN_00401550, частично декомпилированный код которой выглядит следующим образом:

Часть FUN_00401550

Ага, вот и первая зацепка к тому, почему антивирус заблокировал программу: task.exe делает snapshot рабочих процессов и, перебирая их один за другим, убеждается в отсутствии среди них IDA. Здесь же замечаем еще один подозрительный момент: task.exe охотится за notepad.exe (помянем добряка).

Инъекция в notepad.exe в FUN_00401550

При наличии запущенного процесса notepad.exe, приложение запрашивает выделить память под сомнительные данные, пытается их записать, а потом исполняет. Также предварительно эти данные проходят обработку. Давайте взглянем на то, что же пытается записать task.exe.

Подготовка данных. Вычитание 0x30 из каждого байта

Вот так выглядят данные по адресу DAT_00404020:

Необработанные данные

Приведем их к нужному виду (вычтем их каждого байта 30h) и попробуем дизассемблировать:

Что-то похожее на неслучайный код

Пройдемся по строчкам и изучим, что же делает этот алгоритм:

1) Кладет в регистр RBX адрес 0x40404e.

char* s = &[0x40404e];

2) Задает RCX = 0;

int i = 0;

3) Задает RDI = 47;

int n = 47;

4) Запускает цикл for от RCX = 0 до RDI = 47, в котором из байтов строки s (лежит в RBX) вычитается 0x80.

for(int i = 0; i < n; i++) s[i] -= 128;

Что же такое строка s, лежащая по адресу 0x40404e? Это байты, идущие сразу же за снипетом ассемблера. Осталось написать короткий скрипт на Python, который проделает махинации выше со строкой s.

Лютый код на python

Запускаем, и... Флаг получен. 😎

как удалить это поле...

Report Page