GHIDRA. Полное руководство

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

Платформа Ghidra, ставшая итогом более десяти лет работы в Агентстве национальной безопасности, была разработана для решения наиболее трудных задач обратной разработки (Reverse Engeneering – RE). После раскрытия исходного кода этого инструмента, ранее предназначавшегося только для служебного пользования, один из лучших в мире дизассемблеров и интуитивно понятных декомпиляторов оказался в руках всех специалистов, стоящих на страже кибербезопасности. Эта книга, рассчитанная равно на начинающих и опытных пользователей, поможет вам во всеоружии встретить задачу RE и анализировать файлы, как это делают профессионалы.

Author(s): Крис Игл, Кара Нэнс
Edition: 1
Publisher: ДМК Пресс
Year: 2022

Language: Russian
Commentary: Vector PDF
Pages: 750
City: М.
Tags: Malware Analysis; Dissasembly; Obfuscation; Reverse Engineering; Binary Analysis; Ghidra; Scripting

ОБ АВТОРАХ
О ТЕХНИЧЕСКОМ РЕЦЕНЗЕНТЕ
КРАТКОЕ СОДЕРЖАНИЕ
ОГЛАВЛЕНИЕ
БЛАГОДАРНОСТИ
ВВЕДЕНИЕ
Часть I. Введение
1
Введение в дизассемблирование
Теория дизассемблирования
Что делает дизассемблер
Зачем нужен дизассемблер
Анализ вредоносного ПО
Анализ на уязвимость
Анализ интероперабельности
Проверка компилятора
Отображение команд в процессе отладки
Как работает дизассемблер
Базовый алгоритм дизассемблирования
Алгоритм линейной развертки
Алгоритм рекурсивного спуска
Резюме
2
Обратная разработка и инструменты дизассемблирования
Средства классификации
file
PE Tools
PEiD
Обзорные инструменты
nm
ldd
objdump
otool
dumpbin
c++filt
Инструменты глубокой инспекции
strings
Дизассемблеры
Резюме
3
Первое знакомство с Ghidra
Лицензионная политика Ghidra
Версии Ghidra
Ресурсы поддержки Ghidra
Скачивание Ghidra
Установка Ghidra
Запуск Ghidra
Резюме
Часть II. Основы использования Ghidra
4
Начало работы с Ghidra
Запуск Ghidra
Создание нового проекта
Загрузка файла в Ghidra
Использование простого двоичного загрузчика
Анализ файлов в Ghidra
Результаты автоматического анализа
Поведение рабочего стола во время начального анализа
Сохранение работы и выход
Советы по организации рабочего стола Ghidra
Резюме
5
Отображение данных в  Ghidra
Браузер кода
Окна браузера кода
Окно листинга
Создание дополнительных окон дизассемблера
Представление графа функции в Ghidra
Окно деревьев программы
Окно дерева символов
Импортируемые объекты
Экспортируемые объекты
Функции
Метки
Классы
Пространства имен
Окно диспетчера типов данных
Окно консоли
Окно декомпилятора
Другие окна Ghidra
Окно байтов
Окно определенных данных
Окно определенных строк
Окна таблицы символов и ссылок на символы
Окно карты памяти
Окно графа вызовов функции
Резюме
6
Дизассемблирование в Ghidra
Навигация по листингу дизассемблера
Имена и метки
Навигация в Ghidra
Перейти к
История навигации
Кадры стека
Механизмы вызова функций
Соглашения о вызове
Дополнительные сведения о кадре стека
Размещение локальных переменных
Примеры кадров стека
Представления стека в Ghidra
Анализ кадров стека в Ghidra
Кадры стека в листинге дизассемблера
Анализ кадра стека с помощью декомпилятора
Локальные переменные как операнды
Редактор кадра стека в Ghidra
Поиск
Поиск по тексту программы
Резюме
7
Управление дизассемблированием
Манипулирование именами и метками
Переименование параметров и локальных переменных
Переименование меток
Добавление новой метки
Редактирование меток
Удаление метки
Навигация по меткам
Комментарии
Концевые комментарии
Предварительные и заключительные комментарии
Вводные комментарии
Повторяемые комментарии
Комментарии для параметров и локальных переменных
Аннотации
Базовые преобразования кода
Изменение параметров отображения кода
Форматирование операндов команд
Манипулирование функциями
Преобразование данных в код (и наоборот)
Основы преобразования данных
Задание типов данных
Работа со строками
Определение массивов
Резюме
8
Типы данных и структуры данных
В чем смысл этих данных?
Распознавание структур данных в коде
Доступ к элементам массива
Доступ к полям структуры
Массивы структур
Создание структур в Ghidra
Создание новой структуры
Редактирование полей структуры
Наложение структур
Введение в обратную разработку кода на C++
Указатель this
Виртуальные функции и vf-таблицы
Жизненный цикл объекта
Декорирование имен
Идентификация типа во время выполнения
Отношения наследования
Справочные материалы по обратной разработке кода на C++
Резюме
9
Перекрестные ссылки
Базовые сведения о ссылках
Перекрестные (обратные) ссылки
Пример анализа ссылок
Окна управления ссылками
Окно перекрестных ссылок
Ссылки на
Ссылки на символы
Дополнительные способы работы со ссылками
Резюме
10
Графы
Простые блоки
Графы функций
Графы вызовов функций
Деревья
Резюме
Часть III. Поставить Ghidra себе на службу
11
Коллективная обратная разработка программ
Коллективная работа
Подготовка сервера Ghidra
Разделяемые проекты
Создание разделяемого проекта
Управление проектом
Меню окна проекта
Меню File
Меню Edit
Меню Project
Репозиторий проекта
Управление версиями
Пример
Резюме
12
Настройка Ghidra
Браузер кода
Реорганизация окон
Редактирование параметров инструментов
Редактирование параметров инструмента
Специальные средства редактирования для некоторых инструментов
Сохранение конфигурации браузера кода
Окно проекта в Ghidra
Меню Tools
Рабочие пространства
Резюме
13
Расширение взгляда на мир Ghidra
Импорт файлов
Анализаторы
Модели слов
Типы данных
Создание новых архивов типов данных
Идентификаторы функций
Плагин Function ID
Пример применения плагина Function ID: UPX
Пример применения плагина Function ID: профилирование статической библиотеки
Резюме
14
Основы написания скриптов для Ghidra
Диспетчер скриптов
Окно диспетчера скриптов
Панель инструментов диспетчера скриптов
Разработка скриптов
Написание скриптов на Java (не JavaScript!)
Пример редактирования скрипта: поиск по регулярному выражению
Скрипты на Python
Поддержка других языков
Введение в Ghidra API
Интерфейс Address
Интерфейс Symbol
Интерфейс Reference
Класс GhidraScript
Функции манипулирования программой
Класс Program
Интерфейс Function
Интерфейс Instruction
Примеры скриптов Ghidra
Пример 1: перечисление функций
Пример 2: перечисление команд
Пример 3: перечисление перекрестных ссылок
Пример 4: нахождение вызовов функции
Пример 5: эмуляция поведения языка ассемблера
Резюме
15
Eclipse и GhidraDev
Eclipse
Интеграция с Eclipse
Запуск Eclipse
Редактирование скриптов в Eclipse
Меню GhidraDev
GhidraDevNew
Навигация в обозревателе пакетов
Пример: проект модуля анализатора
Шаг 1: постановка задачи
Шаг 2: создать модуль в Eclipse
Шаг 3: написать анализатор
Шаг 4: протестировать анализатор в Eclipse
Шаг 5: добавить анализатор в Ghidra
Шаг 6: тестирование анализатора в Ghidra
Резюме
16
Необслуживаемый режим Ghidra
Приступая к работе
Шаг 1: запуск Ghidra
Шаги 2 и 3: создать новый проект Ghidra в указанном месте
Шаг 4: импортировать файл в проект
Шаги 5 и 6: автоматический анализ файла, сохранение и выход
Флаги и параметры
Написание скриптов
HeadlessSimpleROP
Автоматизированное создание базы данных FidDb
Резюме
Часть IV. Дополнительные темы
17
Загрузчики Ghidra
Анализ неизвестного файла
Загрузка PE-файла Windows вручную
Пример 1: модуль загрузчика SimpleShellcode
Шаг 0: шаг назад
Шаг 1: поставить задачу
Шаг 2: создать модуль в Eclipse
Шаг 3: разработать загрузчик
Шаг 4: добавить загрузчик в Ghidra
Шаг 5: протестировать загрузчик в Ghidra
Пример 2: простой загрузчик шелл-кода из исходных файлов
Обновление 1: изменить ответ на опрос импортера
Обновление 2: найти шелл-код в исходном коде
Обновление 3: преобразовать шелл-код в байтовые значения
Обновление 4: загрузить преобразованный байтовый массив
Результаты
Пример 3: простой загрузчик шелл-кода в формате ELF
Организационные мероприятия
Формат заголовков ELF
Определение поддерживаемых спецификаций загрузки
Загрузить содержимое файла в Ghidra
Отформатировать байты данных и добавить точку входа
Файлы определений языков
Opinion-файлы
Результаты
Резюме
18
Процессорные модули в Ghidra
Знакомство с процессорным модулем Ghidra
Процессорные модули в Eclipse
SLEIGH
Руководства по процессорам
Модификация процессорного модуля Ghidra
Постановка задачи
Пример 1: добавление команды в процессорный модуль
Пример 2: модификация команды в процессорном модуле
Вариант 1: записать в EAX константу
Пример 3: добавление регистра в процессорный модуль
Резюме
19
Декомпилятор Ghidra
Анализ с помощью декомпилятора
Параметры анализа
Окно декомпилятора
Пример 1: редактирование в окне декомпилятора
Пример 2: функции, не возвращающие управление
Пример 3: автоматизированное создание структуры
Резюме
20
Зависимость от компилятора
Высокоуровневые конструкции
Предложения switch
Пример: сравнение компиляторов gcc и Microsoft C/C++
Параметры компилятора
Пример 1: оператор деления по модулю
Пример 2: тернарный оператор
Пример 3: встраивание функций
Реализация зависящих от компилятора особенностей C++
Перегрузка функций
Реализации RTTI
Нахождение функции main
Пример 1: от _start к main с компилятором gcc для Linux x86-64
Пример 2: от _start к main с компилятором clang для FreeBSD x86-64
Пример 3: от _start к main с компилятором Microsoft’s C/C++
Резюме
Дополнительные темы
Часть V. РЕАЛЬНЫЕПРИЛОЖЕНИЯ
21
Анализ обфусцированного кода
Противодействие обратной разработке
Обфускация
Методы противодействия статическому анализу
Обфускация импортированной функции
Методы противодействия динамическому анализу
Статическая деобфускация двоичных файлов в Ghidra
Скриптовая деобфускация
Эмуляторная деобфускация
Резюме
22
Изменение двоичного кода
Планирование заплаты
Поиск того, что нуждается в изменении
Поиск в памяти
Поиск прямых ссылок
Поиск командных паттернов
Поиск конкретных типов поведения
Наложение заплаты
Внесение простых изменений
Внесение нетривиальных изменений
Экспорт файлов
Форматы экспорта из Ghidra
Двоичный формат экспорта
Экспорт с применением скрипта
Пример: латание двоичного файла
Резюме
23
Определение разности двоичных файлов и отслеживание версий
Разность двоичных файлов
Инструмент Program Diff
Пример: объединение двух проанализированных файлов
Сравнение функций
Окно сравнения функций
Пример: сравнение криптографических функций
Отслеживание версий
Концепции, относящиеся к отслеживанию версий
Резюме
Ghidra для пользователей IDA
Основы
Создание базы данных
Основные окна и навигация
Дерево символов
Скрипты
Резюме
Предметный указатель
Предметный указатель