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
Kam1n0-Community — Plateforme d'analyse d'assemblage évolutive pour l'indexation, la recherche de clones et la classification d'exécutables à l'aide de techniques statiques, dynamiques et d'apprentissage automatique sur plusieurs architectures. | Kitploit
Outils/GitHubGitHub/mcgill-dmas/kam1n0-community
Analyse des VulnérabilitésAnalyse de CodeRétro-ingénierieFuzzingAnalyse de BinairesApprentissage Automatique
GitHubmcgill-dmas/kam1n0-community

Kam1n0-Community

Plateforme d'analyse d'assemblage évolutive pour l'indexation, la recherche de clones et la classification d'exécutables à l'aide de techniques statiques, dynamiques et d'apprentissage automatique sur plusieurs architectures.

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ôt
627124il y a 3 ansVérifié par Kitploit

Qu'est-ce que Kam1n0 v2 ?

image GitHub (pre-)release Github All Releases JDK PRs Welcome

Build latest development release (Windows) Test release build (Windows)

Kam1n0 v2.x est une plateforme évolutive de gestion et d'analyse d'assembly. Elle permet à un utilisateur d'indexer d'abord une (grande) collection de binaires dans différents dépôts et de fournir divers services analytiques tels que la recherche de clones et la classification. Elle prend en charge l'accès multi-tenant et la gestion des dépôts d'assembly en utilisant le concept d'Application. Une instance d'application contient son propre dépôt exclusif et fournit un service analytique spécialisé. Compte tenu de la polyvalence des tâches de rétro-ingénierie, le serveur Kam1n0 v2.x propose actuellement trois types d'applications de recherche de clones : Asm-Clone, Sym1n0 et Asm2Vec , ainsi qu'une classification d'exécutables basée sur Asm2Vec. De nouveaux types d'applications peuvent être ajoutés ultérieurement à la plateforme.

Un utilisateur peut créer plusieurs instances d'application. Une instance d'application peut être partagée entre un groupe spécifique d'utilisateurs. L'accès en lecture-écriture au dépôt de l'application et son état d'activation/désactivation peuvent être contrôlés par le propriétaire de l'application. Le serveur Kam1n0 v2.x peut servir les applications simultanément en utilisant plusieurs pools de ressources partagées.

Kam1n0 a été développé par Steven H. H. Ding et Miles Q. Li sous la supervision de Benjamin C. M. Fung du Data Mining and Security Lab à l'Université McGill au Canada. Il a remporté le deuxième prix du Hex-Rays Plug-In Contest 2015. Si vous trouvez Kam1n0 utile, veuillez citer notre article :

  • S. H. H. Ding, B. C. M. Fung, and P. Charland. Kam1n0: MapReduce-based Assembly Clone Search for Reverse Engineering. In Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (SIGKDD), pages 461-470, San Francisco, CA: ACM Press, August 2016.

  • S. H. H. Ding, B. C. M. Fung, and P. Charland. Asm2Vec: boosting static representation robustness for binary clone search against code obfuscation and compiler optimization. In Proceedings of the 40th IEEE Symposium on Security and Privacy (S&P), 18 pages, San Francisco, CA: IEEE Computer Society, May 2019.

Asm-Clone

Les applications Asm-Clone tentent de résoudre le problème de recherche efficace de sous-graphes (c'est-à-dire le problème d'isomorphisme de graphes) pour les fonctions d'assembly (temps de requête moyen <1,3 s et temps d'indexation moyen <30 ms pour 2,3 millions de fonctions). Étant donné une fonction cible (celle de gauche comme illustré ci-dessous), elle peut identifier les sous-graphes clonés parmi d'autres fonctions du dépôt (celui de droite comme illustré ci-dessous).

  • Type d'application : Asm-Clone
  • Le service de recherche de clones original utilisé dans Kam1n0 v1.x.
  • Prend actuellement en charge Meta-PC, ARM, PowerPC et TMS320c6 (expérimental).
  • Prend en charge la recherche de clones de sous-graphes au sein d'une certaine famille de code d'assembly.
    • + Bonne interprétabilité du résultat : décomposition en sous-graphes.
    • + Précis pour la recherche au sein de la famille de code donnée.
    • + Utile pour différencier divers correctifs ou versions pour les gros binaires.
    • - Relativement plus sensible aux changements de jeu d'instructions, aux optimisations et à l'obfuscation.
    • - Nécessité de prédéfinir la syntaxe du langage d'assembly.
    • - Nécessité d'avoir du code d'assembly de la même famille choisie dans le dépôt.

