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

  #1  
Старый 08.03.2024, 03:02
CyberDen
Новичок
Регистрация: 23.03.2024
Сообщений: 11
С нами: 1129151

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

Приветствую любителей CTF!

На форуме решения данной задачи не увидел, поэтому выкладываю свое! Вначале нас встречает файл с расширением .pyc. PYC - представляет собой скомпилированный выходной файл, созданный из исходного кода, написанного на языке программирования Python.



Первое, что я решил сделать это перенести файл на машину Kali и там попытаться его запустить. Сразу получаем ошибку:



Ошибка "плохой магический номер" появляется в том случае, если файл .pyc, скомпилированный для одной версии Python, пытается выполняться в другой версии. Проблему можно решить путём удаления файла .pyc и повторной его компиляции в актуальной версии интерпретатора Python. Но это не наш случай, так как исходников у нас нет!

Название файла, дает нам явную подсказку, что нам нужен Python 3.8:



Сначала была идея сделать downgrade до версии 3.8. Но, к счастью, оказалось, что на моей хостовой ОС Windows была установлена версия 3.8.8, и мне удалось запустить этот CrackMe



Отлично! С этим можно работать! Теперь нам нужно декомпилировать файл. Для этого я воспользовался модулем uncompyle6. Установить его можно с помощью следующей команды:

pip install uncompyle6

Далее декомпилируем файл:



Получаем довольно простой исходник:



Вначале кода нас встречают две переменные randb и enc. В них содержатся байтовые последовательности. Далее наши байтовые последовательности "переворачиваются" с помощью [::-1]. Далее мы вводим флаг с клавиатуры, и он кодируется (.encode). Далее сверяется длина нашего флага и байтовой последовательности в enc. Если длина не совпадает, то мы сразу получаем "WRONG FLAG". Если все ОК, то переходим в цикл, в котором в каждой итерации выполняется исключающее ИЛИ (XOR, ^) между элементами байтовых последовательностей randb и enc. Если результат этой логической операции не равен элементу в flag, то f обращается в 0, и мы выходим из цикла, получая "WRONG FLAG". Это как раз то что нам нужно! Модифицируем исходник, оставив только то, что нам нужно для получения флага:



С помощью print выводим результаты логической операции. И чтобы не бегать в ASCII-табличку, используем функцию chr().

Запускаем и получаем флаг:



Всем спасибо за внимание!
 
Ответить с цитированием

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

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

Нууу, например вот =)))

Конечно мой более простой
 
Ответить с цитированием

  #3  
Старый 08.03.2024, 12:08
CyberDen
Новичок
Регистрация: 23.03.2024
Сообщений: 11
С нами: 1129151

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

Цитата:

yetiraki сказал(а):

Нууу, например вот =)))

Конечно мой более простой

Увидел уже после написания! Много CTF-решений не бывает =)
 
Ответить с цитированием
Ответ





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


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




ANTICHAT ™ © 2001- Antichat Kft.