Ку, киберрекруты. Сегодня будет разбор таска с платформы Antichat в разделе Реверс-инжиниринг. Таск является очень простым, поэтому вопросов возникнуть недолжно. Этот таск хорош тем, что дает первоначальные навыки писать кейгены.
Кейген - небольшая программа, которая генерирует: криптографический ключ для шифрования данных, псевдоподлинные CD-ключи или серийные/регистрационные/активационные номера для регистрации/активирования ПО. Однако, в нашем случае немного другой генератор. Это больше дешифратор.
Дано два файла - flag.enc и program.txt. Перейдем к реверсу.
Реверс
program.txt является кодом написанном на языке Python в виде псевдоассемблерных инструкций. Бегло просмотрев код, можно увидеть такие инструкции:
Тут в принципе все ясно. Открывается файл, ксорится каждый символ со строкой 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
(
)
Результат выполнения является картинка с флагом, как и ожидалось.