Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
quokka — Quokka: un exportador binario rápido y preciso | Kitploit
Herramientas/GitHubGitHub/quarkslab/quokka
Análisis EstáticoAnálisis de CódigoIngeniería InversaUtilidades y FrameworksAnálisis de Binarios
GitHubquarkslab/quokka

quokka

Quokka: un exportador binario rápido y preciso

Ver Repositorio
223225hace 15 díasRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Sitio web
Compartir

Quokka

imagen generada por DALL-E


Tabla de contenidos

  • Introducción
  • Instalación
  • Uso
  • Compilación
  • Documentación
  • FAQ

Introducción

Quokka es un exportador de binarios: a partir del desensamblado de un programa, genera un archivo de exportación que se puede utilizar sin el desensamblador. Actualmente soporta IDA Pro, Ghidra y Binary Ninja como backends de desensamblado.

El objetivo principal de Quokka es permitir manipular completamente el binario sin tener que abrir nunca un desensamblador después de la exportación inicial. Además, abstrae la API del desensamblador para exponer una interfaz limpia a los usuarios.

Quokka está fuertemente inspirado en BinExport, el exportador de binarios utilizado por BinDiff.

Arquitectura

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)
Descargar herramienta

Instalación

Plugin de Python

El plugin se compila en la CI y está disponible en el registro.

Debería ser posible instalarlo directamente desde PIP utilizando este tipo de comando:

root@kitploit:~
$ pip install quokka-project

Plugin de IDA

Nota: El plugin de IDA no es necesario para leer un archivo generado por Quokka. Solo se utiliza para generarlos.

Quokka es compatible con IDA 9.1+.

Mediante el gestor de plugins de IDA (IDA 9.2+)

Quokka se publica en el repositorio de plugins de Hex-Rays y se puede instalar con hcli:

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

Manualmente

El plugin también se compila en la CI y está disponible en la pestaña Releases.

Para descargar el plugin, obtenga el archivo llamado quokka_plugin.so (o el archivo quokka-ida<version>.zip para su versión de IDA) y cópielo en su directorio plugins de IDA.

Extensión de Ghidra

Quokka también admite la exportación desde Ghidra (>= 12.0.3) mediante una extensión dedicada. Produce los mismos archivos protobuf .quokka que la biblioteca de Python puede cargar.

Para obtener instrucciones de compilación, instalación y detalles de uso, consulte el README de la extensión de Ghidra.

Extensión de BinaryNinja

Quokka también admite la exportación desde Binary Ninja mediante un plugin de Python. Produce los mismos archivos protobuf .quokka que la biblioteca de Python puede cargar.

Para obtener detalles de instalación y uso, consulte el README de la extensión de BinaryNinja.

Uso

Exportación mediante GUI

La primera forma manual de exportar un binario es utilizar el plugin dentro de IDA Pro. El atajo predeterminado dentro de IDA es Alt+A. Abre el siguiente diálogo:

Export Dialog

Los modos disponibles son:

  • LIGHT: Exporta solo datos a nivel de bloque (las instrucciones se decodifican en tiempo de ejecución por Capstone a partir de los bytes del binario original)
  • FULL: Exporta instrucciones y operandos (modo autocontenido, no requiere el binario original para el desensamblado)

Nota: El modo FULL aún no está implementado. Solo el modo LIGHT es funcional actualmente.

Exportación en modo headless

IDA

Nota: Esto requiere una instalación funcional de IDA.

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

Todas las opciones disponibles se describen en Usage.

Nota: se utiliza idat en lugar de ida para aumentar la velocidad de exportación, ya que no se necesita la interfaz gráfica.

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

Consulte el README de la extensión de Ghidra para más detalles.

Binary Ninja

Nota: el uso headless de la API de Binary Ninja requiere una licencia comercial. Sin una, utilice el comando de exportación dentro de la interfaz de Binary Ninja.

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

Consulte el README de la extensión de BinaryNinja para más detalles.

Exportación en CLI

Quokka proporciona una herramienta de utilidad CLI para exportar automáticamente uno o más archivos y/o directorios (todos los archivos ejecutables de cada directorio) en paralelo. Soporta tanto los backends de IDA Pro como el de 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

