Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
GhidraEmu — Native Pcode emulator | Kitploit
Инструменты/GitHubGitHub/nalen98/ghidraemu
Dynamic Code Analysis (DAST)Reverse EngineeringDebuggersBinary Analysis
GitHubnalen98/ghidraemu

GhidraEmu

Native Pcode emulator

Репозиторий
305232 лет назадПроверено Kitploit

Популярное

Смотреть все →

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

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

GhidraEmu



Этот экспериментальный плагин для Ghidra позволяет легко работать с эмуляцией нативного pcode. Больше не нужны скрипты — просто используйте его напрямую из Ghidra. Он может быть особенно полезен для работы с самыми разными экзотическими процессорами, которые не поддерживаются обычными эмуляторами.

Если процессор/ВМ поддерживается Ghidra для реверс-инжиниринга, его можно эмулировать! Например, ниже продемонстрирована эмуляция инструкций eBPF:

GhidraEmu

Что он умеет

По сути, плагин представляет собой расширенную обёртку над классами из пакета ghidra.app.emulator. Вот что реализовано:

  • Работает со всеми архитектурами, которые поддерживает Ghidra, поэтому вы можете добавлять экзотические процессоры и эмулировать их
  • Эмуляция контекста CPU, стека и кучи
  • Применение пропатченных байтов через GUI Ghidra для изменения хода эмуляции
  • Точки останова для управления процессом эмуляции
  • Отображение изменённых байтов во время эмуляции в ByteViewer
  • Хукинг некоторых функций libc (хотя это пока ещё слабо)

Хотя эмуляция PCode в идеале подразумевает унификацию, большинству процессоров нужен свой подход. Не стесняйтесь сообщать о любых возникающих проблемах. Я бы очень хотел протестировать все процессоры, но это вряд ли возможно.

Чего он не умеет

  • Шаг внутрь функций внешних библиотек (ограничения EmulatorHelper)
  • Эмуляция системных вызовов

Все окна плагина в одном наборе

GhidraEmu

Возможности

Окно меню

Содержит все окна плагина: представление стека, регистры, представление точек останова и главное окно.

Меню GhidraEmu

Всплывающее окно

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

Представление регистров

Изменяйте регистры как хотите. Установка регистра связи (зелёная стрелка) поможет эмулятору понять, какой регистр содержит адрес возврата. Плагин знает, как это работает через стек, регистр lr, а также регистры AARCH64 и MIPS. Если у вас экзотический регистр, выберите регистр связи и нажмите кнопку.

Представление стека

Когда вы открываете программу в CodeBrowser, GhidraEmu автоматически сопоставит пространство стека. Указатель стека будет установлен в середине диапазона стека. Это позволяет устанавливать значения в верхней или нижней части стековых кадров. Прокрутите его, если столкнётесь с зависаниями при обновлении или сбросе. В процессе эмуляции, если программе потребуется больше места для стека, плагин выделит его автоматически.

Представление точек останова

Представление RAM

Если во время эмуляции изменятся какие-либо байты, вы увидите их в классическом ByteViewer. Не волнуйтесь, после нажатия кнопки "Reset" они будут сброшены к исходным значениям.

Применение пропатченных байтов

Если вы внесли изменения, сообщите эмулятору об изменённых байтах (стек обновляется автоматически — этого делать не нужно). После изменения выберите их (они будут зелёными) и нажмите этот пункт меню (или воспользуйтесь горячей клавишей "M").

Применение пропатченных байтов GhidraEmu

Консоль

Здесь плагин выводит информацию. Например, сообщения об ошибках эмуляции, как здесь:

Консоль GhidraEmu

Новая возможность — Jump Over

Функция «Jump Over» позволяет перепрыгнуть на одну инструкцию вперёд, если вы по какой-то причине не хотите эмулировать текущую. Поскольку процесс эмуляции будет прерван при обнаружении попытки чтения неинициализированной памяти, эта функция позволяет обойти это. Посмотрите на пример. Вот одна из первых инструкций во многих программах x86_64 — сохранение канарейки стека:

MOV RAX, qword ptr FS:[0x28]

Мы просто попробуем немного схитрить и перепрыгнуть через неё, увеличив значение PC. Для этого остановитесь на инструкции, которую не хотите эмулировать, и нажмите горячую клавишу J. В противном случае дальнейший шаг приведёт к ошибке чтения неинициализированной памяти.

Jump Over

Новая возможность — Step Over

Если вы остановитесь на инструкции, которая ведёт к подпрограмме (внутреннему вызову), и захотите эмулировать всё вплоть до следующей инструкции (классический «step over»), нажмите горячую клавишу F6, и это обязательно произойдёт:

Step Over

Перед началом работы

Несколько важных моментов, которые следует учесть:

  • Не забудьте проанализировать программу в Ghidra, поскольку эмулятор зависит от этого.
  • Как уже упоминалось, установите регистр связи, если у вас экзотический процессор/ВМ.
  • Если процессору вашего бинарного файла в соответствии со спецификацией нужны определённые сегменты памяти, не забудьте создать их в окне MemoryMap в Ghidra и инициализировать нулями. В противном случае эмулятор будет жаловаться на неизвестные области памяти во время операций чтения/записи и остановит процесс эмуляции. Если блок памяти существует, но не инициализирован нулями и нужен эмулятору, плагин попытается сделать его инициализированным, чтобы эмуляция продолжилась.
  • Если вы изменили какие-либо байты через ByteViewer, плагин не восстановит их исходные значения при сбросе состояния эмуляции.
  • Перед закрытием проекта в Ghidra нажмите кнопку "Reset" и сбросьте состояние последней эмуляции, если это ещё не было сделано. Это важно, потому что в момент закрытия не будут выполнены транзакции перерисовки отслеживаемых инструкций в Listing, а также транзакции восстановления байтов программы после эмуляции. Это может привести не только к лицезрению «старого жёлтого попугая», что является наименьшей проблемой, но и к тому, что изменённые байты останутся таковыми и не вернутся к исходным значениям (если, конечно, не откатить проект в Ghidra).

Установка

  1. Используйте gradle для сборки расширения: GHIDRA_INSTALL_DIR=${GHIDRA_HOME} gradle, а затем установите его через Ghidra: File → Install Extensions...

  2. В CodeBrowser перейдите в File → Configure → Miscellaneous и установите флажок для плагина GhidraEmu.

Обратная связь

Обнаружили какие-либо баги при использовании плагина или есть идеи по улучшению? Не стесняйтесь открыть новый issue, и я разберусь.

Планы на будущее

Ограничения EmulatorHelper не позволяют использовать программное пространство в другом. Так что ваша внешняя общая библиотека, например, никогда не узнает о пространстве памяти программы, и наоборот. Поэтому вы не можете эмулировать это как один процесс с единым пространством памяти. Дайте мне знать, если я что-то упускаю.

Скачать инструмент