Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
grap — Définir et faire correspondre des motifs de graphes définis par l'utilisateur avec des graphes de flux de contrôle binaires en utilisant un désassembleur basé sur Capstone, avec prise en charge de CLI, Python bindings et plugin IDA. | Kitploit
Outils/GitHubGitHub/quosecgmbh/grap
Analyse StatiqueRétro-ingénierieDébogueursAnalyse de MalwareAnalyse de Binaires
GitHubquosecgmbh/grap

grap

Définir et faire correspondre des motifs de graphes définis par l'utilisateur avec des graphes de flux de contrôle binaires en utilisant un désassembleur basé sur Capstone, avec prise en charge de CLI, Python bindings et plugin IDA.

Voir le dépôt
15511il y a 4 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

grap: définir et faire correspondre des motifs de graphe dans des binaires

https://github.com/QuoSecGmbH/grap

grap prend des motifs et des fichiers binaires, utilise un désassembleur basé sur Capstone pour obtenir les graphes de flot de contrôle des binaires, puis fait correspondre les motifs avec ceux-ci.

Les motifs sont des graphes définis par l'utilisateur avec des conditions d'instruction ("l'opcode est xor et arg1 est eax") et des conditions de répétition (3 instructions identiques, blocs de base...).

grap est disponible en tant qu'outil autonome avec un désassembleur et des liaisons Python, et en tant que plugin IDA qui tire parti du désassemblage effectué par IDA et de l'analyste.

Prise en charge :

  • Fichiers : désassemblage de PE, ELF et binaire brut, d'autres fichiers devraient fonctionner dans IDA
  • Architecture : x86 et x86_64

Correspondance rapide de motif :

Correspondance rapide de motif

Correspondance complète de motif :

Correspondance complète de motif

Correspondance sur plusieurs fichiers :

Correspondance sur plusieurs fichiers

Créer des motifs interactivement depuis IDA :

Créer et faire correspondre des motifs directement depuis IDA

Installation

Ce document décrit comment construire et installer grap sur une distribution Linux.

Vous pouvez également consulter :

  • WINDOWS.md: installer grap sur Windows
  • IDA.md: instructions d'installation et d'utilisation du plugin IDA

Prérequis

Outre les compilateurs (build-essential), les dépendances suivantes doivent être installées :

  • cmake
  • bison
  • flex
  • libboost-regex-dev
  • libboost-system-dev
  • libboost-filesystem-dev
  • libseccomp-dev
  • python3-dev
  • python3-pefile
  • python3-pyelftools
  • python3-capstone
  • swig (version 3 ou ultérieure est obligatoire)

Ainsi sur Ubuntu/Debian, cela devrait fonctionner :

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

Veuillez noter que ceux-ci ont été testés pour la dernière Ubuntu LTS (18.04.3). Les paquets peuvent différer selon votre distribution.

Construction et installation

Les commandes suivantes construiront et installeront le projet :

  • mkdir build; cd build/ comme nous vous conseillons de construire le projet dans un répertoire dédié
  • cmake ../src/; make construira avec cmake et make
  • sudo make install installera grap dans /usr/local/bin/

SWIG peut échouer à trouver python3 si votre version par défaut est python2, cela peut être résolu en basculant vers python3 par défaut. Par exemple sur Ubuntu :

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

Utilisation

L'outil peut être lancé en utilisant la commande suivante :

$ grap [options] pattern test_paths

Voici quelques exemples d'options supportées :

  • grap -h: décrit les options supportées

On peut laisser grap inférer un motif à partir d'une chaîne. Seules quelques options sont supportées mais cela est utile pour le prototypage :

  • grap "opcode is xor and arg1 contains '['" (test.exe): recherche un xor avec une écriture mémoire
  • grap -v "sub->xor->sub" (test.exe): -v affichera le chemin du motif inféré

Choisissez comment les binaires sont désassemblés :

  • grap -od (pattern.grapp) samples/*: désassemble les fichiers du dossier samples/ sans tentative de correspondance
  • grap -f (pattern.grapp) (test.exe): force le re-désassemblage du binaire, puis le fait correspondre avec pattern.grapp
  • grap --raw (pattern.grapp) (test.bin): désassemblage de fichier brut (utilisez --raw-64 pour les binaires 64 bits)

Contrôler la verbosité de la sortie :

  • grap -q -sa (pattern.grapp) (samples/*.grapcfg): fait correspondre les fichiers désassemblés, affiche les fichiers correspondants et non correspondants, un par ligne
  • grap -m (pattern.grapp) (test.grapcfg): affiche tous les nœuds correspondants

Choisissez où les fichier(s) désassemblé(s) (.grapcfg) sont écrits ; faites correspondre plusieurs fichiers avec plusieurs motifs :

  • grap patterns/basic_block_loop.grapp -o ls.grapcfg /bin/ls: désassemble ls dans ls.grapp et recherche les boucles de blocs de base
  • grap (pattern1.grapp) -p (pattern2.grapp) (test.exe): fait correspondre à plusieurs fichiers de motif
  • grap -r -q patterns/ /bin/ -o /tmp/ : désassemble tous les fichiers de /bin/ dans /tmp/ et les fait correspondre avec tous les motifs .grapp de patterns/ (l'option récursive -r s'applique à /bin/, pas à patterns/)

Exemples de motifs

Le motif suivant détecte une boucle de déchiffrement consistant en un xor suivi d'un sub trouvé dans un échantillon 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]
}

Notez que les fichiers de motif peuvent contenir plusieurs graphes de motif.

Vous pouvez trouver des exemples de motifs supplémentaires dans deux répertoires :

  • patterns/ contient quelques motifs qui peuvent être utiles sur n'importe quel binaire, comme un motif pour détecter les boucles courtes ou pour détecter une boucle sur des blocs de base,
  • examples/ contient des motifs utilisés contre le malware Backspace (voir examples/backspace_samples.md pour obtenir les échantillons binaires).

Tutoriels et exemples supplémentaires

Sur des échantillons de malwares :

  • Naviguer dans des échantillons de malwares avec grap (CLI, IDA) : https://yaps8.github.io/blog/grap_qakbot_navigation
  • Automatisation de l'analyse et du déchiffrement de fonctions (liaisons Python) : https://yaps8.github.io/blog/grap_qakbot_strings

Utilisation des liaisons Python :

  • Fichier Python démontrant comment utiliser les liaisons pour analyser des échantillons Backspace : examples/analyze_backspace.py
  • Des exemples de scripts IDApython sont intégrés dans le plugin IDA, vous pouvez les voir ici : https://yaps8.github.io/grap/html/scripting_css.html

Documentation

Vous trouverez plus de documentation dans le dossier doc/ :

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

La syntaxe des graphes de motif et de test est détaillée dans le fichier grap_graphs.pdf dans la section des versions.

Licence

grap est sous licence MIT. Le texte complet de la licence se trouve dans LICENSE.

Télécharger l’outil