Кибербезопасность

Учебник Реверс-инжиниринг для начинающих для начинающих

37 уроков · 11 разделов · бесплатно, без регистрации

Реверс-инжиниринг — это искусство понимать, как программа устроена внутри: от исходника до машинного кода, который реально исполняет процессор. Этот курс учит читать ассемблер, работать с дизассемблерами и отладчиками, разбирать учебные crackme и безопасно анализировать подозрительные файлы. Главный принцип курса — легальность и этика: мы изучаем внутреннее устройство ПО на своём коде, учебных задачах, CTF и анализе малвари в исследовательских целях, а не учимся ломать чужие защиты или обходить лицензии. Курс опирается на знания из «Ассемблера», «Компьютерной архитектуры» и «Этичного хакинга».

Курс «Реверс-инжиниринг для начинающих» состоит из 11 разделов и 37 уроков: Что такое реверс-инжиниринг и закон, Как устроена программа внутри, Инструменты и подходы, Чтение ассемблера и первый анализ, Практика: разбор crackme и отладка, Продвинутые темы и путь в профессию, Защита своего кода и карьера, Динамический анализ и продвинутая отладка, Анализ вредоносного ПО (безопасно, в песочнице), Обфускация, упаковка и распаковка и Реверс на разных платформах. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.

Программа курса

  1. 1 Что такое реверс-инжиниринг и закон

    1. Что такое реверс-инжиниринг и зачем он нужен

      Реверс-инжиниринг простыми словами: восстановление устройства программы по машинному коду и где это легально нужно.

    2. Закон и этика: что можно и что нельзя

      Правовые рамки реверс-инжиниринга: авторское право, статьи УК РФ 272 и 273, лицензионные соглашения и принцип разрешения.

    3. Что нужно знать заранее: связь с ассемблером и архитектурой

      Какие базовые знания нужны для реверса: ассемблер, регистры, память, стек и связь с курсами по архитектуре и этичному хакингу.

  2. 2 Как устроена программа внутри

    1. От исходника к машинному коду: компиляция

      Как исходный код на C превращается в машинный код: препроцессор, компилятор, ассемблер, компоновщик и что теряется по дороге.

    2. Форматы исполняемых файлов: PE (Windows)

      Структура PE-файла Windows: заголовки DOS и NT, таблица секций, .text/.data/.rdata, импорты и точка входа.

    3. Форматы исполняемых файлов: ELF (Linux)

      Структура ELF-файла Linux: заголовок, секции и сегменты, .text/.data/.rodata, символы и сравнение с PE.

  3. 3 Инструменты и подходы

    1. Статический и динамический анализ

      Разница между статическим анализом (без запуска) и динамическим (с запуском в отладчике), их плюсы, минусы и сочетание.

    2. Дизассемблеры: Ghidra, IDA Free, objdump

      Обзор бесплатных дизассемблеров: Ghidra с декомпилятором, IDA Free, командная objdump — что выбрать новичку.

    3. Отладчики: x64dbg и gdb

      Обзор отладчиков для динамического анализа: x64dbg для Windows и gdb для Linux, точки останова, регистры и шаг по коду.

  4. 4 Чтение ассемблера и первый анализ

    1. Узнаём условия и циклы в ассемблере

      Как выглядят if, while и for в ассемблере: cmp, условные переходы je/jne/jl и обратные jmp как признак цикла.

    2. Функции, вызовы и строки в дизассемблере

      Как узнать функцию по прологу и эпилогу, как читать call/ret и передачу аргументов, и где в бинаре лежат строки.

    3. strings и базовый анализ бинаря

      Первый поверхностный анализ файла: команды file, strings, поиск URL и сообщений, оценка перед глубоким разбором.

  5. 5 Практика: разбор crackme и отладка

    1. Работа в дизассемблере: граф, переименование, аннотации

      Эффективная навигация в Ghidra/IDA: граф потока управления, переименование функций и переменных, комментарии-аннотации.

    2. Разбор простого crackme: логика проверки

      Как устроена проверка пароля в учебном crackme: сравнение строк, длины, простые преобразования — на легальном примере.

    3. Динамический анализ в отладчике: точки останова, регистры, шаг

      Пошаговая отладка crackme: ставим breakpoint на проверку, читаем регистры, идём по шагам и наблюдаем реальные значения.

  6. 6 Продвинутые темы и путь в профессию

    1. Безопасный анализ малвари: песочница и IOC

      Как безопасно анализировать вредоносное ПО: изоляция и песочница, статические признаки, индикаторы компрометации (IOC).

    2. Упаковка, обфускация и анти-отладка (концептуально)

      Зачем программы защищаются: упаковщики, обфускация кода и приёмы анти-отладки — концептуальный обзор для понимания.

    3. Декомпиляция и чтение псевдо-C

      Декомпилятор Ghidra: как ассемблер превращается в читаемый псевдо-C, что декомпилятору удаётся, а что нет.

    4. Мобильный реверс (APK) — обзор

      Обзор реверса Android-приложений: структура APK, байткод Dalvik, smali, декомпиляция в Java и отличия от нативного реверса.

  7. 7 Защита своего кода и карьера

    1. Как защищать свой код от реверса

      Практические приёмы для разработчика: обфускация, защита секретов на сервере, обнаружение отладки и реалистичные ожидания.

    2. Путь в профессию: CTF, AppSec, malware analyst

      Карьера в реверсе: CTF reversing как старт, профессии malware analyst, AppSec и vulnerability researcher, и как развиваться легально.

  8. 8 Динамический анализ и продвинутая отладка

    1. Отладчики вглубь: gdb, x64dbg, точки останова

      Отладчики gdb и x64dbg для реверс-инжиниринга: точки останова и вотчпоинты, пошаговое выполнение, чтение регистров и стека в рантайме, наблюдение значений.

    2. Трассировка вызовов и поведения

      Трассировка программы: strace и ltrace концептуально, наблюдение системных и библиотечных вызовов, понимание поведения бинарника по его взаимодействию с ОС.

    3. Анти-отладка и анти-анализ (и как их замечать)

      Анти-отладка и анти-анализ концептуально: как программы детектируют отладчик и песочницу, зачем это нужно вредоносному ПО и как аналитик распознаёт такие проверки.

    4. Патчинг и модификация в учебных целях

      Учебный патчинг бинарника: как меняют поток выполнения на crackme и своих программах — NOP, инверсия условия перехода. Только на учебных стендах и своих файлах.

  9. 9 Анализ вредоносного ПО (безопасно, в песочнице)

    1. Безопасная лаборатория для анализа

      Как собрать изолированную лабораторию для анализа вредоносного ПО: отдельная ВМ, снапшоты, контролируемая сеть, правила безопасности аналитика и почему нельзя на рабочей машине.

    2. Статическая сортировка образца

      Статическая сортировка вредоносного образца без запуска: хеши и репутация (VirusTotal-подход), строки, импорты, энтропия как признак упаковки; Python-демо подсчёта энтропии.

    3. Динамическое поведение и индикаторы (IOC)

      Динамический анализ в песочнице: наблюдение за файлами, реестром и сетью, выделение индикаторов компрометации (IOC) для защиты и чтение sandbox-отчётов.

    4. Сигнатуры и детект: YARA

      Как пишут YARA-правила для обнаружения семейств вредоносного ПО: строки, условия, признаки упаковки и применение сигнатур в защите, SOC и threat hunting.

  10. 10 Обфускация, упаковка и распаковка

    1. Техники обфускации кода

      Что такое обфускация: переименование, мёртвый код, control-flow flattening, шифрование строк. Как это выглядит при анализе и зачем разработчики защищают код.

    2. Упаковщики: что это и как распознать

      Что такое упаковщики исполняемых файлов (UPX и др.), признаки упаковки: высокая энтропия и мало импортов, легитимное и вредоносное применение.

    3. Распаковка в учебных целях

      Концепция распаковки: как найти OEP, снять дамп распакованного образа из памяти, идея ручной распаковки UPX на своём бинаре — принцип без оружейности.

    4. Шифрование строк и расшифровка при анализе

      Почему программы прячут строки, как аналитик находит ключ и алгоритм расшифровки, Python-демо простого XOR-декодирования спрятанной строки.

  11. 11 Реверс на разных платформах

    1. Реверс .NET: байт-код и декомпиляция

      Почему .NET-сборки легко декомпилируются: IL/CIL и метаданные, инструменты ILSpy/dnSpy, что это значит для защиты своего кода и как помогает обфускация.

    2. Реверс Java и Android

      Реверс Java и Android: байт-код JVM и декомпиляция .class/.jar, формат APK и dex, smali, что аналитик извлекает и как защитить своё приложение — R8/ProGuard и вынос секретов.

    3. Прошивки и встроенные системы

      Основы реверса прошивок: откуда берётся образ, подход binwalk, файловые системы (squashfs/cramfs), поиск зашитых ключей и учёток — для аудита своих устройств.

    4. Мобильный реверс: основы анализа приложений

      Статический анализ мобильных приложений APK и IPA: структура пакета, ресурсы и строки, манифест и разрешения, поиск небезопасного хранения данных — для защиты своего приложения.