Реверсивный инжиниринг считается одним из наиболее сложных направлений в информационной безопасности (ИБ). В книге автор предлагает приоткрыть завесу тайны над этой темой и с помощью практических примеров рассмотреть, как работают приложения под ОС Windows, а также разобраться в том, как эксплуатировать уязвимости переполнения буфера, размещать свой код в выполнимых файлах, находить полезную информацию в дампах памяти и многое другое. Код практически любого приложения может содержать ошибки. Самый простой способ исправить эти ошибки – это найти в исходном коде проблемную команду или функцию и внести соответствующие исправления в код. Но что делать, когда по тем или иным причинам исходный код нам не доступен, как в случае с проприетарным ПО? Если у нас имеется только откомпилированный выполнимый файл – артефакт. Например, для выявления уязвимостей, недокументированных возможностей и т.д. В таком случае нам тоже потребуется обратная разработка. Результатом обратной разработки является построение детального алгоритма работы программы, а также выявление уязвимостей и других интересующих исследователя аспектов работы программного обеспечения. Таким образом, обратная разработка нужна тем, кто занимается поиском уязвимостей с целью улучшения защищенности программного обеспечения, – багхантерам. Также реверсивный инжиниринг требуется программистам, работающим с низкоуровневыми языками программирования (например, разработчикам драйверов), где без знания ассемблера не обойтись.
0x0cf11 Вступление
О пользе реверсинга
Зачем нужен реверсинг
О чем эта книга
Заключение к вступлению
Глава 1
0x00f13 О коде, инструментах и крякмиксах
Основы реверсинга
Регистры и стек
Флаги
Инструкции
Режимы адресации
Реальный режим
Защищенный режим
Многосегментная модель памяти
Длительный режим (Long Mode)
О реверсинге
Ассемблер и компиляторы
Отладчики и дизассемблеры
Только виртуализация
Основы реверсинга, начинаем ломать
О патчинге
Подведем промежуточные итоги
Пишем кейген
Виды механизмов защиты
Разбор крякми
Пишем кейген
Заключение
0x06f16 Переполняем и эксплуатируем
Переполнение буфера
0x05f1b Забираемся в чужие EXE’шники
Инъекции кода в выполнимые файлы
Суть проблемы
Подопытный код
Методы поиска уязвимостей
Метод белого ящика
Метод серого ящика
Метод черного ящика
Фаззинг
Подключаем отладчик
Готовый шелл-код
Прямой и обратный шелл
Генерируем прямой шелл
Генерируем обратный шелл
Заключение
0x04704 Свой код среди чужого
Инъекции процессов в Windows
Не только расширение...
MZ и другие
Сигнатура
Структура
Таблица импорта
Таблица экспорта
Таблица перемещений
Следы компиляторов
Прячемся в «пещере кода»
Заключение
Байты плохие и очень плохие
Пишем инжектор
Эксплуатируем
DLL-инъекция кода
Динамические библиотеки
Создаем свою DLL
Отражающая DLL-инъекция
Учимся отражать
Эксплуатируем
Инжектируем
Заглянем под капот
Mimikatz: инъекции для взрослых
Препарируем Mimikatz
Заключение
Глава 5
0x04b35 Мешаем отладке
Защищаемся от реверсинга
Антиотладка
IsDebuggerPresent
Полный PEB
Код смерти
Атака на отладчик
Родительский процесс
Подключение к процессу
Родительский процесс
Отладочные регистры
Скрываемся из TEB
Плагины для отладчика x64dbg
Плагины для сокрытия IDA Pro
Заключение
0x04d56 Прячемся в дебрях ОС
Прячемся в автозагрузку
Работа с реестром
Функции для работы с реестром
Раздел Startup
Ветка Run
Сервисы
Установка сервиса
Другой путь
И снова реестр
Скрытый отладчик
Запуск через обновления
Переселяем папки
Планировщик задач
Инъекция DLL в уже запущенный процесс
…И просто ярлыки
Заключение
Глава 7
0x04e97 Оконный реверсинг без ассемблера
Платформа .NET
Необходимые инструменты
Пример обфускации
Заключение
0x04e98 Разбираем упаковку
Упаковка и обфускация
0x04d59 Исследуем вредоносы
Анализ вредоносов
Виды вредоносов
Разбор обфусцированного крякми
Заключение
Об инструментах
Препарируем блокировщик
Препарируем шифровальщик
Заключение
Глава 10
0x04b3a ROP: видишь код? А он есть!
Код без кода
String-oriented programming
Sig return-oriented programming
Blind Return Oriented Programming
Аналогичные атаки
Эксплуатируем ROP
Заключение
0x0470b Кукушка против вредоносов
Песочницы
Cuckoo Sandbox
Заключение
Глава 12
0x05f04 Копаемся в памяти с помощью Volatility
Форензика
Статический анализ
Динамический анализ
Заключение
0x06f01 Полезный инструментарий Remnux
0x00f00 Заключение
Дистрибутив REMnux
Установка REMnux
Вариант из контейнера
Начинаем анализ
Стереть нельзя отправить
Cutter
Заключение
0x0cf00 Приложения
Приложение № 1. Инструкции языка ассемблера
0x14f00 Библиография
Приложение № 2. Горячие клавиши x64dbg
Приложение № 3. Горячие клавиши IDA Pro
О пользе реверсинга
Зачем нужен реверсинг
О чем эта книга
Заключение к вступлению
Глава 1
0x00f13 О коде, инструментах и крякмиксах
Основы реверсинга
Регистры и стек
Флаги
Инструкции
Режимы адресации
Реальный режим
Защищенный режим
Многосегментная модель памяти
Длительный режим (Long Mode)
О реверсинге
Ассемблер и компиляторы
Отладчики и дизассемблеры
Только виртуализация
Основы реверсинга, начинаем ломать
О патчинге
Подведем промежуточные итоги
Пишем кейген
Виды механизмов защиты
Разбор крякми
Пишем кейген
Заключение
0x06f16 Переполняем и эксплуатируем
Переполнение буфера
0x05f1b Забираемся в чужие EXE’шники
Инъекции кода в выполнимые файлы
Суть проблемы
Подопытный код
Методы поиска уязвимостей
Метод белого ящика
Метод серого ящика
Метод черного ящика
Фаззинг
Подключаем отладчик
Готовый шелл-код
Прямой и обратный шелл
Генерируем прямой шелл
Генерируем обратный шелл
Заключение
0x04704 Свой код среди чужого
Инъекции процессов в Windows
Не только расширение...
MZ и другие
Сигнатура
Структура
Таблица импорта
Таблица экспорта
Таблица перемещений
Следы компиляторов
Прячемся в «пещере кода»
Заключение
Байты плохие и очень плохие
Пишем инжектор
Эксплуатируем
DLL-инъекция кода
Динамические библиотеки
Создаем свою DLL
Отражающая DLL-инъекция
Учимся отражать
Эксплуатируем
Инжектируем
Заглянем под капот
Mimikatz: инъекции для взрослых
Препарируем Mimikatz
Заключение
Глава 5
0x04b35 Мешаем отладке
Защищаемся от реверсинга
Антиотладка
IsDebuggerPresent
Полный PEB
Код смерти
Атака на отладчик
Родительский процесс
Подключение к процессу
Родительский процесс
Отладочные регистры
Скрываемся из TEB
Плагины для отладчика x64dbg
Плагины для сокрытия IDA Pro
Заключение
0x04d56 Прячемся в дебрях ОС
Прячемся в автозагрузку
Работа с реестром
Функции для работы с реестром
Раздел Startup
Ветка Run
Сервисы
Установка сервиса
Другой путь
И снова реестр
Скрытый отладчик
Запуск через обновления
Переселяем папки
Планировщик задач
Инъекция DLL в уже запущенный процесс
…И просто ярлыки
Заключение
Глава 7
0x04e97 Оконный реверсинг без ассемблера
Платформа .NET
Необходимые инструменты
Пример обфускации
Заключение
0x04e98 Разбираем упаковку
Упаковка и обфускация
0x04d59 Исследуем вредоносы
Анализ вредоносов
Виды вредоносов
Разбор обфусцированного крякми
Заключение
Об инструментах
Препарируем блокировщик
Препарируем шифровальщик
Заключение
Глава 10
0x04b3a ROP: видишь код? А он есть!
Код без кода
String-oriented programming
Sig return-oriented programming
Blind Return Oriented Programming
Аналогичные атаки
Эксплуатируем ROP
Заключение
0x0470b Кукушка против вредоносов
Песочницы
Cuckoo Sandbox
Заключение
Глава 12
0x05f04 Копаемся в памяти с помощью Volatility
Форензика
Статический анализ
Динамический анализ
Заключение
0x06f01 Полезный инструментарий Remnux
0x00f00 Заключение
Дистрибутив REMnux
Установка REMnux
Вариант из контейнера
Начинаем анализ
Стереть нельзя отправить
Cutter
Заключение
0x0cf00 Приложения
Приложение № 1. Инструкции языка ассемблера
0x14f00 Библиография
Приложение № 2. Горячие клавиши x64dbg
Приложение № 3. Горячие клавиши IDA Pro
Скачать с libgen
или с DamageLiB
Последнее редактирование:
))