Заметка На венах ЗМЕИНЫЙ УКУС - мне понравился ядовитый вкус. Реверс-инжиниринг, Игры Кодебай

Темы, которые НЕ подходят по объему под префикс "Статья"
image.png

Ку, киберрекруты. Сегодня будет разбор таска с платформы Codeby в разделе Реверс-инжиниринг. Таск является очень простым, поэтому вопросов возникнуть недолжно. Этот таск хорош тем, что дает первоначальные навыки писать кейгены.
Кейген - небольшая программа, которая генерирует: криптографический ключ для шифрования данных, псевдоподлинные CD-ключи или серийные/регистрационные/активационные номера для регистрации/активирования ПО. Однако, в нашем случае немного другой генератор. Это больше дешифратор.

Дано два файла - flag.enc и program.txt. Перейдем к реверсу.

Реверс

program.txt
является кодом написанном на языке Python в виде псевдоассемблерных инструкций. Бегло просмотрев код, можно увидеть такие инструкции:

Код:
16 LOAD_CONST3 ('ZHEkjgfhdiIR')
18 STORE_FAST2 (key)
....
....
48 BINARY_XOR

Тут в принципе все ясно. Открывается файл, ксорится каждый символ со строкой ZHEkjgfhdiIR и записывается в виде байтов в файл. Таким образом нужно написать декриптор, который будет открывать файл, ксорить байты с ключом ( ибо шифрование симметричное ) и сохранять в файл результат.

Пишем декриптор

Первым делом объявляю ключ и массив, в который будет записан результат. Также открываю файл для чтения байтов:

Python:
key = "ZHEkjgfhdiIR"
flag = []

with open('flag.enc', 'rb') as fh:
    content = list(fh.read())

Последнее, что необходимо сделать, так это записать результат в новый файл:

Python:
file_handler = open("flag.png", "wb")
barray = bytearray(flag)
file_handler.write(barray)
file_handler.close()

Полностью декриптор выглядит так:

Python:
key = "ZHEkjgfhdiIR"
flag = []

with open('flag.enc', 'rb') as fh:
    content = list(fh.read())

for i in range(len(content)):
    flag.append(content[i]^ord(key[i%12]))

file_handler = open("flag.png", "wb")
barray = bytearray(flag)
file_handler.write(barray)
file_handler.close()

Результат выполнения является картинка с флагом, как и ожидалось.
 
Последнее редактирование модератором:

yetiraki

Green Team
07.02.2023
64
109
BIT
468
Спасибо за райтап.

Решал сегодня данную задачу, пришло в голову несколько мыслей

1. Нам неизвестен тип бинарника, можно сделать проверку на магические байты и выбирать нужное расширение для файла, для всех остальных можно .bin сделать, например.
2. Если файл картинка, то можно на него натравливать gocr, я попробовал, но он плохо и не правильно распознал текст, к сожалению. Может быть есть какие другие способы?
 
Мы в соцсетях:

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