HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > БЕЗОПАСНОСТЬ И УЯЗВИМОСТИ > Этичный хакинг или пентестинг > Задания/Квесты/CTF/Конкурсы
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

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

  #2  
Старый 15.05.2023, 17:46
yetiraki
Новичок
Регистрация: 07.02.2023
Сообщений: 0
С нами: 1719376

Репутация: 0
По умолчанию

Спасибо за райтап.

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

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

  #3  
Старый 18.01.2025, 18:12
M4x
Новичок
Регистрация: 20.05.2024
Сообщений: 0
С нами: 1046281

Репутация: 0
По умолчанию

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





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.

×

Внести депозит

Введите сумму USDT:

Принимается только USDT TRC20. Fake/Flash USDT не засчитывается.

×

Вывести депозит

Сумма USDT:

Ваш USDT TRC20 кошелек:

Заявка будет отправлена администратору.