Gepetto - это плагин Python, который использует различные крупные языковые модели, чтобы обеспечить значение для функций, декомпилированных IDA Pro (≥ 7,4). Он может использовать их, чтобы объяснить, что делает функция, и автоматически переименовать свои переменные. Вот простой пример того, какие результаты он может предоставить за секунды:
Просто бросьте этот скрипт ( gepetto.py
, а также gepetto/
Polder) в папку плагинов IDA ( $IDAUSR/plugins
). По умолчанию, в Windows это должно быть %AppData%Hex-RaysIDA Proplugins
(вам может потребоваться его создать).
Вам нужно будет добавить необходимые пакеты в установку Python от IDA для работы сценария. Найдите, какой интерпретатор IDA использует путем проверки следующего ключа реестра: ComputerHKEY_CURRENT_USERSoftwareHex-RaysIDA
(по умолчанию в Windows: %LOCALAPPDATA%ProgramsPythonPython39
). Наконец, с соответствующим переводчиком просто запустите:
[/path/to/python] -m pip install -r requirements.txt
gepetto/config.ini
) и добавить свои собственные клавиши API. Для Openai это можно найти на этой странице. Обратите внимание, что запросы API обычно не являются бесплатными (хотя и не очень дороги), и вам нужно будет настроить метод оплаты с соответствующим поставщиком.
Добавление поддержки дополнительных моделей не должно быть слишком сложным, при условии, что любой поставщик вы рассматриваете, выявляет API, аналогичный Openai. Посмотрите на папку gepetto/models
для вдохновения или откройте проблему, если вы не можете понять это.
После того, как плагин будет установлен должным образом, вы сможете вызвать его из контекстного меню окна псевдокода IDA, как показано на скриншоте ниже:
Переключение между моделями, поддерживаемыми Gepetto из меню «Редактировать> gepetto:
Gepetto также предоставляет интерфейс CLI, который вы можете использовать, чтобы задать вопросы LLM непосредственно из IDA. Обязательно выберите Gepetto
в панели ввода:
Доступны следующие горячие клавиши:
Ctrl
+ Alt
+ G
Ctrl
+ Alt
+ R
Первоначальное тестирование показывает, что запрос на лучшие имена работает лучше, если вы сначала попросите объяснить функцию - я предполагаю, что модель затем использует свой собственный комментарий, чтобы сделать более точные предложения. В ответах ИИ есть элемент случайности. Если по какой -то причине первоначальный ответ, который вы получаете, вам не подходит, вы всегда можете запустить команду снова.
Вы можете изменить язык Gepetto, редактируя локаль в конфигурации. Например, чтобы использовать плагин на французском языке, вы просто добавите:
[Gepetto]
LANGUAGE = " fr_FR "
Выбранный локаль должен соответствовать именам папок в gepetto/locales
. Если желаемый язык недоступен, вы можете внести свой вклад в проект, добавив его самостоятельно! Создайте новую папку для желаемой локали (пример: gepetto/locales/de_DE/LC_MESSAGES/
) и откройте новый запрос на привлечение с обновленным файлом .po
, который вы можете создать, копируя и редактируя gepetto/locales/gepetto.pot
(замените все строки, начинающиеся с msgstr
с локализованной версией).