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

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

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

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

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

Категории

Все категории
Loading categories
Инструменты/GitHubGitHub/quarkslab/quokka
Статический анализАнализ КодаОбратная инженерияУтилиты и фреймворкиАнализ Бинарных Файлов
GitHubquarkslab/quokka

quokka

Quokka: быстрый и точный экспортёр бинарных файлов

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

Популярное

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

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

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

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

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

Quokka

изображение создано DALL-E


Содержание

  • Введение
  • Установка
  • Использование
  • Сборка
  • Документация
  • FAQ

Введение

Quokka — это экспортер бинарных файлов: на основе дизассемблирования программы он создает экспортный файл, который можно использовать без дизассемблера. В настоящее время в качестве бэкендов дизассемблирования поддерживаются IDA Pro, Ghidra и Binary Ninja.

Основная цель Quokka — позволить полностью манипулировать бинарным файлом, ни разу не открывая дизассемблер после первоначального экспорта. Кроме того, он абстрагирует API дизассемблера, предоставляя пользователям чистый интерфейс.

Quokka во многом вдохновлен BinExport, экспортером бинарных файлов, используемым в BinDiff.

Архитектура

root@kitploit:~
     IDA Pro               Ghidra               Binary Ninja
        │                      │                      │
IDA Plugin (C++)    Ghidra Plugin (Java)   BinaryNinja Plugin (Python)
        │                      │                      │
        └────────────── quokka.proto ─────────────────┘
                     (protobuf schema)
                              │
                        .quokka files
                              │
              Python bindings (quokka.Program)
              ├── Capstone backend (primary)
              └── Pypcode backend (optional)

Установка

Python-плагин

Плагин собирается в CI и доступен в реестре.

Его можно установить напрямую через PIP с помощью такой команды:

root@kitploit:~
$ pip install quokka-project

Плагин IDA

Примечание: плагин IDA не требуется для чтения файла, созданного Quokka. Он используется только для их генерации.

Quokka совместим с IDA 9.1+.

Через менеджер плагинов IDA (IDA 9.2+)

Quokka опубликован в репозитории плагинов Hex-Rays и может быть установлен с помощью hcli:

root@kitploit:~
user@host:~$ hcli plugin install quokka

Вручную

Плагин также собирается в CI и доступен на вкладке Releases.

Чтобы загрузить плагин, возьмите файл с именем quokka_plugin.so (или архив quokka-ida<version>.zip для вашей версии IDA) и скопируйте его в каталог plugins вашей IDA.

Расширение Ghidra

Quokka также поддерживает экспорт из Ghidra (>= 12.0.3) с помощью специального расширения. Оно создает те же .quokka protobuf-файлы, которые может загружать библиотека Python.

Инструкции по сборке, установке и использованию см. в README расширения Ghidra.

Расширение BinaryNinja

Quokka также поддерживает экспорт из Binary Ninja с помощью Python-плагина. Он создает те же .quokka protobuf-файлы, которые может загружать библиотека Python.

Сведения об установке и использовании см. в README расширения BinaryNinja.

Использование

Экспорт через GUI

Первый ручной способ экспорта бинарного файла — использовать плагин внутри IDA Pro. Сочетание клавиш по умолчанию в IDA — Alt+A. Открывается следующий диалог:

Export Dialog

Доступны следующие режимы:

  • LIGHT: экспортирует только данные на уровне блоков (инструкции декодируются во время выполнения Capstone из исходных байтов бинарного файла)
  • FULL: экспортирует инструкции и операнды (автономный режим, не требует исходный бинарный файл для дизассемблирования)

Примечание: режим FULL еще не реализован. В настоящее время работает только режим LIGHT.

Экспорт в headless-режиме

IDA

Примечание: для этого требуется рабочая установка IDA.

root@kitploit:~
$ idat -OQuokkaAuto:true -OQuokkaDecompiled:true -A /path/to/hello.i64

Все доступные параметры описаны в разделе Использование.

Примечание: вместо ida используется idat, чтобы увеличить скорость экспорта, поскольку графический интерфейс не нужен.

Ghidra

root@kitploit:~
$ analyzeHeadless /tmp/proj Test \
    -import /path/to/binary \
    -scriptPath ghidra_extension/src/script/ghidra_scripts \
    -postScript QuokkaExportHeadless.java \
    --out=/path/to/output.quokka --mode=LIGHT

Более подробную информацию см. в README расширения Ghidra.

Binary Ninja

Примечание: использование API Binary Ninja в headless-режиме требует коммерческой лицензии. При ее отсутствии используйте команду экспорта в интерфейсе Binary Ninja.

root@kitploit:~
$ python binaryninja_extension/export_headless.py /path/to/binary \
    -o /path/to/output.quokka --mode LIGHT

Более подробную информацию см. в README расширения BinaryNinja.

Экспорт через CLI

Quokka предоставляет утилиту командной строки для автоматического параллельного экспорта одного или нескольких файлов и/или каталогов (все исполняемые файлы в каждом каталоге). Поддерживаются бэкенды IDA Pro и Ghidra:

root@kitploit:~
$ quokka-cli --backend ghidra -t 8 dir/
$ quokka-cli --backend ida --ida-path /opt/ida -t 8 dir/
$ quokka-cli -t 8 dir/                          # auto-detect backend
$ quokka-cli -o "%p/exports/%f.quokka" binary   # custom output directory
$ quokka-cli -b ida -o %F_ida.quokka -t 4 dir/  # Using relative path
$ quokka-cli -t 8 dir1/ dir2/ binary1 binary2   # multiple inputs

