
Плагин для IDA, который обращается к языковым моделям, чтобы ускорить реверс-инжиниринг.
Gepetto — это плагин для Python, который использует различные большие языковые модели, чтобы придать смысл функциям, декомпилированным с помощью IDA Pro (≥ 7.6). Он может задействовать их, чтобы объяснить, что делает функция, и автоматически переименовывать её переменные. Вот простой пример того, какие результаты он может выдать всего за несколько секунд:

Самый простой способ установить Gepetto — использовать инструмент командной строки Hex-Rays (hcli):
pip install ida-hcli
hcli plugin install gepetto
Это автоматически установит плагин в ваш пользовательский каталог IDA.
В качестве альтернативы вы можете установить плагин вручную:
gepetto.py, а также папку gepetto/) в папку плагинов IDA ($IDAUSR/plugins).%APPDATA%\Hex-Rays\IDA Pro\plugins\~/.idapro/plugins/~/.idapro/plugins/Computer\HKEY_CURRENT_USER\Software\Hex-Rays\IDA (по умолчанию в Windows: %LOCALAPPDATA%\Programs\Python\Python39).[/path/to/python] -m pip install -r requirements.txt
Gepetto хранит свою конфигурацию в вашем пользовательском каталоге IDA, поэтому она сохраняется при обновлении плагина:
%APPDATA%\Hex-Rays\IDA Pro\cfg\gepetto\config.ini~/.idapro/cfg/gepetto/config.iniПри первом запуске плагин копирует туда gepetto/config.ini и сообщает
вам путь в консоли. После этого копия, поставляемая с плагином, является
лишь шаблоном — редактируйте ту, что находится в вашем пользовательском каталоге. Задайте GEPETTO_CONFIG_DIR,
чтобы полностью переопределить расположение.
Добавьте свои API-ключи в этот файл или передайте их через переменные окружения, указанные в нём. Для OpenAI ключ можно создать на этой странице. Обратите внимание, что API-запросы обычно не бесплатны (хотя и не очень дороги), и вам потребуется настроить способ оплаты у соответствующего провайдера.
Gepetto загружает провайдеров из трёх мест, причём каждый следующий переопределяет предыдущий при совпадении
имени в меню: модули, поставляемые в gepetto/models/, затем любой .py-файл в
$IDAUSR/cfg/gepetto/providers/, затем любой установленный дистрибутив, объявляющий
точку входа gepetto.providers. Переопределения объявляются в консоли, так что вы
можете заменить встроенного провайдера, не форкая плагин.
Подключаемый провайдер использует ровно тот же контракт, что и встроенный. Для OpenAI-совместимой конечной точки весь файл выглядит так:
import openai
import gepetto.config
import gepetto.models.model_manager
from gepetto.models.openai import GPT
class MyProvider(GPT):
@staticmethod
def get_menu_name() -> str:
return "MyProvider"
@staticmethod
def supported_models():
return ["my-model-v1"]
@staticmethod
def is_configured_properly() -> bool:
return bool(gepetto.config.get_config("MyProvider", "API_KEY", "MYPROVIDER_API_KEY"))
def __init__(self, model):
try:
super().__init__(model)
except ValueError:
pass # No OpenAI key needed for this provider.
self.model = model
self.client = openai.OpenAI(
api_key=gepetto.config.get_config("MyProvider", "API_KEY", "MYPROVIDER_API_KEY"),
base_url="https://api.example.com/v1",
)
gepetto.models.model_manager.register_model(MyProvider)
Добавьте соответствующий раздел [MyProvider] в ваш config.ini и перезапустите IDA: провайдеры регистрируются при загрузке, поэтому новый ключ или новый файл требует перезапуска, прежде чем он появится в меню.
Чтобы поставлять его как пакет, вместо этого предоставьте класс или вызываемый объект register(register_model):
[project.entry-points."gepetto.providers"]
myprovider = "myprovider:MyProvider"
Файлы в providers/ выполняют произвольный Python-код при запуске IDA. Это тот же уровень доверия, что и у любого плагина IDA, поэтому устанавливайте только те провайдеры, которым доверяете.
После правильной установки плагина вы сможете вызывать его из контекстного меню окна псевдокода IDA, как показано на скриншоте ниже:

Переключайтесь между моделями, поддерживаемыми Gepetto, через меню Edit > Gepetto:

Gepetto также предоставляет интерфейс командной строки, который можно использовать для обращения с вопросами к LLM напрямую из IDA. Убедитесь, что в строке ввода выбран
Gepetto:

Доступны следующие горячие клавиши:
Ctrl + Alt + GCtrl + Alt + KCtrl + Alt + RПервоначальное тестирование показывает, что запрос более удачных имён работает лучше, если сначала попросить объяснить функцию – я предполагаю, что модель затем использует свой собственный комментарий, чтобы давать более точные предложения. В ответах ИИ присутствует элемент случайности. Если по какой-то причине полученный первоначальный ответ вам не подходит, вы всегда можете выполнить команду снова.