Ghidra CLI

CLI на Rust для Ghidra: импорт бинарников, декомпиляция, перекрестные ссылки и правка типов с выводом в JSON для агента

  • 267 ★ репозитория
  • Последний коммит
  • GPL-3.0
CLI

Широкий доступ

Почему такой уровень

  • CLI запускает Java-мост и файловые скрипты Ghidra с правами вашего пользователя
  • Команды правки меняют байты и типы в проекте и экспортируют измененные бинарные файлы
  • Инструмент нужен для разбора потенциально вредоносных файлов, поэтому работайте с ними в изолированной среде
Все причины и проверки

akiselev/ghidra-cli

Установка

Работает в

Ручная установка

git clone https://github.com/akiselev/ghidra-cli
cd ghidra-cli
cargo install --path .

Нужны актуальный Rust для сборки, Ghidra 11 или новее и полный JDK. После установки выполните ghidra doctor; ghidra setup может скачать Ghidra.

Доступ и проверки

Как мы проверяем

Широкий доступИнструмент может менять данные, выполнять команды или работать с секретами.

  • CLI запускает Java-мост и файловые скрипты Ghidra с правами вашего пользователя
  • Команды правки меняют байты и типы в проекте и экспортируют измененные бинарные файлы
  • Инструмент нужен для разбора потенциально вредоносных файлов, поэтому работайте с ними в изолированной среде

Это чужой код. Посмотрите файлы в репозитории перед установкой.

Что делает

Ghidra CLI запускает Ghidra без графического окна и дает командную строку для обратной разработки. Первая же команда, например `ghidra import ./binary --project myproject`, сама поднимает мост: Java-скрипт внутри JVM Ghidra, к которому CLI подключается по TCP на локальном порту. Ghidra остается в памяти, поэтому следующие команды обходятся без повторного запуска JVM и сохраняют изменения символов и типов. Через CLI можно получить список функций, символы, строки и типы, декомпилировать функцию (`ghidra decompile main`), смотреть дизассемблирование и перекрестные ссылки (`ghidra x-ref to 0x401000`), строить графы вызовов и выгружать их в DOT. Типы редактируются: создаются структуры, перечисления и псевдонимы, меняются сигнатуры функций, соглашения о вызовах и типы переменных. Поиск идет по строкам, байтам, именам функций и криптографическим константам. Есть правка байтов (`ghidra patch bytes`, `ghidra patch nop`) с экспортом измененного файла, теги функций, комментарии, запуск файловых скриптов Ghidra и пакетный режим из файла команд. Вывод в терминале читается человеком, а в канале по умолчанию становится компактным JSON, так что агент разбирает ответ без лишних шагов.

Для кого. Для специалистов по обратной разработке и анализу бинарных файлов, которые хотят вести Ghidra из терминала или поручить рутинные проходы агенту вроде Claude Code.

Подходит, если

  • Нужно за один проход импортировать бинарник, проанализировать его и вывести список функций и подозрительных строк
  • Нужно, чтобы агент декомпилировал функции по именам или адресам и прослеживал через `x-ref`, откуда приходят данные
  • Нужно размечать код: переименовывать символы, создавать структуры и менять сигнатуры, пока Ghidra держит состояние в памяти
  • Нужно искать криптографические константы и шаблоны байтов при проверке собственного программного обеспечения
  • Нужно анализировать несколько бинарников параллельно: у каждого проекта свой мост и порт

Не подходит, если

  • Нужен графический интерфейс Ghidra с ручной навигацией: CLI предназначен для работы из терминала и скриптов
  • Нужен MCP-сервер, который подключается к уже открытому окну Ghidra: CLI запускает собственный мост и не управляет открытым интерфейсом
  • Сборка идет на машине только с JRE: мосту нужен JDK с `javac`
  • Планируется анализ чужих бинарников без права на это: инструмент рассчитан на законный анализ, например для своего ПО, исследований безопасности и отладки

Пример запроса к агенту

Импортируй `sample.exe` в проект `analysis`, найди интересные строки и функцию, которая их использует, и покажи ее декомпилированный код

Ограничения

Нужны Ghidra 11 или новее, полный JDK с `javac` и актуальный Rust для сборки CLI. Для Ghidra 12.x документация указывает JDK 21. Путь к установленной Ghidra задается через `GHIDRA_INSTALL_DIR`; команда `ghidra setup` может скачать ее. Команда `ghidra doctor` компилирует мост, поэтому это не пассивная проверка файлов.

В режиме моста встроенные `script python` и `script java` не поддерживаются; надежно описан запуск сохраненного Java-скрипта. Флаг `--read-only` проверяет изменения программы, но не изолирует файловую систему. Команды могут менять байты и экспортировать бинарники. Декомпиляция передается агенту и может содержать закрытые сведения. Лицензия CLI — GPL-3.0.

Как отключить. Остановите мост командой `ghidra stop --project <имя>`. Если проекты больше не нужны, до удаления CLI выполните `ghidra project delete <имя>`: это необязательный шаг, который уничтожает сохраненные данные анализа. Затем удалите бинарный файл `ghidra` из каталога `~/.cargo/bin`.

Частые вопросы

Как установить Ghidra CLI?

Склонируйте репозиторий, выполните `cargo install --path .` и укажите путь к Ghidra через `GHIDRA_INSTALL_DIR` или командой `ghidra config set ghidra_install_dir /путь/к/ghidra`. Если Ghidra нет, `ghidra setup` скачает ее. Проверка установки: `ghidra doctor`.

Зачем нужен мост и почему запросы быстрые?

Мост — Java-скрипт `GhidraCliBridge` внутри JVM Ghidra. Ghidra загружается один раз и остается в памяти, а CLI шлет команды по TCP, поэтому не тратит время на запуск JVM для каждой команды. Чтения идут параллельно, записи по одной.

В каком формате CLI отдает результат?

В терминале выводится читаемый текст, при перенаправлении в канал — компактный JSON. Флаги `--json` и `--pretty` задают формат явно, а `--fields name,address,size` оставляет только нужные поля. Фильтры пишутся мини-языком вроде `size > 100 AND name ~ 'crypt'`.

Можно ли править бинарник?

Да. `ghidra patch bytes <адрес> "90 90"` меняет байты, `ghidra patch nop <адрес> --count 5` затирает инструкции, а `ghidra patch export -o patched.bin` сохраняет результат. У команды `patch nop` вся правка откатывается, если хотя бы по одному из выбранных адресов нет инструкции.

Есть ли готовые материалы для Claude Code?

Да. В папке `.claude/` репозитория лежат скилл `ghidra-cli` и описание субагента `ghidra-agent`. Достаточно скопировать их в проект, чтобы Claude Code знал команды CLI.

Обсуждение

Вопросов и отзывов пока нет.

MCP-сервер и плагин для Ghidra: агент декомпилирует бинарники, смотрит перекрестные ссылки и переименовывает функции в открытом проекте

MCP-серверРасширенный доступ11,9 тыс.Звезды репозитория

Восстанавливает функции C и C++ из скомпилированных программ через Ghidra: одна модель пишет код, другая проверяет.

CLIШирокий доступ2,4 тыс.Звезды репозитория

Расширение Ghidra с MCP-сервером: агент читает псевдокод и дизассемблер, строит графы вызовов и правит имена, типы и структуры через 100 инструментов

MCP-серверШирокий доступ810Звезды репозитория

MCP-сервер к дизассемблеру Ghidra: сотни инструментов для обратной разработки, декомпиляция, переименование, работа со структурами, эмуляция и отладка

MCP-серверШирокий доступ6,2 тыс.Звезды репозитория

MCP-сервер для Ghidra: агент декомпилирует, переименовывает переменные, строит перекрестные ссылки и разбирает бинарные файлы через набор мелких инструментов

MCP-серверШирокий доступ958Звезды репозитория

Правила на хуках без модели в цепочке останавливают опасные команды и секреты в коде, а блокировки пишутся в локальный журнал.

CLIРасширенный доступ185Звезды репозитория

Сравнение с похожими

Карточки с тем же главным запросом: чем они отличаются.

ИнструментОфициальныйАвторизацияЗвезды репозиторияГлавное отличие
Ghidra CLI (эта карточка)нет267
GhidraMCPнетне нужна11 907MCP-сервер и плагин для Ghidra, подключается к открытому интерфейсу
Ghidra MCP Serverнетне нужна6 207MCP-сервер к дизассемблеру Ghidra с сотнями инструментов

Коротко о README

Длительные операции имеют отдельные команды состояния и отмены. Отмена кооперативная и не обещает мгновенного прерывания; таймаут декомпиляции настраивается отдельно.

Бейдж для README

Сообщить о проблеме