Ghidra: Инструкция для начинающих
Что такое Ghidra
Ghidra — это мощный фреймворк для анализа бинарных файлов, разработанный Агентством национальной безопасности США (NSA) и опубликованный как open-source. Поддерживает множество процессорных архитектур и платформ, предоставляет встроенный декомпилятор, инструменты для редактирования кода, исследования памяти, поиска уязвимостей и реверс-инжиниринга.
- ✅ Поддержка ELF, PE, Mach-O, raw binary и др.
- ✅ Декомпиляция в Си-подобный код
- ✅ Расширяемость на Java и Python (Jython)
- ✅ Совместимость с IDA-скриптами через GhidraBridge
- ✅ Интеграция с GDB, x64dbg, BinNavi, angr и др.
Установка
- Скачать: https://ghidra-sre.org/
- Установите Java JDK (рекомендуется 17+)
- Распакуйте архив → откройте `ghidraRun`
- Опционально: подключите GhidraBridge, Sleigh, BinExport
Интерфейс Ghidra
| Раздел | Описание |
|---|---|
| Project Manager | Создание и загрузка проектов |
| CodeBrowser | Основное рабочее окно |
| Decompiler | Окно декомпиляции в C-подобный код |
| Listing/Bytes | Ассемблер, байты, инструкции |
| Symbol Tree | Символы, функции, метки, строки |
| Function Graph | Визуальный граф вызовов |
| Memory/Registers | Просмотр памяти, сегментов, регистров |
Первичный анализ
1. Создайте новый проект
- Project → New Project → Non-Shared
- Назовите и выберите папку
2. Импортируйте бинарь
- File → Import File
- Выберите `.exe`, `.elf`, `.bin`, `.so`, `.dll` и т.д.
- Ghidra определит тип автоматически
3. Запустите анализ
- После импорта появится диалог `Auto Analysis`
- Выберите нужные опции (по умолчанию включены все)
4. Откройте CodeBrowser
- Дважды кликните на бинаре в дереве проекта
- Ghidra загрузит все сегменты, метки, функции
5. Навигация
- В CodeBrowser: переходите по функциям, меткам
- В Decompiler: читайте псевдокод
- Используйте Search → Functions, Strings, Constants
Клавиши и управление
| Горячая клавиша | Действие |
|---|---|
| `Ctrl+Shift+G` | Перейти к адресу |
| `D` | Установить тип данных |
| `L` | Переименовать метку |
| `F2` | Декомпилировать функцию |
| `G` | Создать функцию |
| `U` | Удалить элемент |
| `Shift+E` | Изменить байты вручную |
Пример анализа "HelloWorld.exe"
1. Импортируйте файл 2. Разрешите Auto Analysis 3. Перейдите к точке входа (`entry`) 4. Используйте декомпилятор (F2) 5. Найдите вызов `printf` или `puts` 6. Переименуйте функцию, пометьте аргументы 7. Экспортируйте декомпилированный код (File → Export Function)
Расширение возможностей
- GhidraBridge — позволяет подключаться из IDA или Python
- Sleigh — создание кастомных процессоров
- BinExport + BinDiff — сравнение бинарей (как в IDA)
- Jython — написание скриптов (анализ, маркировка, отчёты)
Полезные скрипты
- `FindStrings.py` — поиск строк
- `RenameFunctionsFromSymbols.py` — автопереименование
- `FunctionIDAnalyzer` — сигнатуры функций
- `DecompileFunction.py` — экспорт всех функций в .c
Полезные ссылки
- Официальный сайт: https://ghidra-sre.org/
- Скрипты: https://ghidra.re/ghidra_scripts/
- Туториалы: https://github.com/mandiant/GhidraCookbook
Советы новичку
- Активно используйте декомпилятор — он очень точный
- Переименовывайте функции и переменные
- Сохраняйтесь часто — Ghidra не сохраняет автоматически!
- Исследуйте `Symbol Tree` для поиска точек входа, API
- Используйте `Function Graph` для анализа логики программы