 |

11.04.2023, 22:02
|
|
Новичок
Регистрация: 19.01.2024
Сообщений: 0
С нами:
1221004
Репутация:
0
|
|
Ку, киберрекруты. Сегодня будет разбор таска с платформы 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
(
)
Результат выполнения является картинка с флагом, как и ожидалось.
|
|
|

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

18.01.2025, 18:12
|
|
Новичок
Регистрация: 20.05.2024
Сообщений: 0
С нами:
1046281
Репутация:
0
|
|
Для тех, кто не знаком с языком программирования Python или не проявляет особого интереса к реверс-инжинирингу, существует более простой способ: - Откройте файл flag.enc в инструменте CyberChef.
- Выберите рецепт XOR и введите ключ ZHEkjgfhdiIR в соответствующее поле. Почему ключ именно такой - догадаться несложно, учитывая предоставленную подсказку. Не забудьте установить кодировку UTF-8.
- После выполнения этих шагов вы увидите сигнатуру PNG, значит, все было сделано правильно. Теперь просто сохраните изображение (Save output to file). На этом изображении будет представлен флаг.
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|