M4x
Green Team
- 20.05.2024
- 22
- 46
Без лишних предисловий перейдем к делу.
Имеем на руках подозрительный файл с названием, записанным задом наперед — типичный прием, любимый разработчиками вредоносов. На самом деле его настоящее имя: x<202e>gpj.exe (там Unicode-символ U+202E — Right-to-Left Override, чтобы обмануть глаз).
Первым делом скармливаем файл binwalk’у с опцией автоматической экстракции всего, что найдёт:
В результате получаем 15 файлов. Среди них — отвлекающие приманки вроде фото котика, но нас интересует файл 72E00. Проверяем тип:
— и видим, что это RAR-архив. Распаковываем:
В результате распаковки мы получили три файла:
(Позже я узнал, что задачку можно было решить проще — через Process Monitor: при запуске prg.exe он создает файл flag.txt в C:\Users\Public. Но как я уже говорил, я решал путем реверса.)
Открываем prg.exe в Ghidra и почти сразу натыкаемся на следующий участок кода:
Что здесь происходит:
Имеем на руках подозрительный файл с названием, записанным задом наперед — типичный прием, любимый разработчиками вредоносов. На самом деле его настоящее имя: x<202e>gpj.exe (там Unicode-символ U+202E — Right-to-Left Override, чтобы обмануть глаз).
Первым делом скармливаем файл binwalk’у с опцией автоматической экстракции всего, что найдёт:
Bash:
binwalk --dd='.*' x<202e>gpj.exe
В результате получаем 15 файлов. Среди них — отвлекающие приманки вроде фото котика, но нас интересует файл 72E00. Проверяем тип:
Bash:
file 72E00
— и видим, что это RAR-архив. Распаковываем:
Bash:
unrar x 72E00
В результате распаковки мы получили три файла:
- flag.jpg,
- chuvak.wav,
- prg.exe.
(Позже я узнал, что задачку можно было решить проще — через Process Monitor: при запуске prg.exe он создает файл flag.txt в C:\Users\Public. Но как я уже говорил, я решал путем реверса.)
Открываем prg.exe в Ghidra и почти сразу натыкаемся на следующий участок кода:
Код:
__main();
local_48 = 2;
local_47 = 0xe;
local_46 = 5;
local_45 = 4;
local_44 = 3;
local_43 = 0x18;
local_42 = 0x3a;
local_41 = 2;
local_40 = 0x29;
local_3f = 0x34;
local_3e = 0x17;
local_3d = 1;
local_3c = 0x2a;
local_3b = 0x1e;
local_3a = 0x27;
local_39 = 0x2d;
local_38 = 1;
local_37 = 0x26;
local_36 = 0x1e;
local_35 = 1;
local_34 = 0x2f;
local_33 = 0x25;
local_32 = 0x1e;
local_31 = 0x35;
local_30 = 0x20;
local_2f = 0x12;
local_2e = 0x2a;
local_2d = 0x3c;
local_10 = 0x1c;
local_11 = 0x41;
xorEncrypt((longlong)&local_48,0x1c,0x41);
local_20 = fopen("C:\\Users\\Public\\flag.txt","wb");
if (local_20 != (FILE *)0x0) {
fwrite(&local_48,1,(longlong)local_10,local_20);
fclose(local_20);
}
Что здесь происходит:
- Инициализируется массив из 28 байт (0x1c), начиная с local_48.
- Вызывается функция xorEncrypt, которая применяет XOR с ключом 0x41 ко всем элементам этого массива.
- Результат записывается в flag.txt.
Последнее редактирование: