Взаимодействие с Ollama API Скрипт Ghidra для обратного проектирования с помощью LLM.
Что это?
Этот сценарий взаимодействует с API Ollama для взаимодействия с моделями большого языка (LLM). Он использует API Ollama для выполнения различных задач обратного проектирования, не покидая Ghidra. Он поддерживает как локальные, так и удаленные экземпляры Ollama. Этот сценарий вдохновлен GptHidra.
Поддерживаемые модели
Этот скрипт поддерживает любую модель, которую поддерживает Оллама.
Оллама также недавно добавил поддержку любой модели, доступной на HuggingFace, в формате GGUF, например:
ollama run hf.co/arcee-ai/SuperNova-Medius-GGUF
Предварительные условия
- Гидра
- Оллама
- Любая из моделей Ollama
Настройка Олламы
Не стесняйтесь заменять llama3.1:8b
на любую из моделей, совместимых с Ollama.
curl -fsSL https://ollama.com/install.sh | sh
ollama run llama3.1:8b
Теперь все готово, localhost:11434
должен быть готов обрабатывать запросы.
Примечание. Этот сценарий также поддерживает удаленные экземпляры: задайте IP-адрес и порт во время первой настройки.
Что он может сделать?
- Объясните функцию, которая сейчас находится в окне декомпилятора.
- Предложить имя для текущей функции; автоматически назовет функцию, если она включена.
- Переписать текущую функцию с рекомендуемыми комментариями.
- Полностью переписать текущую функцию, пытаясь улучшить имена функций/параметров/переменных, а также добавить комментарии.
- Пользователь может задать вопрос о функции
- Найдите ошибки/предложите потенциальные уязвимости в текущей функции (больше просто для того, чтобы убедиться, что вы все рассмотрели, некоторые предложения глупы, поскольку не имеют контекста)
- Используйте модифицированную версию этого скрипта LeafBlowerLeafFunctions.py Ghidra для автоматизации анализа потенциальных «листовых» функций, таких как strcpy , memcpy , strlen и т. д., в двоичных файлах с удаленными символами, автоматическое переименование, если это включено.
- Объясните единственную инструкцию по сборке, которая в данный момент выбрана в окне листинга.
- Объясните несколько инструкций по сборке, которые в данный момент выбраны в окне списка.
- Общий быстрый ввод для того, чтобы задавать вопросы (вместо того, чтобы искать в Google, подходит для простых вещей)
Опции конфигурации
Доступны следующие параметры конфигурации, которые можно настроить при первом запуске:
- IP-адрес сервера : при использовании удаленного экземпляра установите IP-адрес удаленного экземпляра, в противном случае введите
localhost
- Порт : если ваш экземпляр использует другой порт, измените его здесь — по умолчанию —
11434
- Схема : выберите
http
или https
в зависимости от того, как настроен ваш экземпляр. - Модель : выберите модель, которую вы хотите использовать для анализа. Вы можете изменить ее в любой момент.
- Подсказка для конкретного проекта : используется для предоставления дополнительного контекста модели, если это необходимо.
- Комментарии к ответам : некоторые опции сохраняют ответы в виде комментариев вверху функции, это можно включить/отключить здесь.
- Автоматическое переименование : некоторые опции пытаются автоматически переименовывать функции на основе ответов, это можно включить/отключить здесь.
Опции 11 и 12 можно использовать для настройки параметров после первого запуска.
Использование
- Поместите скрипт GhidrOllama.py и каталог ghidrollama_utils в каталог скриптов Ghidra (обычно
~/ghidra_scripts
). - Найдите функцию/инструкцию, которую вы хотите передать в LLM.
- Запустите сценарий из окна диспетчера сценариев.
- Если вы запускаете скрипт впервые, завершите первоначальную настройку (позже это можно будет изменить).
- Выберите, какую функцию/инструкцию вы хотите проанализировать.
- Подождите, пока выходные данные не будут выведены на консоль (время ожидания зависит от модели и характеристик хоста).
Способы бега
Заходить в окно скрипта для запуска этого скрипта каждый раз неудобно, скрипт легко можно запустить следующими способами:
- Привязка клавиш : привязка клавиш по умолчанию для этого сценария — Q.
- Панель инструментов : можно щелкнуть небольшой значок на панели инструментов, чтобы запустить скрипт.
Привязка клавиш
Для включения после добавления вашего сценария в список каталогов сценариев Ghidra найдите сценарий в списке. Щелкните правой кнопкой мыши результат и выберите «Назначить привязку клавиш». Если будет запрошен ключ, введите q .
Панель инструментов
Чтобы включить значок на панели инструментов, найдите сценарий в диспетчере сценариев и установите флажок в первом столбце (столбец «На панели инструментов »). На панели инструментов должен появиться значок GhidrOllama.
Примечания
- Стоит отметить, что анализ будет настолько хорош, насколько хороша модель, этот скрипт по сути просто соединяет модели и Ghidra.
- Чем лучше модель (больше параметров, медленнее), тем более полным и правильным будет анализ (в большинстве случаев!)
- Если вам нужен быстрый обзор функции, llama3.1:8b работает быстро и дает достойный анализ.
- Будьте осторожны с большими функциями и моделями с низким контекстом: если функция слишком велика для контекстного окна, модель ответит полной тарабарщиной (если вообще ответит).
Примеры функционального анализа
Ниже приведена реализация strchr() в окне декомпиляции Ghidra с удаленными символами: