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
grap — Definir y comparar patrones de grafos definidos por el usuario contra grafos de flujo de control binarios utilizando un desensamblador basado en Capstone, con soporte de CLI, enlaces Python y plugin para IDA. | Kitploit
Herramientas/GitHubGitHub/quosecgmbh/grap
Análisis EstáticoIngeniería InversaDepuradoresAnálisis de MalwareAnálisis de Binarios
GitHubquosecgmbh/grap

grap

Definir y comparar patrones de grafos definidos por el usuario contra grafos de flujo de control binarios utilizando un desensamblador basado en Capstone, con soporte de CLI, enlaces Python y plugin para IDA.

Ver Repositorio
15511hace 4 añosRevisado 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 →
Compartir

grap: definir y buscar patrones de grafos en binarios

https://github.com/QuoSecGmbH/grap

grap toma patrones y archivos binarios, utiliza un desensamblador basado en Casptone para obtener los grafos de flujo de control de los binarios, y luego compara los patrones contra ellos.

Los patrones son grafos definidos por el usuario con condiciones de instrucciones ("opcode is xor and arg1 is eax") y condiciones de repetición (3 instrucciones idénticas, bloques básicos...).

grap está disponible como una herramienta independiente con un desensamblador y enlaces de Python, y como un complemento de IDA que aprovecha el desensamblado realizado por IDA y el reverser.

Soporte:

  • Archivos: desensamblado de PE, ELF y binario crudo; otros archivos deberían funcionar dentro de IDA
  • Arquitectura: x86 y x86_64

Coincidencia con patrón rápido:

Coincidencia con patrón rápido

Coincidencia con patrón completo:

Coincidencia con patrón completo

Coincidencia en múltiples archivos:

Coincidencia en múltiples archivos

Crear patrones interactivamente desde IDA:

Crear y buscar patrones directamente desde IDA

Instalación

Este documento describe cómo compilar e instalar grap en una distribución de Linux.

También puede leer:

  • WINDOWS.md: instalación de grap en Windows
  • IDA.md: instrucciones de instalación y uso del complemento de IDA

Requisitos

Además de los compiladores (build-essential), se deben instalar las siguientes dependencias:

  • cmake
  • bison
  • flex
  • libboost-regex-dev
  • libboost-system-dev
  • libboost-filesystem-dev
  • libseccomp-dev
  • python3-dev
  • python3-pefile
  • python3-pyelftools
  • python3-capstone
  • swig (versión 3 o superior es obligatoria)

Por lo tanto, en Ubuntu / Debian, esto debería funcionar:

root@kitploit:~
sudo apt-get install build-essential cmake bison flex libboost-regex-dev libboost-system-dev libboost-filesystem-dev libseccomp-dev python3-dev python3-pefile python3-pyelftools python3-capstone swig

Tenga en cuenta que estos fueron probados para la última versión LTS de Ubuntu (18.04.3). Los paquetes pueden diferir dependiendo de su distribución.

Compilar e instalar

Los siguientes comandos compilarán e instalarán el proyecto:

  • mkdir build; cd build/ como recomendamos compilar el proyecto en un directorio dedicado
  • cmake ../src/; make compilará con cmake y make
  • sudo make install instalará grap en /usr/local/bin/

SWIG podría fallar al encontrar python3 si su versión predeterminada es python2, esto se puede solucionar cambiando a python3 como predeterminado. Por ejemplo en Ubuntu:

root@kitploit:~
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10

Uso

La herramienta se puede lanzar usando el siguiente comando:

$ grap [options] pattern test_paths

A continuación se muestran algunos ejemplos de opciones soportadas:

  • grap -h: describe las opciones soportadas

Se puede dejar que grap infiera un patrón a partir de una cadena. Solo se soportan algunas opciones, pero esto es útil para prototipado:

  • grap "opcode is xor and arg1 contains '['" (test.exe): busca un xor con una escritura en memoria
  • grap -v "sub->xor->sub" (test.exe): -v mostrará la ruta del patrón inferido

Elija cómo se desensamblan los binarios:

  • grap -od (pattern.grapp) samples/*: desensambla archivos en la carpeta samples/ sin intentar coincidencias
  • grap -f (pattern.grapp) (test.exe): fuerza el re-desensamblado del binario, luego lo compara contra pattern.grapp
  • grap --raw (pattern.grapp) (test.bin): desensambla archivo crudo (use --raw-64 para binarios de 64 bits)

Controle la verbosidad de la salida:

  • grap -q -sa (pattern.grapp) (samples/*.grapcfg): compara archivos desensamblados, muestra archivos coincidentes y no coincidentes, uno por línea
  • grap -m (pattern.grapp) (test.grapcfg): muestra todos los nodos coincidentes

Elija dónde se escriben los archivos desensamblados (.grapcfg); compare múltiples archivos contra múltiples patrones:

  • grap patterns/basic_block_loop.grapp -o ls.grapcfg /bin/ls: desensambla ls en ls.grapp y busca bucles de bloques básicos
  • grap (pattern1.grapp) -p (pattern2.grapp) (test.exe): compara contra múltiples archivos de patrones
  • grap -r -q patterns/ /bin/ -o /tmp/ : desensambla todos los archivos de /bin/ en /tmp/ y los compara contra todos los patrones .grapp de patterns/ (la opción recursiva -r se aplica a /bin/, no a patterns/)

Ejemplos de patrones

El siguiente patrón detecta un bucle de descifrado que consiste en un xor seguido de sub encontrado en una muestra de Backspace:

root@kitploit:~
digraph decryption_md5_4ee00c46da143ba70f7e6270960823be {
A [cond=true, repeat=3]
B [cond="opcode is xor and arg2 is 0x11"]
C [cond="opcode is sub and arg2 is 0x25"]
D [cond=true, repeat=3]
E [cond="opcode beginswith j and nchildren == 2"]

A -> B
B -> C
C -> D
D -> E
E -> A [childnumber=2]
}

Tenga en cuenta que los archivos de patrón pueden contener múltiples grafos de patrón.

Puede encontrar ejemplos adicionales de patrones en dos directorios:

  • patterns/ contiene algunos patrones que pueden ser útiles en cualquier binario, como un patrón para detectar bucles cortos o para detectar un bucle en bloques básicos,
  • examples/ contiene patrones utilizados contra el malware Backspace (vea examples/backspace_samples.md para obtener las muestras binarias).

Tutoriales y ejemplos adicionales

Sobre muestras de malware:

  • Navigating malware samples with grap (CLI, IDA): https://yaps8.github.io/blog/grap_qakbot_navigation
  • Automating function parsing and decryption (python bindings): https://yaps8.github.io/blog/grap_qakbot_strings

Uso de enlaces de Python:

  • Archivo Python que demuestra cómo usar los enlaces para analizar muestras de Backspace: examples/analyze_backspace.py
  • Ejemplos de scripting en IDApython están integrados dentro del complemento de IDA, puede verlos aquí: https://yaps8.github.io/grap/html/scripting_css.html

Documentación

Encontrará más documentación en la carpeta doc/:

  • doc/COMPILE_OPTIONS.md
  • doc/DEBUG.md
  • doc/TESTS.md
  • doc/syntax_highlighting.md

La sintaxis de los grafos de patrón y prueba se detalla en el archivo grap_graphs.pdf en la sección de lanzamientos.

Licencia

grap está licenciado bajo la licencia MIT. El texto completo de la licencia se puede encontrar en LICENSE.

Descargar herramienta