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
LCSAJdump — Une approche multi-architecture basée sur les graphes et alimentée par le ML pour la détection des gadgets ROP | Kitploit
Outils/GitHubGitHub/chris1sflaggin/lcsajdump
Analyse StatiqueExploitationRétro-ingénierieShellcodeAnalyse de BinairesApprentissage AutomatiqueArticles et RechercheApprentissage et ÉducationDéveloppement de Charges Utiles
GitHubchris1sflaggin/lcsajdump

LCSAJdump

Une approche multi-architecture basée sur les graphes et alimentée par le ML pour la détection des gadgets ROP

272il y a 1 moisVé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
Voir le dépôtSite web

Logo LCSAJdump

LCSAJdump

PyPI Downloads

Cadre universel basé sur les graphes pour la découverte automatisée de gadgets

Status License: MIT



LCSAJdump est un cadre d'analyse statique conçu pour découvrir les gadgets de programmation orientée retour (ROP) et de programmation orientée saut (JOP). Contrairement aux scanners traditionnels, LCSAJdump est indépendant de l'architecture et utilise une approche basée sur les graphes pour révéler des vulnérabilités invisibles aux outils linéaires courants.


Pourquoi LCSAJdump ?

Les scanners ROP courants utilisent une approche linéaire de « fenêtre glissante » sur les octets exécutables du binaire. Cette méthode échoue systématiquement à identifier les Shadow Gadgets : des chaînes d'exécution qui traversent des blocs mémoire non contigus reliés par des sauts inconditionnels ou des branches conditionnelles.

LCSAJdump surmonte cette limitation en reconstruisant le graphe de flot de contrôle (CFG) via l'analyse LCSAJ (Linear Code Sequence and Jump) . En modélisant le binaire comme un graphe orienté de blocs de base, l'outil identifie :

  1. Gadgets contigus : Séquences linéaires standards se terminant par un transfert de contrôle.
  2. Gadgets fantômes (non contigus) : Chaînes complexes qui contournent les « mauvais octets » (par exemple, les octets nuls) en utilisant des instructions qui seraient autrement inaccessibles via un balayage linéaire.

