
Quokka: un exportador binario rápido y preciso
imagen generada por DALL-E
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.
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)
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:
$ pip install quokka-project
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+.
Quokka se publica en el repositorio de plugins de Hex-Rays y se puede instalar con
hcli:
user@host:~$ hcli plugin install quokka
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.
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.
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.
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:

Los modos disponibles son:
Nota: El modo FULL aún no está implementado. Solo el modo LIGHT es funcional actualmente.
Nota: Esto requiere una instalación funcional de IDA.
$ 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.
$ 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.
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.
$ 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.
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:
$ 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 detalladoimport 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