PDA

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


AFANX
11.04.2023, 22:02
https://forum.antichat.xyz/attachments/29104320/img_7b16a1ab13.png
Ку, киберрекруты. Сегодня будет разбор таска с платформы Antichat в разделе Реверс-инжиниринг. Таск является очень простым, поэтому вопросов возникнуть недолжно. Этот таск хорош тем, что дает первоначальные навыки писать кейгены.
Кейген - небольшая программа, которая генерирует: криптографический ключ для шифрования данных, псевдоподлинные 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
15.05.2023, 17:46
Спасибо за райтап.

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

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

M4x
18.01.2025, 18:12
Для тех, кто не знаком с языком программирования Python или не проявляет особого интереса к реверс-инжинирингу, существует более простой способ:

Откройте файл flag.enc в инструменте CyberChef.

Выберите рецепт XOR и введите ключ ZHEkjgfhdiIR в соответствующее поле. Почему ключ именно такой - догадаться несложно, учитывая предоставленную подсказку. Не забудьте установить кодировку UTF-8.

После выполнения этих шагов вы увидите сигнатуру PNG, значит, все было сделано правильно. Теперь просто сохраните изображение (Save output to file). На этом изображении будет представлен флаг.