По умолчанию файл .quokka размещается рядом с исходным бинарным файлом (например, /usr/bin/ls создает /usr/bin/ls.quokka). Используйте -o, чтобы переопределить это значение с помощью прямого пути или шаблона, разворачиваемого для каждого файла (%f = имя без расширения, %F = имя файла, %p = родительский каталог, %P = полный путь, %e = расширение, %% = литеральный символ %).

Выполните quokka-cli --help, чтобы увидеть все параметры. Основные флаги:

  • -b, --backend — выбор бэкенда дизассемблера (ida, ghidra или auto);
  • -i, --ida-path — путь к каталогу установки IDA (папка, содержащая idat);
  • --ghidra-path — путь к каталогу установки Ghidra (переопределяет GHIDRA_INSTALL_DIR);
  • -o, --output — путь вывода или шаблон (по умолчанию: %F.quokka);
  • -m, --mode — выбор режима экспорта (light или full);
  • --decompiled — включить экспорт декомпилированного кода (только IDA);
  • -v, --verbose — включить подробное журналирование.

Загрузка экспортного файла

root@kitploit:~
import quokka
from quokka.types import Disassembler

# Directly from the binary (auto-detects available backend)
prog = quokka.Program.from_binary("/bin/ls")

# Explicitly choose a backend
prog = quokka.Program.from_binary("/bin/ls", disassembler=Disassembler.GHIDRA)
prog = quokka.Program.from_binary("/bin/ls", disassembler=Disassembler.IDA)

# From the exported file
prog = quokka.Program("ls.quokka",  # the exported file
                      "/bin/ls")    # the original binary

Редактирование и добавление типов

root@kitploit:~
# Add new types from C declarations
prog.add_type("struct context { int id; char name[64]; };")
prog.add_type("enum status { OK=0, ERROR=1 };")

# Save the .quokka file
prog.write()

# Or apply changes (including new types) back to the IDA database
prog.commit(database_file="ls.i64", overwrite=True)

Полную документацию по редактированию см. в разделе о переименовании функций, задании прототипов и других возможностях.

Сборка

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

IDA >= 9.2 (новый способ)

IDA SDK наконец-то стал открытым, поэтому больше нет необходимости загружать его отдельно.

Вы можете использовать параметр cmake -DIDA_VERSION=<major>.<minor>, чтобы автоматически синхронизировать его с GitHub.

root@kitploit:~
user@host:~/quokka$ cmake -B build \ # Where to build
                          -S . \ # Where are the sources
                          -DIDA_VERSION=9.2 \ # IDA SDK version
                          -DCMAKE_BUILD_TYPE:STRING=Release \ # Build Type

user@host:~/quokka$ cmake --build build -- -j

IDA < 9.2 (старый способ)

Поскольку IDA SDK по-прежнему является проприетарным кодом, вам придется загрузить его самостоятельно и указать путь к нему в cmake через параметр -DIdaSdk_ROOT_DIR:STRING=path/to/sdk.

ПРИМЕЧАНИЕ: это также будет работать в новых версиях, но требует от пользователей дополнительных действий, поскольку им придется загружать SDK самостоятельно.

root@kitploit:~
user@host:~/quokka$ cmake -B build \ # Where to build
                          -S . \ # Where are the sources
                          -DIdaSdk_ROOT_DIR:STRING=path/to/ida_sdk \ # Path to IDA SDK 
                          -DCMAKE_BUILD_TYPE:STRING=Release \ # Build Type

user@host:~/quokka$ cmake --build build --target quokka_plugin -- -j

Установка

Чтобы установить плагин:

root@kitploit:~
user@host:~/quokka$ cmake --install build

В любом случае плагин также будет находиться в build/quokka-install. Вы можете скопировать его в пользовательский каталог плагинов IDA.

root@kitploit:~
user@host:~/quokka$ cp build/quokka-install/quokka_plugin.so $HOME/.idapro/plugins/

Более подробную информацию о сборке см. в разделе Сборка.

Документация

Документация доступна онлайн: документация.

FAQ

Список вопросов можно посмотреть здесь: FAQ.

Режимы экспорта

Примечание: В настоящее время реализован только режим LIGHT. Режим FULL (автономный) запланирован, но пока не работает.

Quokka предлагает два режима экспорта результатов дизассемблирования: облегченный режим и автономный режим.

Облегченный режим ориентирован на экспорт только самой необходимой информации, создавая быстрые и легкие файлы. В этом режиме не экспортируется информация на уровне инструкций и ниже, поэтому для получения дизассемблирования инструкций во время выполнения используется движок Capstone.

Автономный режим, напротив, экспортирует полное дизассемблирование в том виде, в котором его показывает бэкенд-дизассемблер. Это приводит к созданию более тяжелых файлов, но не требует зависимости от сторонних дизассемблеров во время выполнения.

Важно отметить, что оба режима предоставляют одинаковый API в привязках Python.

[!WARNING] В автономном режиме по-прежнему можно получить объект инструкции Capstone, но имейте в виду, что дизассемблирование Capstone может отличаться от того, что экспортирует quokka (инструкции могут быть разделены, объединены, не поддерживаться, иметь другие мнемоники и т.д.). В целом разные платформы анализа бинарных файлов дают разное дизассемблирование — учитывайте это при смешивании Capstone с автономным режимом.

Полный обзор различий между двумя режимами приведен в таблице ниже:

Облегченный режимАвтономный режим
Функции✅✅
Базовые блоки✅✅
Инструкции❌✅
Операнды❌✅
Ссылки на данные✅✅
Перекрестные ссылки✅✅
Секции/Компоновка✅✅
Декомпиляция✅¹✅¹
Координаты отрисовки CFG✅¹²✅¹²

¹ Включается по желанию

² В настоящее время не поддерживается

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