Sym1n0

Recherche de clones sémantiques par fuzz testing différencié et résolution de contraintes. Une approche hybride dynamique-statique efficace et évolutive (temps de requête moyen <1 s et temps d'indexation moyen <100 ms pour 1,5 million de fonctions). Étant donné une fonction cible (celle de gauche comme illustré ci-dessous), elle peut identifier les sous-graphes clonés parmi d'autres fonctions du dépôt (celui de droite comme illustré ci-dessous). Prend en charge la visualisation du graphe syntaxique abstrait.

  • Type d'application : Sym1n0 (v2 uniquement)
  • Recherche de clones par exécution symbolique et exécution concrète.
  • Différenciation des fonctions en fonction de leur comportement d'E/S différent.
  • Recherche de clones effectuée sur le graphe syntaxique abstrait construit à partir du Vex IR (propulsé par LibVex).
    • + Recherche de clones entre différentes familles de code d'assembly.
      • Par exemple, binaires x86 indexés mais la requête est du code ARM.
    • + Recherche de clones de sous-graphes.
    • + Prise en charge d'un large éventail de familles via LibVex.
      • x86, AMD64, MIPS32, MIPS64, PowerPC32, PowerPC64, ARM32 et ARM64.
    • + Une approche hybride dynamique-statique efficace.
    • + Idéal pour analyser les firmwares compilés pour différents processeurs.
    • - Sensible aux manipulations lourdes de graphes (telles qu'un aplatissement complet).
    • - Sensible à la décomposition à grande échelle de l'intégrité des blocs de base.

Asm2Vec

Asm2Vec exploite l'apprentissage par représentation. Il comprend la relation sémantique lexicale du code d'assembly. Par exemple, les registres xmm* sont sémantiquement liés aux opérations vectorielles telles que addps. memcpy est similaire à strcpy. Le graphique ci-dessous présente différentes fonctions d'assembly compilées à partir du même code source de gmpz_tdiv_r_2exp dans libgmp. De gauche à droite, les fonctions d'assembly sont compilées avec les options GCC O0, GCC O3, l'obfuscateur O-LLVM Control Flow Graph, l'option Flattening et l'option LLVM obfuscator Bogus Control Flow Graph. Asm2Vec peut les identifier statiquement comme clones.

  • Exploite l'apprentissage par représentation.
  • Comprend la relation sémantique lexicale du code d'assembly.
    • + État de l'art pour la recherche de clones face aux techniques d'obfuscation lourde.
      • (Précision >0,8 pour toutes les options appliquées dans O-LLVM, itérations multiples).
    • + État de l'art pour la recherche de clones face à l'optimisation de code.
      • (Précision >0,8 entre O0 et O3, >0,94 entre O2 et O3)
    • + Résultat encore meilleur que les approches dynamiques les plus récentes.
    • + Beaucoup plus efficace que les approches dynamiques récentes.
    • + Pas besoin de définir l'architecture. Il apprend par lui-même en lisant un grand volume de code.
    • + Approche statique : efficace et évolutive.
    • - Pas de sous-graphes.
    • - Suppose que le code d'assembly provient de la même famille de processeurs.
    • - Approche statique : ne peut pas reconnaître les tables de saut, etc.

Classification des exécutables

Dans cette application, l'utilisateur définit un ensemble de classes logicielles basées sur une parenté fonctionnelle et fournit des binaires appartenant à chaque classe. Ensuite, le système regroupe automatiquement les fonctions en clusters dans lesquels les fonctions sont connectées directement ou indirectement par une relation de clone. Les clusters discriminants pour la classification sont conservés et servent de signatures pour leurs classes. Étant donné un binaire cible, le système indique son degré d'appartenance à chaque classe logicielle.

  • Utilise Asm2Vec comme modèle de calcul de similarité des fonctions

    • + Fournit des résultats de classification interprétables.
    • + Apprend les caractéristiques communes (c'est-à-dire les clusters de fonctions) de chaque classe.
    • + Capable de traiter des ensembles de données plus petits et déséquilibrés qu'un modèle d'apprentissage automatique ordinaire.
    • - La limitation est que l'hypothèse selon laquelle les binaires d'une même classe partagent certaines fonctions communes doit être vérifiée pour que le système fonctionne.

Aperçu de la plateforme

La figure ci-dessous montre les principaux composants de l'interface utilisateur et les fonctionnalités de Kam1n0 v2.x. Nous adoptons un design material. En général, chaque utilisateur dispose d'une liste d'applications, d'une liste de tâches en cours et d'une liste de fichiers de résultats.

  • La liste d'applications affiche les instances d'application détenues par l'utilisateur et partagées avec d'autres.
  • La liste des tâches en cours affiche la progression d'une requête volumineuse (telle que chrome.dll) et de la procédure d'indexation.
  • La liste des fichiers de résultats affiche les résultats enregistrés. Plus de détails sur la conception de l'interface utilisateur se trouvent dans notre tutoriel détaillé.

Instructions d'installation

La version actuelle de Kam1n0 comprend deux installeurs : le serveur central et le plug-in IDA Pro.

Installation du serveur Kam1n0

Le moteur principal de Kam1n0 est purement écrit en Java. Vous avez besoin des dépendances suivantes :

  • [Requis] La dernière distribution JRE/JDK x64 11.x d'Oracle.
  • [Optionnel] La dernière version d'IDA Pro avec le plug-in idapython installé. Le plug-in Python et l'environnement d'exécution devraient déjà être installés avec IDA Pro. Réinstallez IDA Pro si nécessaire.

Téléchargez le fichier Kam1n0-Server.msi depuis notre page de releases. Suivez les instructions pour installer le serveur. Il vous sera demandé de sélectionner un chemin d'installation. IDA Pro est optionnel si le serveur n'a pas à gérer de désassemblage. En d'autres termes, le client utilise le plug-in Kam1n0 pour IDA Pro. Il est fortement recommandé d'installer IDA Pro avec le serveur Kam1n0. Le serveur Kam1n0 détectera automatiquement votre IDA Pro en recherchant l'application par défaut que vous utilisez pour ouvrir les fichiers .i64.

Installation du plug-in IDA Pro

Le plug-in Kam1n0 pour IDA Pro est écrit en Python pour la logique et en HTML/JavaScript pour le rendu. Les dépendances suivantes sont requises pour son installation :

  • [Requis] IDA Pro (>6.7) avec le plug-in idapython installé. Le plug-in Python et l'environnement d'exécution devraient déjà être installés avec IDA Pro. Réinstallez IDA Pro si nécessaire.

Ensuite, téléchargez l'installeur Kam1n0-IDA-Plugin.msi depuis notre page de releases. Suivez les instructions pour installer le plug-in et l'environnement d'exécution. Veuillez noter que le plug-in doit être installé dans le dossier des plug-ins d'IDA Pro, situé dans $IDA_PRO_PATH$/plugins. Par exemple, sur Windows, le chemin peut être C:/Program Files (x86)/IDA 6.95/plugins. L'installeur détectera et validera le chemin.

Configuration de Kam1n0 sur les systèmes basés sur Ubuntu/Debian

  • Assurez-vous de posséder la version Oracle de Java 11. (Pas le default-jdk d'apt.)

    • Ajoutez le PPA d'Oracle puis mettez à jour votre dépôt de packages : sudo add-apt-repository ppa:webupd8team/java
      • Si vous rencontrez des erreurs (telles que ~webupd8team not found), si vous êtes derrière un proxy, assurez-vous de définir et d'exporter vos variables d'environnement http_proxy et https_proxy, puis réessayez avec l'option -E sur sudo. De plus, si vous obtenez une erreur 'add-apt repository command not found', essayez : sudo apt install -y software-properties-common.
    • Ensuite : sudo apt-get update, et sudo apt-get install oracle-java8-installer
      • Vérifiez votre version de Java avec java -version ; vous devrez peut-être définir manuellement la variable d'environnement JAVA_HOME (dans /etc/environment), JAVA_HOME=/usr/lib/jvm/java-11-oracle

Compatibilité ascendante

Les dépôts de code d'assembly et les fichiers de configuration utilisés dans les versions précédentes (<2.0.0) ne sont plus pris en charge par la dernière version. Veuillez nous contacter si vous devez migrer vos anciens dépôts.

Documentation

  • Tutoriel du serveur Kam1n0
    • Configuration et démarrage du moteur
    • Créer un compte et se connecter
    • Créer une application
    • Partage d'application et contrôle d'accès
    • Préparation des données
    • L'URL de l'application pour le plug-in IDA Pro
    • Indexer des fichiers binaires
    • Rechercher avec une fonction d'assembly
      • Vue du graphe de flot
      • Vue de différence textuelle
      • Vue du groupe de clones
    • Rechercher avec un fichier binaire
    • Parcourir un résultat de recherche de clones
      • Les boîtes de résumé

Développement

Clonez la dernière branche stable (n'oubliez pas --recursive !) :```bash git clone --recursive -b master2.x --single-branch https://github.com/McGill-DMaS/Kam1n0-Community

root@kitploit:~
## Importer le projet.
IntelliJ: Importez la racine /kam1n0/kam1n0/ en tant que projet maven. Tous les sous-modules seront chargés en conséquence.
EclipseEE: Ajoutez le dépôt git cloné à la vue git. Importez tous les projets maven du dépôt git.
Vous devrez peut-être modifier le classpath pour corriger d'éventuelles erreurs.
Tous les chemins des ressources sont modifiés dynamiquement lorsqu'on exécute dans un IDE
(à travers le sous-module kam1n0-resources).

Pour construire le projet :```
cd /kam1n0/kam1n0
mvn -DskipTests clean package
mvn -DskipTests package

Les binaires obtenus se trouvent dans /kam1n0/build-bins/

Pour exécuter le code de test, vous devez d'abord télécharger chromedriver.exe depuis http://chromedriver.chromium.org/ et ajouter son chemin absolu dans une variable d'environnement nommée webdriver.chrome.driver. Il est également nécessaire qu'un navigateur Chrome soit installé sur le système. Le code de test lancera une instance de navigateur pour tester les interfaces utilisateur. La procédure de test complète prendra environ 3 heures.``` cd /kam1n0/kam1n0 mvn -DskipTests clean package # you can skip this one if you already built the package mvn -DskipTests package # you can skip this one if you already built the package mvn -DforkMode=never test

root@kitploit:~
Ces commandes ne compilent que Java avec les wheels pré-compilées de libvex et z3. Cela fonctionne directement.  
La construction de libvex et z3 dépend de la plateforme. Nous utilisons un fork de libvex d'Angr.  
Des scripts de construction plus sérieux ainsi que des installateurs pour Windows/Linux peuvent être trouvés sous /kam1n0-builds/

* kam1n0 : Le code source du serveur.
* kam1n0-builds : Le code source de l'installateur et les scripts pour construire la distribution.
* kam1n0-clients : Le code source des clients.

## Versions binaires

Nous avons un serveur Jenkins pour le développement et la livraison continus. La dernière version stable sera publiée ici. Périodiquement, nous synchroniserons notre branche expérimentale interne avec ce dépôt.

## Licence

Le logiciel a été développé par [Steven H. H. Ding](http://stevending.net/), [Miles Q. Li](http://milesqli.github.io/), et [Benjamin C. M. Fung](http://dmas.lab.mcgill.ca/fung/) dans le [McGill Data Mining and Security Lab](http://dmas.lab.mcgill.ca/) et le [Queen's L1NNA Research Laboratory](https://l1nna.com/) au Canada. Il est distribué sous la licence Apache Version 2.0. Veuillez vous référer à [LICENSE.txt](https://github.com/mcgill-dmas/kam1n0-community/blob/HEAD/LICENSE.txt) pour plus de détails.

Copyright 2014-2021 Université McGill et les chercheurs. Tous droits réservés.

## Remerciements

![image](https://img.shields.io/badge/Proudly%20Funded%20by-Defence%20Research%20&%20Development%20Canada%20(DRDC)-orange.svg?style=for-the-badge)

![image](https://img.shields.io/badge/Proudly%20Funded%20by-NSERC%20Canada%20Research%20%20Chairs%20Program-blue.svg?style=for-the-badge)

![image](https://img.shields.io/badge/Special%20thanks%20to-Philippe%20Charland,%20DRDC-orange.svg?style=for-the-badge)

![image](https://img.shields.io/badge/Acknowledgement-NVIDIA%20Corporation%20for%20donating%20the%20Titan%20Xp%20used%20for%20this%20research-blue.svg?style=for-the-badge)

![image](https://img.shields.io/badge/Built%20in-Data%20Mining%20and%20Security%20Lab,%20SIS,%20McGill%20Univrsity-red.svg?style=for-the-badge)

![image](https://img.shields.io/badge/Built%20in-L1NNA%20Research%20Laboratory,%20CS,%20Queen%27s%20Univrsity-red.svg?style=for-the-badge)
Télécharger l’outil
InstalleurComposants inclusDescription
Kam1n0-Server.msiMoteur principalMoteur principal fournissant le service d'indexation et de recherche.
Atelier (Workbench)Interface utilisateur pour gérer les dépôts et le service en cours.
Interface utilisateur WebInterface utilisateur Web pour la recherche/l'indexation de fichiers binaires et de fonctions d'assembly.
Redistribuable Visual C++ pour VS 15Dépendance pour z3.
Kam1n0-IDA-Plugin.msiPlug-inConnecteurs et interface utilisateur.
Packages PyPI pour CefpythonMoteur de rendu pour l'interface utilisateur.
Packages PyPI et dépendantsGestion des packages pour Python. Inclus pour IDA 6.8 et 6.9.
  • Téléchargez la dernière release pour Linux (Kam1n0-IDA-Plugin.tar.gz et Kam1n0-Server.tar.gz) depuis Kam1n0-Community.

  • Extrayez les deux archives (c'est-à-dire tar –xvzf Kam1n0-IDA-Plugin.tar.gz et tar –xvzf Kam1n0-Server.tar.gz)

  • Le fichier Kam1n0-Server.tar.gz créera le répertoire du serveur.

  • À l'intérieur du répertoire server, vous devriez voir un fichier appelé kam1n0.properties, où vous définirez diverses configurations pour kam1n0 ; c'est très important.

  • Définissez kam1n0.data.path à l'endroit où vous souhaitez que les données liées à kam1n0 soient écrites. Nous choisissons de le placer au même endroit que nous conservons notre server. kam1n0.ida.home fait référence à l'emplacement de votre installation IDA. Commentez cette ligne (et kam1n0.ida.batch, la ligne suivante) si vous n'avez pas d'IDA et que vous ne prévoyez pas d'utiliser kam1n0 pour le désassemblage. Pour plus d'informations (précises) sur le fichier kam1n0.properties, consultez le fichier kam1n0.properties.explained.

  • Exécutez kam1n0-server-workbench : java -jar kam1n0-server-workbench.jar. Cela devrait ouvrir une fenêtre, qui vous invite à démarrer kam1n0. Sinon, exécutez kam1n0-server : java -jar kam1n0-server.jar --start. Cela démarre le serveur depuis la console sans fenêtre.

  • Pour vous connecter et l'utiliser, allez à 127.0.0.1:8571 (le port par défaut sur lequel kam1n0 écoute est 8571, mais peut être modifié dans kam1n0.properties) dans votre navigateur. Vous devriez voir la belle interface utilisateur Web de kam1n0. À partir de là, suivez le tutoriel sur le dépôt Kam1n0-Community si vous ne savez pas comment utiliser kam1n0.

  • Détails
  • Tutoriel du plug-in IDA Pro
    • Fonctionnalités
    • Exemple pas à pas
      • Préparation des données
      • Démarrage du moteur et URL de l'application
      • Configuration de la connexion
      • Indexation depuis le plug-in
      • Recherche de fonctions
      • Analyse de composition
      • Recherche de fragment d'assembly
      • Boîte de recherche
    • Comment fonctionne le plug-in
      • Interface utilisateur
      • Synchronisation
      • Communication bidirectionnelle