Por defecto, el archivo .quokka se coloca junto al binario de entrada (p. ej. /usr/bin/ls produce /usr/bin/ls.quokka). Utilice -o para sobrescribir esto con una ruta literal o una plantilla expandida por archivo (%f = nombre base, %F = nombre de archivo, %p = directorio padre, %P = ruta completa, %e = extensión, %% = % literal).

Ejecute quokka-cli --help para ver todas las opciones. Las banderas clave incluyen:

  • -b, --backend para elegir el backend de desensamblado (ida, ghidra o auto)
  • -i, --ida-path para proporcionar la ruta al directorio de instalación de IDA (la carpeta que contiene idat)
  • --ghidra-path para proporcionar el directorio de instalación de Ghidra (sobrescribe GHIDRA_INSTALL_DIR)
  • -o, --output para establecer la ruta o plantilla de salida (predeterminado: %F.quokka)
  • -m, --mode para elegir el modo de exportación (light o full)
  • --decompiled para habilitar la exportación de código descompilado (solo IDA)
  • -v, --verbose para habilitar el registro detallado

Carga de un archivo de exportación

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

Edición y adición de tipos

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)

Consulte la documentación de edición completa para obtener detalles sobre cómo renombrar funciones, establecer prototipos y más.

Compilación

El proceso de compilación depende de la versión del SDK de IDA que esté utilizando. Estos dos modos también se denominan el modo nuevo y el modo antiguo.

IDA >= 9.2 (El modo nuevo)

El SDK de IDA finalmente ha sido publicado como código abierto, por lo que ya no es necesario descargarlo por separado.

Puede utilizar la opción de cmake -DIDA_VERSION=<major>.<minor> para sincronizarlo automáticamente desde 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 (El modo antiguo)

Dado que el SDK de IDA sigue siendo código propietario, debe obtenerlo usted mismo y proporcionar su ruta a cmake mediante la opción -DIdaSdk_ROOT_DIR:STRING=path/to/sdk

NOTA: Esto también funcionará en versiones más recientes, pero requiere más pasos por parte de los usuarios, ya que tendrán que descargar el SDK ellos mismos.

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

Instalación

Para instalar el plugin:

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

En cualquier caso, el plugin también estará en build/quokka-install. Puede copiarlo al directorio de plugins de usuario de IDA.

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

Para obtener información más detallada sobre la compilación, consulte Building

Documentación

La documentación está disponible en línea en documentación

FAQ

Puede ver una lista de preguntas aquí FAQ

Modos de exportación

Nota: Actualmente solo está implementado el modo LIGHT. El modo FULL (autocontenido) está planificado pero aún no es funcional.

Quokka ofrece dos modos para exportar el análisis del desensamblado: el modo ligero y el modo autocontenido.

El modo ligero se centra en exportar solo la información esencial, produciendo archivos rápidos y ligeros. En este modo no se exporta información a nivel de instrucción o inferior, por lo que el motor capstone se utilizará en tiempo de ejecución para obtener el desensamblado de las instrucciones.

El modo autocontenido, en cambio, exporta el desensamblado completo, exactamente como lo muestra el backend de desensamblado. Esto producirá archivos más pesados, pero no requiere depender de desensambladores de terceros en tiempo de ejecución.

Es importante señalar que ambos modos ofrecen la misma API en los bindings de Python.

[!WARNING] Desde el modo autocontenido todavía es posible obtener el objeto de instrucción de capstone, pero tenga en cuenta que el desensamblado de capstone puede diferir del exportado por quokka (las instrucciones pueden dividirse, fusionarse, no ser compatibles, tener diferentes mnemónicos, etc.). En general, diferentes plataformas de análisis de binarios producen desensamblados diferentes; tenga esto en cuenta al combinar capstone con el modo autocontenido.

Para una visión completa de la diferencia entre los dos modos, consulte la tabla siguiente:

Light ModeSelf contained Mode
Funciones✅✅
Bloques básicos✅✅
Instrucciones❌✅
Operandos❌✅
Referencias de datos✅✅
Referencias cruzadas✅✅
Secciones/Distribución✅✅
Descompilación✅¹✅¹
Coordenadas de dibujo del CFG✅¹²✅¹²

¹ Habilitable opcionalmente

² Actualmente no soportado