Ку, киберрекруты. Сегодня будет разбор таска с платформы 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()
Результат выполнения является картинка с флагом, как и ожидалось.
Последнее редактирование модератором: