
Плагин для изучения покрытия кода в Ghidra
Разработано Austin Peavy - https://github.com/aus10pv
Выпущено как открытое программное обеспечение компанией NCC Group Plc - https://www.nccgroup.com/
Выпущено под лицензией Apache 2.0 (см. LICENSE для получения дополнительной информации)

Cartographer — это плагин для Ghidra, предназначенный для картографирования покрытия кода, позволяющий исследователям наблюдать, какие части программы были выполнены, без необходимости наличия исходного кода.
Последнюю стабильную версию Cartographer можно загрузить со страницы Releases.
File -> Install Extensions...После загрузки плагина в окне CodeBrowser появятся дополнительные элементы управления для работы с данными покрытия кода.
Файлы покрытия кода можно загрузить через меню Tools: Tools -> Code Coverage -> Load Code Coverage File(s)...
Когда файл покрытия кода загружен, все данные покрытия немедленно подсвечиваются в представлении Listing и в представлении Decompiler.

Подробная информация о данных покрытия для каждой функции доступна в окне Code Coverage.
Окно Code Coverage можно открыть, перейдя в Window -> Code Coverage, или нажав Ctrl-Shift-C в Windows (Cmd-Shift-C в Mac).
В этом окне отображаются различные сведения о каждой функции в программе:
Щелчок по любой функции приведёт к переходу к указанной функции в представлениях Listing и Decompiler.

Поле ввода Filter можно использовать для поиска функции по имени.
Любые данные, отображаемые в таблице покрытия, можно использовать в качестве фильтра столбца.

Раскрывающийся список в правом нижнем углу окна Code Coverage можно использовать для быстрого и простого переключения между загруженными файлами покрытия кода.

Текстовое поле в нижней части окна Code Coverage можно использовать для выполнения логических операций над загруженными файлами покрытия кода.
Это может быть чрезвычайно полезно для изучения различий и сходств между разными запусками программы.

Ниже приведены логические операторы, которые можно использовать в парсере выражений.
&: получает только код, исполненный в обоих покрытиях|: получает любой код, исполненный в любом из покрытий^: получает только исполненный код, который различается между покрытиями-: получает только исполненный код, который является уникальным для левого покрытияПокрытия обозначаются их буквенными идентификаторами в раскрывающемся списке, например A, B, XY и т.д.
Каждая логическая операция группируется с помощью круглых скобок, и выражения могут иметь любую длину и сложность.
Показать код, который был исполнен в обоих покрытиях A и B:
A & B
Показать исполненный код, который различался между покрытиями A и B:
A ^ B
Показать код, который был исполнен только в B:
B - A
Объединить все данные покрытия, найденные в A и B, затем найти любые различия с C:
(A | B) ^ C
Для сборки Cartographer из исходного кода можно использовать Gradle.
Клонируйте репозиторий Cartographer на GitHub.
$ git clone https://github.com/nccgroup/Cartographer.git
Перейдите в репозиторий и выполните сборку с помощью gradle.
$ cd Cartographer
$ gradle -PGHIDRA_INSTALL_DIR=<ghidra_install_dir>
<ghidra_install_dir> на путь к вашей локальной установке Ghidra.После сборки ZIP-файл плагина будет находиться в папке dist/.
Если вы нашли ошибку в Cartographer, пожалуйста, создайте issue через GitHub.
Изначально вдохновлено проектом Lighthouse - https://github.com/gaasedelen/lighthouse