Расширение экспорта объектных файлов для Ghidra
Это расширение Ghidra позволяет экспортировать части программы в виде объектных файлов. Эти объектные файлы содержат действительные метаданные (символы, таблицы перемещения…) и поэтому могут быть повторно использованы напрямую цепочкой инструментов для дальнейшей обработки.
Варианты использования включают в себя:
- Расширенное двоичное исправление за счет использования компоновщика для объединения исходных и измененных частей вместе вместо выполнения этой работы вручную;
- Портирование программного обеспечения путем изоляции системно-независимого кода от программы и замены остального;
- Преобразование программ или объектных файлов из одного формата файлов в другой;
- Создание библиотек путем извлечения частей программы и повторного использования их в другом контексте;
- Проекты декомпиляции путем разделения программы на несколько объектных файлов и повторной реализации стиля «Корабль Тезея» ;
- …
Матрица поддерживаемых архитектур набора команд и объектных файлов:
Здание (CLI)
- Клонировать этот репозиторий;
- Определите переменную среды
GHIDRA_INSTALL_DIR
, чтобы она указывала на каталог установки Ghidra; - Запустите
gradle buildExtension
.
Архив расширения Ghidra будет создан внутри каталога dist/
.
Установка
- Загрузите расширение со страницы релизов или создайте его локально;
- Установите расширение в свой экземпляр Ghidra, выбрав
File > Install Extensions…
; - Включите плагин
RelocationTableSynthesizedPlugin
, выбрав File > Configure
в окне CodeBrowser.
Использование
- Выберите набор адресов в представлении «Список»;
- Запустите анализатор
Relocation table synthesizer
(доступен в одноразовом режиме); - Вызовите экспортер перемещаемых объектных файлов, выбрав
File > Export Program…
Восстановленные перемещения можно просмотреть с помощью Window > Relocation table (synthesized)
.
- ️ Для работы анализатора синтезатора таблицы перемещения используется полностью заполненная база данных Ghidra (с правильно объявленными символами, типами данных и ссылками). Неверная или отсутствующая информация может привести к нарушению или необнаружению перемещений во время анализа.
- ️ Экспортеры объектных файлов в своей работе полагаются на результаты анализатора синтезатора таблицы перемещения . В случае сомнений запустите этот анализатор непосредственно перед экспортом объектного файла , чтобы убедиться, что содержимое таблицы перемещения соответствует текущему состоянию программы.
Как это работает?
Объектные файлы состоят из трех частей:
- Байты перемещаемого раздела ;
- Таблица символов;
- Таблица переезда.
Когда компоновщик вызывается для создания исполняемого файла из группы объектных файлов, он:
- Выложить их разделы в памяти;
- Вычислить адреса символов в виртуальном адресном пространстве;
- Примените перемещения на основе конечных адресов символов к байтам раздела.
Обычно после этого процесса таблица перемещения отбрасывается, как и таблица символов, если символы отладки не сохраняются, оставляя только неперемещаемые байты раздела. Однако путем тщательного анализа эти данные можно воссоздать, что позволяет нам затем эффективно разделить программу обратно на объектные файлы.