
Просмотрщик покрытия для реверс-инженеров
Lighthouse — это мощный исследователь покрытия кода для IDA Pro и Binary Ninja, предоставляющий исследователям ПО уникальные интерактивные средства для изучения карт выполнения нативных приложений без необходимости в символах или исходном коде.
Этот проект занял 2-е место в конкурсе плагинов IDA 2017 года и позже был номинирован на премию Pwnie Awards 2021 за вклад в индустрию исследования безопасности.
Особая благодарность @0vercl0k за вдохновение.
Lighthouse — это кроссплатформенный (Windows, macOS, Linux) плагин для Python 2/3. Он не требует сторонних зависимостей, что делает код как портативным, так и простым в установке.
Используйте приведённые ниже инструкции для вашего дизассемблера.
import idaapi, os; print(os.path.join(idaapi.get_user_idadir(), "plugins"))/plugins/ этого репозитория в указанный каталог.Lighthouse можно установить через менеджер плагинов Binary Ninja, поддерживается версия v3.5 и новее.
Edit -> Preferences -> Manage PluginsEnable в правом нижнем углу.После правильной установки в дизассемблере появятся несколько новых пунктов меню. Это точки входа для загрузки данных покрытия и начала работы с Lighthouse.
Lighthouse способен загружать несколько различных «разновидностей» данных покрытия. Чтобы сгенерировать данные покрытия, которые можно загрузить в Lighthouse, обратитесь к README в каталоге coverage этого репозитория.
Во время работы Lighthouse «отрисовывает» активные данные покрытия во всех доступных средствах просмотра кода дизассемблера. В частности, это применяется к окнам линейного дизассемблирования, графов и декомпилятора.
В Binary Ninja поддерживаются только линейное дизассемблирование, граф и представления IL. Поддержка отрисовки вывода декомпилятора в Binary Ninja будет добавлена в Lighthouse в ближайшем будущем по мере стабилизации этой возможности.
Обзор покрытия — это закрепляемый виджет, который открывается после загрузки покрытия в Lighthouse.
Этот интерактивный виджет предоставляет представление загруженных данных покрытия на уровне функций. Он также содержит ряд инструментов для управления загруженными данными и выполнения более продвинутых форм анализа покрытия.
Щелчок правой кнопкой мыши по таблице в обзоре покрытия вызывает контекстное меню с несколькими базовыми возможностями для извлечения информации из таблицы или манипулирования базой данных в рамках процесса реверс-инжиниринга.
Если вы считаете, что в это контекстное меню стоит добавить какие-либо другие действия, создайте issue, и они будут рассмотрены для будущего выпуска Lighthouse.
Загруженное покрытие и созданные пользователем композиции можно выбирать или удалять через выпадающий список покрытия.
Lighthouse может генерировать базовые HTML-отчёты о покрытии. Пример отчёта можно посмотреть здесь.
В нижней части окна обзора покрытия находится оболочка покрытия. Эту оболочку можно использовать для выполнения логических операций, которые объединяют или манипулируют загруженными наборами покрытия.
Эта возможность чрезвычайно полезна при изучении взаимосвязей выполнения программы между несколькими запусками. Иными словами, оболочку можно использовать для «сравнения» выполнения между наборами покрытия и извлечения более глубокого смысла, который иначе скрыт в шуме их отдельных частей.
Композиция покрытия, или Composing, как показано выше, достигается с помощью простой грамматики выражений и «сокращённых» символов покрытия (от A до Z) в оболочке композиции.
|, &, ^, -A, B, C, ..., Z, *(...)A и покрытия B:A & B
A:A - B
A или B, но не для C:(A | B) - C
Выражения могут быть произвольной длины или сложности, но вычисление композиции может происходить справа налево. Поэтому для потенциально неоднозначных выражений рекомендуется использовать скобки.