#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 місяця
Також варто подивитися