CTF Недействительный (writeup)

Всем привет.
Немного "отдохнули" на ZipLock, идем дальше.

Скачали файл, разархивировали, смотрим file task4.exe
Видим в результате, что это data, т.е. файл то действительно сломан.

Смотрим hexeditor task4.exe
task4-badfile.png

Видим, что написано, что это PE, но он не запускается, не просматривается ghidra и ida, даже file ничего не показывает. Надо проверить магические байты. Погуглим какие должны быть для PE и DOS.


magic-numbers.PNG

Видим, что в файле и в таблице магических байтов есть как общее, так и разное, то прямо в hexeditor меняем и сохраняем.

Ура, можем видеть в ghidra. Видим main, видим какие-то нечитаемые данные и функцию check2, в который передается элемент из данных.
task4-main-check2.png


Проваливаемся в check2 и видим check, в который передается переданное, но еще и xor-ится.
task4-check.png


Проваливаемся в check и видим, что там происходит побитовый сдвиг и xor.
task4-checkk.png

Дебажить в линуксе я так и не научился, потому я возвращаюсь к питону.

Во время реверса надо знать, что все команды которые в коде делаются надо делать в обратную сторону, благо xor работает в обе стороны, но вот сдвиги, сложения, вычитания и деления и прочее уже так не работают. Т.е. надо выполнять команды в обратной последовательности и с обратными знаками, т.е. если был +, то делать надо - и т.д..
Python:
data = [ 0x4d18,0x4d28,0x4d04,0x4d00,0x4d1c,0x4d70,0x4df8,0x4cd0,0x4d2c,0x4d4c,0x4d10,0x4d24,0x4cd0,0x4d04,0x4d68,0x4d34,0x4cd8,0x4d10,0x4d04,0x4cd8,0x4d5c,0x4de0 ]
result = ''

for i in data:
    num = i
    num = num ^ 200
    num = num >> 2
    num = num ^ 0x1337
    result += chr( num )

print(result)

Получили флаг
 
Последнее редактирование:
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!