#6 – Reverse engineering и CTF-задачи
Видеоурок
Что такое CTF?
CTF расшифровывается как Capture The Flag — «захвати флаг». Это тип соревнования, в котором вы должны найти определённую строку (флаг), например:
FLAG{you_found_me}В CTF встречаются разные категории заданий. Вот некоторые из них:
- Reversing — анализ бинарных файлов, байткода и обфусцированных скриптов;
- Pwn — эксплуатация бинарных уязвимостей;
- Crypto — взлом слабых криптографических алгоритмов;
- Web — уязвимости веб-приложений;
- Forensics — восстановление данных и анализ памяти;
- Stego — поиск скрытых сообщений в изображениях и других медиафайлах.
На платформах вроде TryHackMe или RootMe вы можете проходить подобные задания и учиться на практике.
Что такое Reverse engineering?
Реверс-инжиниринг — это процесс, при котором вы пытаетесь понять, как работает программа, не имея её исходного кода. Чаще всего анализируются:
- исходные файлы типа .exe или .jar,
- обфусцированные скрипты,
- мини-игры или небольшие программы, в которых зашит ключ, пароль или логика.
Здесь вы не пишете код, а анализируете чужую программу и её поведение, чтобы понять, как она устроена, где спрятан «флаг», как выполняется проверка и как можно её обойти.
CrackMe — самая популярная категория
CrackMe — это простая программа, задача которой — проверить введённый вами «ключ». Чтобы её пройти, вы должны:
- Запустить программу;
- Посмотреть, как она реагирует на ввод;
- Проанализировать код или поведение;
- Найти правильный ключ или обойти проверку.
CrackMe-программы бывают на любом языке: от C++ и Java до Python или JavaScript. Некоторые из них просты, другие используют шифрование, антиотладку и различные трюки.
Как «ломать» простые приложения?
Перейдём к практике. Допустим, у нас есть Python-программа, но вместо исходного файла .py нам достался скомпилированный файл — .pyc. Это байткод, создаваемый Python при запуске.
Для его декомпиляции установим библиотеку uncompyle6:
pip install uncompyle6Предположим, у нас есть файл secret.pyc. Тогда команда будет следующей:
uncompyle6 -o . secret.pycПосле этого в текущей папке появится восстановленный исходный код.
Часто внутри можно увидеть что-то вроде:
if input("Enter key: ") == "super_secret_key":
print("Correct!")Если вы это нашли — поздравляю, вы «взломали» программу и нашли флаг.
Пример: JS-обфускация
В CTF и реальных проектах часто используется обфусцированный JavaScript — специально запутанный код, который сложно читать.
Вот пример:
var _0x1a3b = ['log', 'Hello, world!'];
console[_0x1a3b[0]](_0x1a3b[1]);На первый взгляд он сложный, но на самом деле — это обычный console.log('Hello, world!'). Просто переменные заменены массивом.
Чтобы упростить такой код:
- Используйте beautifier — например, ;
- Ищите ключевые слова:
eval,atob,unescape,Function,charCodeAt; - Запускайте части кода и смотрите, что они возвращают;
- Заменяйте
evalнаconsole.log, чтобы увидеть результат выполнения.
Так вы сможете получить отформатированный и читаемый JavaScript-код.
Что делать нельзя?
Важно: реверс-инжиниринг и анализ программ допустимы только в образовательных целях. Никогда не анализируйте чужие платные приложения, лицензионные программы или закрытые системы без разрешения.
Учитесь на безопасных платформах:
- TryHackMe, RootMe;
- собственных тестовых файлах;
- заданиях категории CrackMe из открытых CTF.
Задание к уроку
Необходимо оформить подписку на проект, чтобы получить доступ ко всем домашним заданиям
Большое задание по курсу
Вам необходимо оформить подписку на сайте, чтобы иметь доступ ко всем большим заданиям. В задание входит методика решения, а также готовый проект с ответом к заданию.
PS: подобные задания доступны при подписке от 1 месяца
Также стоит посмотреть