Учебник Реверс-инжиниринг для начинающих для начинающих
Реверс-инжиниринг — это искусство понимать, как программа устроена внутри: от исходника до машинного кода, который реально исполняет процессор. Этот курс учит читать ассемблер, работать с дизассемблерами и отладчиками, разбирать учебные crackme и безопасно анализировать подозрительные файлы. Главный принцип курса — легальность и этика: мы изучаем внутреннее устройство ПО на своём коде, учебных задачах, CTF и анализе малвари в исследовательских целях, а не учимся ломать чужие защиты или обходить лицензии. Курс опирается на знания из «Ассемблера», «Компьютерной архитектуры» и «Этичного хакинга».
Курс «Реверс-инжиниринг для начинающих» состоит из 11 разделов и 37 уроков: Что такое реверс-инжиниринг и закон, Как устроена программа внутри, Инструменты и подходы, Чтение ассемблера и первый анализ, Практика: разбор crackme и отладка, Продвинутые темы и путь в профессию, Защита своего кода и карьера, Динамический анализ и продвинутая отладка, Анализ вредоносного ПО (безопасно, в песочнице), Обфускация, упаковка и распаковка и Реверс на разных платформах. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.
Программа курса
1 Что такое реверс-инжиниринг и закон
- Что такое реверс-инжиниринг и зачем он нужен
Реверс-инжиниринг простыми словами: восстановление устройства программы по машинному коду и где это легально нужно.
- Закон и этика: что можно и что нельзя
Правовые рамки реверс-инжиниринга: авторское право, статьи УК РФ 272 и 273, лицензионные соглашения и принцип разрешения.
- Что нужно знать заранее: связь с ассемблером и архитектурой
Какие базовые знания нужны для реверса: ассемблер, регистры, память, стек и связь с курсами по архитектуре и этичному хакингу.
- Что такое реверс-инжиниринг и зачем он нужен
2 Как устроена программа внутри
- От исходника к машинному коду: компиляция
Как исходный код на C превращается в машинный код: препроцессор, компилятор, ассемблер, компоновщик и что теряется по дороге.
- Форматы исполняемых файлов: PE (Windows)
Структура PE-файла Windows: заголовки DOS и NT, таблица секций, .text/.data/.rdata, импорты и точка входа.
- Форматы исполняемых файлов: ELF (Linux)
Структура ELF-файла Linux: заголовок, секции и сегменты, .text/.data/.rodata, символы и сравнение с PE.
- От исходника к машинному коду: компиляция
3 Инструменты и подходы
- Статический и динамический анализ
Разница между статическим анализом (без запуска) и динамическим (с запуском в отладчике), их плюсы, минусы и сочетание.
- Дизассемблеры: Ghidra, IDA Free, objdump
Обзор бесплатных дизассемблеров: Ghidra с декомпилятором, IDA Free, командная objdump — что выбрать новичку.
- Отладчики: x64dbg и gdb
Обзор отладчиков для динамического анализа: x64dbg для Windows и gdb для Linux, точки останова, регистры и шаг по коду.
- Статический и динамический анализ
4 Чтение ассемблера и первый анализ
- Узнаём условия и циклы в ассемблере
Как выглядят if, while и for в ассемблере: cmp, условные переходы je/jne/jl и обратные jmp как признак цикла.
- Функции, вызовы и строки в дизассемблере
Как узнать функцию по прологу и эпилогу, как читать call/ret и передачу аргументов, и где в бинаре лежат строки.
- strings и базовый анализ бинаря
Первый поверхностный анализ файла: команды file, strings, поиск URL и сообщений, оценка перед глубоким разбором.
- Узнаём условия и циклы в ассемблере
5 Практика: разбор crackme и отладка
- Работа в дизассемблере: граф, переименование, аннотации
Эффективная навигация в Ghidra/IDA: граф потока управления, переименование функций и переменных, комментарии-аннотации.
- Разбор простого crackme: логика проверки
Как устроена проверка пароля в учебном crackme: сравнение строк, длины, простые преобразования — на легальном примере.
- Динамический анализ в отладчике: точки останова, регистры, шаг
Пошаговая отладка crackme: ставим breakpoint на проверку, читаем регистры, идём по шагам и наблюдаем реальные значения.
- Работа в дизассемблере: граф, переименование, аннотации
6 Продвинутые темы и путь в профессию
- Безопасный анализ малвари: песочница и IOC
Как безопасно анализировать вредоносное ПО: изоляция и песочница, статические признаки, индикаторы компрометации (IOC).
- Упаковка, обфускация и анти-отладка (концептуально)
Зачем программы защищаются: упаковщики, обфускация кода и приёмы анти-отладки — концептуальный обзор для понимания.
- Декомпиляция и чтение псевдо-C
Декомпилятор Ghidra: как ассемблер превращается в читаемый псевдо-C, что декомпилятору удаётся, а что нет.
- Мобильный реверс (APK) — обзор
Обзор реверса Android-приложений: структура APK, байткод Dalvik, smali, декомпиляция в Java и отличия от нативного реверса.
- Безопасный анализ малвари: песочница и IOC
7 Защита своего кода и карьера
- Как защищать свой код от реверса
Практические приёмы для разработчика: обфускация, защита секретов на сервере, обнаружение отладки и реалистичные ожидания.
- Путь в профессию: CTF, AppSec, malware analyst
Карьера в реверсе: CTF reversing как старт, профессии malware analyst, AppSec и vulnerability researcher, и как развиваться легально.
- Как защищать свой код от реверса
8 Динамический анализ и продвинутая отладка
- Отладчики вглубь: gdb, x64dbg, точки останова
Отладчики gdb и x64dbg для реверс-инжиниринга: точки останова и вотчпоинты, пошаговое выполнение, чтение регистров и стека в рантайме, наблюдение значений.
- Трассировка вызовов и поведения
Трассировка программы: strace и ltrace концептуально, наблюдение системных и библиотечных вызовов, понимание поведения бинарника по его взаимодействию с ОС.
- Анти-отладка и анти-анализ (и как их замечать)
Анти-отладка и анти-анализ концептуально: как программы детектируют отладчик и песочницу, зачем это нужно вредоносному ПО и как аналитик распознаёт такие проверки.
- Патчинг и модификация в учебных целях
Учебный патчинг бинарника: как меняют поток выполнения на crackme и своих программах — NOP, инверсия условия перехода. Только на учебных стендах и своих файлах.
- Отладчики вглубь: gdb, x64dbg, точки останова
9 Анализ вредоносного ПО (безопасно, в песочнице)
- Безопасная лаборатория для анализа
Как собрать изолированную лабораторию для анализа вредоносного ПО: отдельная ВМ, снапшоты, контролируемая сеть, правила безопасности аналитика и почему нельзя на рабочей машине.
- Статическая сортировка образца
Статическая сортировка вредоносного образца без запуска: хеши и репутация (VirusTotal-подход), строки, импорты, энтропия как признак упаковки; Python-демо подсчёта энтропии.
- Динамическое поведение и индикаторы (IOC)
Динамический анализ в песочнице: наблюдение за файлами, реестром и сетью, выделение индикаторов компрометации (IOC) для защиты и чтение sandbox-отчётов.
- Сигнатуры и детект: YARA
Как пишут YARA-правила для обнаружения семейств вредоносного ПО: строки, условия, признаки упаковки и применение сигнатур в защите, SOC и threat hunting.
- Безопасная лаборатория для анализа
10 Обфускация, упаковка и распаковка
- Техники обфускации кода
Что такое обфускация: переименование, мёртвый код, control-flow flattening, шифрование строк. Как это выглядит при анализе и зачем разработчики защищают код.
- Упаковщики: что это и как распознать
Что такое упаковщики исполняемых файлов (UPX и др.), признаки упаковки: высокая энтропия и мало импортов, легитимное и вредоносное применение.
- Распаковка в учебных целях
Концепция распаковки: как найти OEP, снять дамп распакованного образа из памяти, идея ручной распаковки UPX на своём бинаре — принцип без оружейности.
- Шифрование строк и расшифровка при анализе
Почему программы прячут строки, как аналитик находит ключ и алгоритм расшифровки, Python-демо простого XOR-декодирования спрятанной строки.
- Техники обфускации кода
11 Реверс на разных платформах
- Реверс .NET: байт-код и декомпиляция
Почему .NET-сборки легко декомпилируются: IL/CIL и метаданные, инструменты ILSpy/dnSpy, что это значит для защиты своего кода и как помогает обфускация.
- Реверс Java и Android
Реверс Java и Android: байт-код JVM и декомпиляция .class/.jar, формат APK и dex, smali, что аналитик извлекает и как защитить своё приложение — R8/ProGuard и вынос секретов.
- Прошивки и встроенные системы
Основы реверса прошивок: откуда берётся образ, подход binwalk, файловые системы (squashfs/cramfs), поиск зашитых ключей и учёток — для аудита своих устройств.
- Мобильный реверс: основы анализа приложений
Статический анализ мобильных приложений APK и IPA: структура пакета, ресурсы и строки, манифест и разрешения, поиск небезопасного хранения данных — для защиты своего приложения.
- Реверс .NET: байт-код и декомпиляция