Fonctionnalités clés

  • Support multi-architecture : Prise en charge native de RISC‑V (64GC), x86‑64 et ARM64, facilement extensible à d'autres architectures via des profils modulaires.
  • Analyse basée sur les graphes : Segmente la section .text en blocs de base LCSAJ et reconstruit les relations de flot via un graphe de flot de contrôle inversé maison (représentation d'adjacence légère, aucune dépendance lourde de graphe).
  • Algorithme Rainbow BFS : Parcours en largeur inversé propriétaire partant des puits de flot de contrôle. Il intègre désormais un filtre d'unicité O(1) à abandon précoce et des limites d'instructions à plafond dur pour éviter l'explosion d'état et garantir une analyse ultra-rapide même sur des binaires CISC denses.
  • Construction paresseuse du graphe : La construction du graphe ne conserve que les nœuds accessibles depuis les queues de gadget dans la limite de --depth sauts, réduisant considérablement la mémoire et le temps de construction sur les gros binaires (par ex. libc) tout en produisant des résultats identiques.
  • Moteur de classement en deux étapes : Combine une ligne de base heuristique hyper-rapide (optimisée par Bayes via Optuna) avec un modèle de deep learning LightGBM qui affine la qualité des gadgets à l'aide de caractéristiques structurelles et sémantiques.
  • Inférence sans surcoût : Le modèle ML est intégré nativement et s'exécute par défaut, traitant des dizaines de milliers de nœuds en quelques secondes. Il agit comme un filtre très efficace, rejetant les sauts parasites et renvoyant des chaînes de gadgets propres et hautement contrôlables. Hébergé sur Hugging Face.
  • Paramètres d'élagage : Facteur d'« obscurité » configurable pour équilibrer la profondeur d'analyse et les performances, évitant les boucles infinies dans les graphes cycliques.

Architectures supportées

(voir Benchmarks).

LCSAJdump est conçu pour être universel. Actuellement supporté :

  • RISC‑V 64‑bit (RV64GC) : Support complet des instructions compressées 16 bits.
  • x86‑64 : Gère les instructions superposées de longueur variable. Navigue en toute sécurité dans les graphes denses sans explosion mémoire.
  • ARM64 : Gère les instructions 32 bits et filtre profondément les gadgets gonflés via des pénalités heuristiques strictes.
  • Autres architectures : Peuvent être facilement implémentées en définissant de nouveaux profils dans config.py.

Installation

Via Pip (recommandé)

root@kitploit:~
pip install lcsajdump

Depuis les sources (développement)

root@kitploit:~
git clone [https://github.com/Chris1sFlaggin/LCSAJdump.git](https://github.com/Chris1sFlaggin/LCSAJdump.git)
cd LCSAJdump
pip install -r requirements.txt


Utilisation

LCSAJdump offre une puissante interface en ligne de commande pour une analyse binaire précise :

Analyse standard (RISC‑V par défaut) :

root@kitploit:~
python LCSAJdump.py <chemin_vers_le_binaire>

Analyse avancée (spécification de l'architecture et du fichier de sortie) :

root@kitploit:~
lcsajdump -a riscv64 -d 15 -k 10 -l 20 -o gadgets.txt <chemin_vers_le_binaire>

Exportation en JSON avec filtre de mauvais caractères :

root@kitploit:~
lcsajdump -a x86_64 -d 20 -k 5 -b "000a0d" --json -o gadgets.json <chemin_vers_le_binaire>

Remarque : Utilisez -o après --json pour enregistrer le JSON dans un fichier. Sans --json, -o enregistre en texte brut.

Enregistrer la sortie en texte brut :

root@kitploit:~
lcsajdump -a riscv64 -d 15 -k 10 -l 20 -o gadgets.txt <chemin_vers_le_binaire>

Analyser toutes les sections exécutables :

root@kitploit:~
lcsajdump --all-exec -d 25 -k 10 -l 30 <chemin_vers_le_binaire>

Forcer le classement strictement algorithmique (contourner le ML) :

root@kitploit:~
lcsajdump --algo <chemin_vers_le_binaire>

Options CLI



Précision et benchmarks

LCSAJdump est soutenu par une suite de tests rigoureuse, validée de manière incrémentielle, située dans le répertoire benchmarkTests/.

À travers 14 itérations majeures d'ingénierie des caractéristiques sémantiques, le modèle hybride a appris à discriminer les gadgets en fonction des effets secondaires réels en mémoire (extraits via l'exécution symbolique angr) plutôt que de simples heuristiques syntaxiques.

Évalué par validation croisée 5‑fold avec regroupement (les binaires de test n'ont jamais été vus pendant l'entraînement), le classeur atteint NDCG@1 = 0,914 ± 0,047 et NDCG@10 = 0,922 ± 0,052, ce qui signifie que les gadgets les plus utiles sont systématiquement placés en haut de la sortie. Le moteur en deux étapes priorise avec succès les séquences propres de dépilage de la pile et les appels de type ret2csu, tout en pénalisant lourdement les sauts à décalage fixe sujets aux plantages qui trompent les scanners statiques traditionnels.


Guide développeur et ML

Le dépôt est structuré pour prendre en charge à la fois les utilisateurs finaux et les chercheurs en ML.

  • Moteur de production : La CLI principale intègre de manière transparente le moteur d'inférence en utilisant des modèles hébergés sur Hugging Face, sans nécessité de chargement manuel du modèle.
  • Pipeline ML : Le répertoire lcsajdump/ml_study/ contient le pipeline complet utilisé pour entraîner les modèles :
    • build_dataset.py : Extrait les caractéristiques structurelles et sémantiques d'un corpus de binaires CTF.
    • train_model.py : Entraîne le modèle LightGBM LambdaRank et produit les modèles .pkl.
    • kfold_cv.py : Valide le jeu de données à l'aide d'une validation croisée K‑Fold.

Contribuer (ouvert aux forks !)

Le cadre est ouvert à de nouvelles implémentations. Pour ajouter une nouvelle architecture :

  1. Forgez le dépôt.
  2. Ouvrez lcsajdump/core/config.py.
  3. Ajoutez un nouveau profil au dictionnaire ARCH_PROFILES, en définissant les mnémoniques de saut, les mnémoniques de retour et les registres pour l'architecture souhaitée (par ex. x86_64).
  4. Soumettez une Pull Request.

Licence

Ce projet est publié sous licence MIT. Voir le fichier LICENSE pour plus de détails.


Lien du projet

Visitez la page web du projet : Page web LCSAJdump


Réalisé par Chris1sflaggin dans le cadre d'un projet de recherche sur la découverte automatisée de gadgets.
Télécharger l’outil
OptionTypeDéfautDescription
-a, --archTEXTEautoArchitecture cible (auto, riscv64, x86_64, arm64). Détectée automatiquement depuis l'en-tête ELF.
-d, --depthENTIER20Profondeur de recherche maximale en blocs LCSAJ. Contrôle la longueur des chaînes.
-k, --darknessENTIER5Seuil d'élagage — nombre maximum de visites par nœud. Plus élevé = plus de gadgets, analyse plus lente.
-l, --limitENTIER10Nombre maximum de gadgets à afficher dans la sortie.
-s, --min-scoreENTIER0Score heuristique minimum pour qu'un gadget apparaisse dans les résultats.
-i, --instructionsENTIER15Nombre maximum d'instructions contenues dans un seul nœud LCSAJ.
-v, --verboseDRAPEAU—Active la sortie détaillée pour des résultats par gadget.
-o, --outputCHEMIN—Écrit la sortie dans un fichier. Texte brut par défaut ; à utiliser avec --json pour une sortie JSON.
-b, --bad-charsTEXTE—Octets hexadécimaux à filtrer des adresses de gadgets (par ex. "000a0d").
--jsonDRAPEAU—Produit les gadgets au format JSON structuré. Combiner avec -o pour enregistrer dans un fichier.
--all-execDRAPEAU—Analyse toutes les sections exécutables, pas seulement .text.
-al, --algoDRAPEAU—Utilise strictement le classement algorithmique (contourne le ML).
--versionDRAPEAU—Affiche la version installée et quitte.
--helpDRAPEAU—Affiche le message d'aide et quitte.