О проекте
Это плагин для IDA, расширяющий возможности реверс-инжиниринга UEFI. Основан на ida-efitools с рядом исправлений и новых функций.
Работает как с Python 2, так и с Python 3. Поддерживает устаревшие версии IDA Pro 7.x без каких-либо гарантий.
Возможности
- Определение GUID
- Распространение структур (регистры, перекрёстные ссылки, переменные стека)
- Идентификация протоколов и интерфейсов
- Инициализация неизвестных протоколов
Расширенные возможности
- Может использоваться как плагин и как скрипт.
- Автоматически импортирует пользовательские C-объявления (структуры, перечисления, объединения, typedef) из каталога
efitools2/types
- Устанавливает права доступа к сегменту кода как RWE (для исправления некорректного удаления мёртвого кода в представлении декомпилятора)
Возможности только для плагина
- Предоставляет возможность синхронизации внешних типов
- Выводит и копирует в буфер обмена выбранный EFI_GUID из представления дизассемблера
- Извлекает EFI_GUID из присваиваний локальным переменным
Важные замечания
- behemoth.til отклонён в пользу uefi.til и uefi64.til из IDA
- Не используйте uefi(64).til из IDA 7.3, так как в нём есть ошибки
Использование
Как скрипт
Просто запустите efitools2/efitools.py из IDA.
Как плагин
Горячие клавиши:
- Ctrl-Alt-E — выполняет всю магию
- Ctrl-Alt-G (на данных) — выводит и копирует EFI_GUID в текущей позиции курсора
- Ctrl-Alt-G (на коде) — извлекает и копирует EFI_GUID из присваивания локальной переменной (установите курсор на присваивание
EFI_GUID.data1)
- F5 (в окне Local Types) — синхронизирует локальные типы из папки
types
Настройка
- Горячие клавиши можно настроить в файле
ida-efitool2.py.
- Несколько предпочтений можно найти в файле
efitools2/efitools.py.
- Пользовательские GUID следует размещать в файле
efitools2/guids/custom.ini.
- Пользовательские протоколы следует размещать в папке
efitools2/types. См. доступные примеры.
Как экспортировать пользовательские типы
Это встроенная функция IDA. Просто откройте контекстное меню для типа в окне Local Types и выберите действие 'Export to header file'.
Предварительные требования
pip install future — Только для Python 2.
pip install clipboard — Если вы хотите автоматически копировать содержимое EFI_GUID в буфер обмена.
Установка плагина
Просто скопируйте файл ida-efitools2.py и папку efitools2 в каталог плагинов IDA.
Благодарности
@snare за исходную кодовую базу ida-efiutils.
@danse-macabre за переписанный с нуля ida-efitools.
@djpohly, @al3xtjames, @vutung2311 за вклад (форки).
@p-state (я) за то, что вдохнул в это новую жизнь.