
Воркшоп по реверс-инжинирингу прошивок
Этот репозиторий содержит слайды и практические материалы для воркшопа Emproof по реверс-инжинирингу прошивок, представленного на ScapyCon Automotive 2025. Воркшоп рассчитан на техническую аудиторию с минимальным опытом в безопасности и обучает основам на практических, самодостаточных задачах. Темы включают:
Если вам это интересно, также загляните в серию технических вебинаров Emproof с дополнительными упражнениями и записями сессий.
Содержание воркшопа разработано и организовано Тимом Блазитко при поддержке Симран Катпалии.
Чтобы настроить окружение, склонируйте репозиторий:
git clone https://github.com/emproof-com/workshop_firmware_reverse_engineering
cd workshop_firmware_reverse_engineering
Для ряда задач нам требуется среда выполнения AArch64 Linux. Мы предоставляем Docker-контейнер на основе Kali Linux с предустановленными распространёнными инструментами (например, GNU Binutils, Binwalk). Это унифицирует окружение в Linux, Windows и macOS — независимо от архитектуры процессора хоста. Чтобы запустить контейнер и войти в оболочку, выполните:
./docker_run.sh
Примечание: Первый запуск может занять некоторое время на сборку образа.
Примечание (архитектура): Сервис Docker Compose задаёт
platform: "linux/arm64".
На хостах x86_64 (Intel macOS/Windows/Linux) Docker Desktop будет запускать образ под эмуляцией, поэтому первая сборка и запуск могут быть медленнее — это ожидаемо. На нативных хостах ARM64 (Apple Silicon, ARM-серверы) он работает нативно и быстрее.
Примечание: Docker-контейнер также может запускать ARMv7 (armhf) бинарные файлы. Мы устанавливаем armhf runtime (динамический загрузчик + библиотеки) в образ и регистрируем обработчики binfmt для
aarch64иarmчерез стартовый скрипт.
Кроме того, установите следующие графические инструменты на вашем хосте для интерактивных задач по реверс-инжинирингу (они не включены в контейнер):
Оба инструмента доступны для Windows, Linux и macOS.
Примечание: Binary Ninja Free не поддерживает AArch64. Для анализа AArch64 используйте Ghidra (или лицензированную сборку Binary Ninja). Поэтому в некоторых лабораторных работах поставляется дополнительный ARMv7 бинарный файл (
*.armv7) специально для Binary Ninja Free; их также можно запускать в том же контейнере.
Каждая задача самодостаточна и находится в tasks/<name>/, и включает:
samples/ — бинарные файлы (а иногда и исходный код), используемые в упражненииtask.md — задание с пошаговыми инструкциями и подсказкамиЗадачи можно выполнять независимо, но мы предлагаем рекомендуемый порядок (перечислен ниже), который постепенно повышает сложность и знакомит с новыми техниками. Большинство образцов ориентированы на ARMv7 (Thumb/ARM32) или AArch64; где необходимо, в примечаниях к задачам указаны архитектура, требуемые инструменты и особые потребности среды выполнения.
tasks/hello_world: основы ELF-файлов и анализа метаданных; первые шаги в Ghidra / Binary Ninja.
tasks/license_check: извлечение захардкоженных секретов / разблокировка функций; базовый патчинг для обхода проверок (крэкинг).
tasks/game: простая игра «угадай число»; разберитесь в логике и взломайте пробный режим, чтобы получить полный.
tasks/keygenning_1: реверсирование проверки лицензии и написание минимального кейгена для генерации валидных серийников.
tasks/keygenning_2: немного более сложная задача на кейгенинг (соли/ключи, hex-кодирование).
tasks/string_encryption: бинарный файл с зашифрованными строками (часто встречается во вредоносном ПО); определите дешифратор и восстановите строки статически.
tasks/mirai: встраиваемое вредоносное ПО, использующее процедуру дешифрования строк; ориентируйтесь в большой кодовой базе, выявляйте интересные конструкции и работайте с обфусцированными строками.
tasks/embedded_linux_1: прошивка встраиваемого Linux с файловой системой; распакуйте, исследуйте и взломайте данные для входа в Linux (в стиле CTF).
tasks/embedded_linux_2: аналогично, но найдите и проанализируйте скрытый бинарный файл, которого там не должно быть.
tasks/car_demo: анализ bare-metal прошивки: определите архитектуру, плату, карту памяти, артефакты тулчейна; извлеките учётные данные Wi-Fi и конечные точки протокола.
Если не указано иное, все материалы воркшопа в этом репозитории распространяются под лицензией GNU General Public License, версия 2 (GPL-2.0). Полный текст см. в LICENSE.
Некоторые сторонние / внешние образцы исключены из GPL и предоставлены только для анализа/обучения (без распространения). Это:
Примечание: Если в подкаталоге есть собственный файл лицензии или заголовок, эта лицензия имеет приоритет для содержимого данного подкаталога.
tasks/iot_diag: дамп bare-metal прошивки диагностического инструмента; восстановите раскладку памяти по даташиту, затем найдите пароль для разблокировки режима диагностики.
tasks/crypto_detection: AArch64 бинарный файл, выполняющий криптографические операции с захардкоженным AES-ключом; найдите вызов EVP и вычислите ключ/IV, чтобы расшифровать данные без программы.
tasks/license_check_anti_patching: анти-патчинг через контрольную сумму кода; разберитесь в CRC-защите и изучите способы её обхода.
tasks/fibonacci_obfuscation: чистая и обфусцированная реализации чисел Фибоначчи (флаттенинг switch, computed goto, непрозрачные предикаты, арифметическая обфускация, небольшая VM); разберитесь в этих техниках и нормализуйте их.