Сybersecurity

8 уроков
Консультации
#6 – Reverse engineering и CTF-задачи

#6 – Reverse engineering и CTF-задачи

В уроке мы узнаем про соревнования 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 — это простая программа, задача которой — проверить введённый вами «ключ». Чтобы её пройти, вы должны:

  1. Запустить программу;
  2. Посмотреть, как она реагирует на ввод;
  3. Проанализировать код или поведение;
  4. Найти правильный ключ или обойти проверку.

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!'). Просто переменные заменены массивом.


Чтобы упростить такой код:

  1. Используйте beautifier — например, https://beautifier.io;
  2. Ищите ключевые слова: eval, atob, unescape, Function, charCodeAt;
  3. Запускайте части кода и смотрите, что они возвращают;
  4. Заменяйте eval на console.log, чтобы увидеть результат выполнения.


Так вы сможете получить отформатированный и читаемый JavaScript-код.


Что делать нельзя?

Важно: реверс-инжиниринг и анализ программ допустимы только в образовательных целях. Никогда не анализируйте чужие платные приложения, лицензионные программы или закрытые системы без разрешения.


Учитесь на безопасных платформах:

  • TryHackMe, RootMe;
  • собственных тестовых файлах;
  • заданиях категории CrackMe из открытых CTF.

Задание к уроку

Необходимо оформить подписку на проект, чтобы получить доступ ко всем домашним заданиям

Большое задание по курсу

Вам необходимо оформить подписку на сайте, чтобы иметь доступ ко всем большим заданиям. В задание входит методика решения, а также готовый проект с ответом к заданию.
PS: подобные задания доступны при подписке от 1 месяца

Также стоит посмотреть

Уроки Figma (Фигма) с нуля / Создание дизайна (UI/UX)
8 уроков
Изучение C++ от новичка до профи
AI Agents, Vibe Coding и разработка с Claude Code
1 урок
Фреймворк Next JS / Изучение NextJS для начинающих
8 уроков
Изучение языка C# для начинающих
26 уроков
Изучение языка Rust для начинающих
14 уроков
Комментарии
Добавить комментарий

Пока комментариев нет