Обновленная демо-версия скоро появится!
Помощник по обратному проектированию (ReVA) — это проект по созданию независимого от дизассемблера искусственного интеллекта-помощника для задач обратного проектирования. Это включает в себя как автономный , так и онлайн-вывод, а также простую архитектуру.
ReVa отличается от других проектов по созданию ИИ-помощников для задач RE, поскольку использует подход, основанный на инструментах . ReVa стремится предоставить LLM множество небольших инструментов, точно так же, как ваша среда RE предоставляет вам набор небольших инструментов. ReVa сочетает этот подход с методами цепочки рассуждений, чтобы дать LLM возможность выполнять сложные задачи.
Каждый из инструментов, предоставленных LLM, сконструирован таким образом, чтобы LLM мог легко использовать его, выдерживать различные входные данные и уменьшать галлюцинации со стороны LLM. Мы делаем это, предоставляя LLM схему, но допуская другие входные данные, включая описания, которыми руководствуется LLM, и перенаправляя исправимые ошибки обратно в LLM, а также включая дополнительные выходные данные, которые помогут LLM принять следующее решение.
Например, когда LLM запрашивает декомпиляцию из вашего инструмента RE, мы принимаем необработанный адрес в шестнадцатеричном формате, необработанный адрес в десятичной системе счисления, имя символа с пространством имен или символ. Если LLM дает нам неправильные входные данные, мы сообщаем об этом LLM вместе с инструкциями по исправлению входных данных (например, поощряя его использовать список функций). Чтобы стимулировать исследование, как это делал бы человек, мы сообщаем дополнительный контекст, такой как пространство имен и перекрестные ссылки, вместе с декомпиляцией. Это небольшой толчок к тому, чтобы LLM исследовал двоичный файл так же, как это сделал бы человек.
Используя эту технику, вы можете задавать общие вопросы и получать релевантные ответы. Модель отдает приоритет информации, поступающей от инструментов, но даже при отсутствии информации она все равно может отвечать на общие вопросы в ходе обучения.
Вы можете задавать такие вопросы, как:
__mod_init
.mmap
?Важной частью обратного проектирования является сам процесс. Многие другие инструменты просто задают один вопрос LLM, а это означает, что трудно определить , почему что-то произошло. В ReVa мы разбиваем все действия на мелкие части и включаем в результат мысли LLM. Это позволяет аналитику отслеживать действия и рассуждения LLM, при необходимости прерывая и изменяя подсказку.
RevA основан на langchain, который поддерживает ряд моделей.
Встроенная поддержка предусмотрена для:
См. раздел Конфигурация для получения дополнительной информации о настройках поставщиков.
Добавить дополнительные серверы вывода легко, если это поддерживается langchain.
Конфигурация ReVa находится в параметрах инструмента CodeBrowser. Откройте программу и перейдите в «Правка» -> «Параметры инструмента» -> «ReVa».
Есть варианты:
Есть разделы для провайдеров.
По умолчанию ключ OpenAI загружается из переменной среды OPENAI_API_KEY
. Вы также можете установить свой ключ внутри Ghidra. Установка ключа обратно на значение OPENAI_API_KEY
приведет к удалению ключа из конфигурации Ghidra и загрузке его из среды.
Вы также можете выбрать модель. По умолчанию выбран gpt-4o
. Эта модель лучше всего работает с инструментами и подсказками, предоставленными ReVa.
gpt-4
также работает хорошо, но медленно и требует от пользователя дополнительных подсказок для изучения двоичного файла.
Оллама — локальный сервер вывода. Сервер по умолчанию установлен на localhost с портом Ollama по умолчанию. Вы можете изменить это на удаленный сервер, если хотите выполнить вывод на удаленном компьютере. Это полезно для организаций, которые самостоятельно принимают хостинг.
Вы также можете выбрать модель. Модель уже должна быть загружена на сервер. Хорошие результаты были отмечены:
mixtral
llama3
phi
RevA имеет двухэтапный рабочий процесс.
ReVa использует расширение вашего инструмента RE для выполнения анализа. См. раздел Поддержка Ghidra ниже.
Чтобы задать вопросы и выполнить вывод, предусмотрен инструмент командной строки. Запустите reva-chat
, чтобы начать сеанс чата. Эта команда найдет вашу открытую Ghidra и подключится к ней. Чтобы открыть новый чат, снова запустите команду в другом терминале.
Если у вас открыто более одной Ghidra, вы можете выбрать нужную с помощью reva-chat --project ${project-name}
, если она не установлена, reva-chat
спросит вас, к какому проекту вы хотите подключиться.
Для связи между reva-server
и расширением используется gRPC. Подробнее об этом можно прочитать (здесь)[./DEVELOPER.md]. Сборка исходных файлов на основе этих определений протоколов осуществляется из файла Makefile. Чтобы создать файлы исходного кода протокола, запустите эту команду в корне проекта:
make protocol
Сначала установите компонент Python, я предпочитаю использовать pipx
. Установите его примерно так:
pip install pipx
В папке reverse-engineering-assistant
запустите:
pipx install .
После установки проекта Python pipx может предупредить вас о необходимости добавить папку в переменную среды PATH. Убедитесь, что папка (теперь содержащая reva-server
и reva-chat
) находится в вашей переменной PATH. pipx может сделать это за вас с помощью этой команды:
pipx ensurepath
Расширению потребуется запустить reva-server
, и вам нужно будет запустить reva-chat
. Если вы не хотите добавлять их в свой PATH, см. раздел «Конфигурация», чтобы узнать, как установить путь к исполняемым файлам.
После запуска reva-server
с помощью расширения чат можно запустить с помощью:
reva-chat
Для работы расширения Ghidra необходимо установить пакет Python!
Следуйте инструкциям плагина ghidra-assistant.
После установки включите расширение ReVa Plugin
в инструменте CodeBrowser (откройте файл и нажмите: Файл -> Настроить -> Разное).
Если вы хотите, чтобы ReVa был включен по умолчанию, нажмите «Файл» -> «Сохранить инструмент», чтобы сохранить конфигурацию.
Если все работает правильно, вы увидите меню ReVa в строке меню.
Вы можете изменить конфигурацию плагина в Edit -> Tool Options -> ReVa
.
Всякий раз, когда ReVa выполняет действие, для каждого действия создается точка отмены. Если ReVa переименует 5 переменных, это будет одна отмена.
ReVa добавляет опцию в меню «Окно» инструмента CodeBrowser. Выберите «Окно» -> «Журнал действий ReVa», чтобы открыть окно журнала действий ReVa.
В этом окне показаны действия, которые ReVa выполнила и хотела бы выполнить. Вы можете принять или отклонить изменение, дважды щелкнув значок ✅ или. Вы также можете перейти к месту, где будет выполнено действие, дважды щелкнув адрес.
Если вы отклоните действие, об этом сообщат РеВе, и она пойдет дальше.
Вы также можете включить «Авторазрешение» в настройках ReVa. Это автоматически примет все действия, которые ReVa хочет выполнить.
ReVa также добавляет некоторые элементы в пользовательский интерфейс Ghidra. Вы можете либо попросить ReVa сделать что-нибудь в окне чата: «Подробно изучить использование переменных в main
, переименовать переменные, присвоив им более описательные имена», либо использовать систему меню.
Например, вы можете щелкнуть правой кнопкой мыши переменную в декомпиляции, выбрать Reva -> Переименовать переменную, и ReVa выполнит действие.
Вам нравится моя работа? Хотите поддержать этот проект и другие? Вам интересно, как этот проект был спроектирован и построен? Этот и многие другие проекты создаются в прямом эфире на моей трансляции https://twitch.tv/cyberkaida!