Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
Tools/GitHubGitHub/mcgill-dmas/kam1n0-community
SchwachstellenanalyseCode-AnalyseReverse EngineeringFuzzingBinäranalyseMaschinelles Lernen
GitHubmcgill-dmas/kam1n0-community

Kam1n0-Community

Skalierbare Assembly-Analyseplattform zur Indexierung, Klonsuche und Klassifikation ausführbarer Dateien mittels statischer, dynamischer und maschineller Lernverfahren für mehrere Architekturen.

Repository anzeigen
6271246vor 3 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Was ist Kam1n0 v2?

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

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

Kam1n0 v2.x ist eine skalierbare Plattform zur Verwaltung und Analyse von Assembler-Code. Sie ermöglicht einem Benutzer, zunächst eine (große) Sammlung von Binärdateien in verschiedene Repositories zu indizieren und bietet verschiedene Analysedienste wie Clone-Suche und Klassifizierung. Sie unterstützt Multi-Tenancy-Zugriff und -Verwaltung von Assembly-Repositories durch das Konzept der Application. Eine Anwendungsinstanz enthält ihr eigenes exklusives Repository und bietet einen spezialisierten Analysedienst. Angesichts der Vielseitigkeit von Reverse-Engineering-Aufgaben bietet der Kam1n0 v2.x-Server derzeit drei verschiedene Arten von Clone-Such-Anwendungen: Asm-Clone, Sym1n0 und Asm2Vec, sowie eine Klassifizierung ausführbarer Dateien auf Basis von Asm2Vec. Neue Anwendungstypen können der Plattform hinzugefügt werden.

Ein Benutzer kann mehrere Anwendungsinstanzen erstellen. Eine Anwendungsinstanz kann mit einer bestimmten Gruppe von Benutzern geteilt werden. Der Lese-/Schreibzugriff auf das Anwendungs-Repository und der Ein-/Aus-Status können vom Anwendungsbesitzer gesteuert werden. Der Kam1n0 v2.x-Server kann die Anwendungen gleichzeitig über mehrere gemeinsam genutzte Ressourcenpools bedienen.

Kam1n0 wurde von Steven H. H. Ding und Miles Q. Li unter der Leitung von Benjamin C. M. Fung vom Data Mining and Security Lab an der McGill University in Kanada entwickelt. Es gewann den zweiten Preis beim Hex-Rays Plug-In Contest 2015. Wenn Sie Kam1n0 nützlich finden, zitieren Sie bitte unsere Arbeiten:

  • 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

Asm-Clone-Anwendungen versuchen, das effiziente Subgraph-Suchproblem (d.h. das Graph-Isomorphieproblem) für Assembler-Funktionen zu lösen (durchschnittliche Abfragezeit <1,3s und durchschnittliche Indexzeit <30ms bei 2,3 Mio. Funktionen). Bei einer gegebenen Zielfunktion (links im Bild) kann es die geklonten Subgraphen unter anderen Funktionen im Repository identifizieren (rechts im Bild).

  • Anwendungstyp: Asm-Clone
  • Der ursprüngliche Clone-Suchdienst, der in Kam1n0 v1.x verwendet wurde.
  • Unterstützt derzeit Meta-PC, ARM, PowerPC und TMS320c6 (experimentell).
  • Unterstützt die Subgraph-Clone-Suche innerhalb einer bestimmten Assembler-Code-Familie.
    • + Gute Interpretierbarkeit des Ergebnisses: Zerlegung in Subgraphen.
    • + Genaue Suche innerhalb der gegebenen Code-Familie.
    • + Geeignet zum Vergleichen verschiedener Patches oder Versionen großer Binärdateien.
    • - Relativ empfindlicher gegenüber Änderungen des Befehlssatzes, Optimierungen und Obfuskation.
    • - Die Syntax der Assembler-Code-Sprache muss vorab definiert werden.
    • - Im Repository muss Assembler-Code derselben gewählten Familie vorhanden sein.

Sym1n0

Semantische Clone-Suche durch differenziertes Fuzz-Testing und Constraint-Lösung. Ein effizienter und skalierbarer dynamisch-statischer hybrider Ansatz (durchschnittliche Abfragezeit <1s, durchschnittliche Indexzeit <100ms bei 1,5 Mio. Funktionen). Bei einer gegebenen Zielfunktion (links im Bild) kann das geklonte Subgraphen unter anderen Funktionen im Repository identifiziert werden (rechts im Bild). Unterstützt Visualisierung von abstrakten Syntaxgraphen.

  • Anwendungstyp: Sym1n0 (nur v2)
  • Clone-Suche durch sowohl symbolische als auch konkrete Ausführung.
  • Unterscheidung von Funktionen basierend auf ihrem unterschiedlichen I/O-Verhalten.
  • Clone-Suche auf dem aus Vex IR (unter Verwendung von LibVex) erstellten abstrakten Syntaxgraphen.
    • + Clone-Suche über verschiedene Assembler-Code-Familien hinweg.
      • Zum Beispiel indizierte x86-Binärdateien, aber die Abfrage ist ARM-Code.
    • + Subgraph-Clone-Suche.
    • + Unterstützt eine breite Palette von Familien über LibVex.
      • x86, AMD64, MIPS32, MIPS64, PowerPC32, PowerPC64, ARM32 und ARM64.
    • + Ein effizienter dynamisch-statischer hybrider Ansatz.
    • + Ideal für die Analyse von Firmware, die für verschiedene Prozessoren kompiliert wurde.
    • - Empfindlich gegenüber starken Graphmanipulationen (wie einer vollständigen Abflachung).
    • - Empfindlich gegenüber großflächigen Verletzungen der Basisblock-Integrität.

Asm2Vec

Asm2Vec nutzt Repräsentationslernen. Es versteht die lexikalisch-semantische Beziehung von Assemblercode. Zum Beispiel sind xmm*-Register semantisch mit Vektoroperationen wie addps verwandt. memcpy ist ähnlich wie strcpy. Die Grafik unten zeigt verschiedene Assemblerfunktionen, die aus demselben Quellcode von gmpz_tdiv_r_2exp in libgmp kompiliert wurden. Von links nach rechts sind die Assemblerfunktionen mit GCC O0-Option, GCC O3-Option, O-LLVM-Obfuscator Control Flow Graph, Flattening-Option und LLVM-Obfuscator Bogus Control Flow Graph-Option kompiliert. Asm2Vec kann sie statisch als Klone identifizieren.

  • Nutzt Repräsentationslernen.
  • Versteht die lexikalisch-semantische Beziehung von Assemblercode.
    • + Neuester Stand der Technik für die Clone-Suche gegen starke Code-Obfuskationstechniken.
      • (>0,8 Genauigkeit für alle in O-LLVM angewandten Optionen, mehrere Iterationen).
    • + Neuester Stand der Technik für die Clone-Suche gegen Code-Optimierung.
      • (>0,8 Genauigkeit zwischen O0 und O3, >0,94 Genauigkeit zwischen O2 und O3)
    • + Sogar besseres Ergebnis als der neueste dynamische Ansatz.
    • + Viel effizienter als neuere dynamische Ansätze.
    • + Keine Definition der Architektur erforderlich. Es lernt selbstständig durch das Lesen großer Code-Mengen.
    • + Statischer Ansatz: effizient und skalierbar.
    • - Keine Subgraphen.
    • - Annahme, dass der Assemblercode von derselben Prozessorfamilie stammt.
    • - Statischer Ansatz: Kann Sprungtabellen usw. nicht erkennen.

Klassifizierung ausführbarer Dateien

In dieser Anwendung definiert der Benutzer eine Reihe von Softwareklassen, die auf funktionaler Verwandtschaft basieren, und stellt Binärdateien bereit, die zu jeder Klasse gehören. Dann gruppiert das System automatisch Funktionen in Cluster, in denen Funktionen direkt oder indirekt durch eine Clone-Beziehung verbunden sind. Die Cluster, die für die Klassifizierung diskriminierend sind, werden beibehalten und dienen als Signaturen ihrer Klassen. Bei einer gegebenen Ziel-Binärdatei zeigt das System den Grad an, zu dem es zu jeder Softwareklasse gehört.

  • Verwendet Asm2Vec als Berechnungsmodell für Funktionsähnlichkeit

    • + Liefert interpretierbare Klassifizierungsergebnisse.
    • + Lernt gemeinsame Merkmale (d. h. Funktionscluster) jeder Klasse.
    • + Kann kleinere und unausgeglichene Datensätze besser verarbeiten als ein gewöhnliches maschinelles Lernmodell.
    • - Die Einschränkung besteht darin, dass die Annahme, dass Binärdateien derselben Klasse einige gemeinsame Funktionen teilen, für die Funktion des Systems erforderlich ist.

Plattform-Übersicht

Die folgende Abbildung zeigt die wichtigsten UI-Komponenten und Funktionen von Kam1n0 v2.x. Wir verwenden ein Material Design. Im Allgemeinen hat jeder Benutzer eine Anwendungsliste, eine Liste laufender Aufträge und eine Ergebnisdateiliste.

  • Die Anwendungsliste zeigt die dem Benutzer gehörenden und von anderen geteilten Anwendungsinstanzen.
  • Die Liste laufender Aufträge zeigt den Fortschritt einer großen Abfrage (z. B. chrome.dll) und des Indizierungsvorgangs.
  • Die Ergebnisdateiliste zeigt die gespeicherten Ergebnisse. Weitere Details zum UI-Design finden Sie in unserem ausführlichen Tutorial.

Installationsanleitung

Die aktuelle Version von Kam1n0 besteht aus zwei Installationsprogrammen: dem Kernserver und dem IDA Pro-Plug-in.

Installieren des Kam1n0-Servers

Die Kam1n0-Kern-Engine ist vollständig in Java geschrieben. Sie benötigen die folgenden Abhängigkeiten:

  • [Erforderlich] Die neueste x64 11.x JRE/JDK-Distribution von Oracle.
  • [Optional] Die neueste Version von IDA Pro mit installiertem idapython-Plug-in. Das Python-Plug-in und die Laufzeit sollten bereits mit IDA Pro installiert sein. Installieren Sie IDA Pro bei Bedarf neu.

Laden Sie die Datei Kam1n0-Server.msi von unserer Release-Seite herunter. Folgen Sie den Anweisungen zur Installation des Servers. Sie werden aufgefordert, einen Installationspfad auszuwählen. IDA Pro ist optional, wenn der Server sich nicht mit dem Disassemblieren befassen muss. Mit anderen Worten: Die Client-Seite verwendet das Kam1n0-Plug-in für IDA Pro. Es wird dringend empfohlen, IDA Pro zusammen mit dem Kam1n0-Server zu installieren. Der Kam1n0-Server erkennt Ihre IDA Pro automatisch, indem er nach der Standardanwendung sucht, die Sie zum Öffnen von .i64-Dateien verwenden.

Installieren des IDA Pro-Plug-ins

Das Kam1n0 IDA Pro-Plug-in ist in Python für die Logik und in HTML/JavaScript für die Darstellung geschrieben. Für die Installation sind die folgenden Abhängigkeiten erforderlich:

  • [Erforderlich] IDA Pro (>6.7) mit installiertem idapython-Plug-in. Das Python-Plug-in und die Laufzeit sollten bereits mit IDA Pro installiert sein. Installieren Sie IDA Pro bei Bedarf neu.

Laden Sie als Nächstes den Installer Kam1n0-IDA-Plugin.msi von unserer Release-Seite herunter. Folgen Sie den Anweisungen zur Installation des Plug-ins und der Laufzeit. Bitte beachten Sie, dass das Plug-in im IDA Pro-Plugins-Ordner installiert werden muss, der sich unter $IDA_PRO_PATH$/plugins befindet. Beispielsweise könnte der Pfad unter Windows C:/Program Files (x86)/IDA 6.95/plugins lauten. Der Installer erkennt und validiert den Pfad.

Einrichten von Kam1n0 auf Ubuntu/Debian-basierten Systemen

  • Stellen Sie sicher, dass Sie die Oracle Version von Java 11 haben. (Nicht default-jdk in apt.)

    • Fügen Sie das PPA von Oracle hinzu und aktualisieren Sie dann Ihr Paket-Repository: sudo add-apt-repository ppa:webupd8team/java
      • Wenn Sie auf Fehler stoßen (wie ~webupd8team not found), stellen Sie bei Verwendung eines Proxys sicher, dass Sie Ihre Umgebungsvariablen http_proxy und https_proxy setzen und exportieren, und versuchen Sie es dann erneut mit der Option -E bei sudo. Wenn Sie außerdem einen Befehl 'add-apt repository not found error' erhalten, versuchen Sie: sudo apt install -y software-properties-common.
    • Danach: sudo apt-get update und sudo apt-get install oracle-java8-installer
      • Überprüfen Sie Ihre Java-Version mit java -version; Sie müssen möglicherweise die Umgebungsvariable JAVA_HOME manuell setzen (in /etc/environment), JAVA_HOME=/usr/lib/jvm/java-11-oracle

Rückwärtskompatibilität

Die Assembly-Code-Repositories und Konfigurationsdateien, die in früheren Versionen (<2.0.0) verwendet wurden, werden von der neuesten Version nicht mehr unterstützt. Bitte kontaktieren Sie uns, wenn Sie Ihre alten Repositories migrieren müssen.

Dokumentation

  • Kam1n0 Server Tutorial
    • Konfiguration und Engine-Start
    • Ein Konto registrieren und anmelden
    • Eine Anwendung erstellen
    • Anwendungsfreigabe und Zugriffskontrolle
    • Vorbereiten der Daten
    • Die Anwendungs-URL für das IDA Pro-Plug-in
    • Binärdateien indizieren
    • Suche mit einer Assemblerfunktion
      • Flussdiagrammansicht
      • Text-Diff-Ansicht
      • Clone-Gruppen-Ansicht
    • Suche mit einer Binärdatei
    • Ein Clone-Suchergebnis durchsuchen
      • Die Zusammenfassungsboxen

Entwicklung

Klonen Sie den neuesten stabilen Branch (vergessen Sie nicht --recursive!):```bash git clone --recursive -b master2.x --single-branch https://github.com/McGill-DMaS/Kam1n0-Community

root@kitploit:~
## Importieren des Projekts.
IntelliJ: Importieren Sie das Root-Verzeichnis /kam1n0/kam1n0/ als Maven-Projekt. Alle Submodule werden entsprechend geladen.
EclipseEE: Fügen Sie das geklonte Git-Repository zur Git-Ansicht hinzu. Importieren Sie alle Maven-Projekte aus dem Git-Repository.
Möglicherweise müssen Sie den Classpath anpassen, um eventuelle Fehler zu beheben.
Alle Ressourcenpfade werden dynamisch geändert, wenn innerhalb einer IDE ausgeführt wird
(über das Submodul kam1n0-resources).

So erstellen Sie das Projekt:```
cd /kam1n0/kam1n0
mvn -DskipTests clean package
mvn -DskipTests package

Die resultierenden Binärdateien befinden sich in /kam1n0/build-bins/

Um den Testcode auszuführen, müssen Sie zuerst chromedriver.exe von http://chromedriver.chromium.org/ herunterladen und seinen absoluten Pfad in eine Umgebungsvariable namens webdriver.chrome.driver einfügen. Es wird außerdem vorausgesetzt, dass ein Chrome-Browser im System installiert ist. Der Testcode startet eine Browser-Instanz, um die UI-Schnittstellen zu testen. Der gesamte Testvorgang dauert etwa 3 Stunden.``` 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:~
Diese Befehle kompilieren Java nur mit vorkompilierten Wheels von libvex und z3. Es funktioniert sofort.
Der Build von libvex und z3 ist plattformabhängig. Wir verwenden einen Fork von libvex von Angr.
Weitere ernsthafte Build-Skripte sowie Installationsprogramme für Windows/Linux finden Sie unter /kam1n0-builds/

* kam1n0: Der Quellcode des Servers.
* kam1n0-builds: Installationsquellcode und Skripte zum Erstellen der Distribution.
* kam1n0-clients: Der Quellcode der Clients.

## Binäre Veröffentlichungen

Wir haben einen Jenkin-Server für kontinuierliche Entwicklung und Auslieferung. Die neueste stabile Version wird hier veröffentlicht. Regelmäßig werden wir unseren internen experimentellen Zweig mit diesem Repository synchronisieren.


## Lizenzierung

Die Software wurde entwickelt von [Steven H. H. Ding](http://stevending.net/), [Miles Q. Li](http://milesqli.github.io/), und [Benjamin C. M. Fung](http://dmas.lab.mcgill.ca/fung/) im [McGill Data Mining and Security Lab](http://dmas.lab.mcgill.ca/) und [Queen's L1NNA Research Laboratory](https://l1nna.com/) in Kanada. Es wird unter der Apache License Version 2.0 vertrieben. Einzelheiten finden Sie in [LICENSE.txt](https://github.com/mcgill-dmas/kam1n0-community/blob/master2.x/LICENSE.txt).

Urheberrecht 2014-2021 McGill University und die Forscher. Alle Rechte vorbehalten.

## Danksagung

![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)
Tool herunterladen
InstallationsprogrammEnthaltene KomponentenBeschreibung
Kam1n0-Server.msiKern-EngineHaupt-Engine, die Dienste für Indizierung und Suche bereitstellt.
WorkbenchEine Benutzeroberfläche zur Verwaltung der Repositories und des laufenden Dienstes.
Web-BenutzeroberflächeWeb-Benutzeroberfläche zum Suchen/Indizieren von Binärdateien und Assemblerfunktionen.
Visual C++ Redistributable für VS 15Abhängigkeit für z3.
Kam1n0-IDA-Plugin.msiPlug-inVerbindungsstücke und Benutzeroberfläche.
PyPI-Räder für CefpythonRendering-Engine für die Benutzeroberfläche.
PyPI und abhängige RäderPaketverwaltung für Python. Enthalten für IDA 6.8 & 6.9.
  • Laden Sie die neueste Version für Linux (Kam1n0-IDA-Plugin.tar.gz und Kam1n0-Server.tar.gz) von Kam1n0-Community herunter.

  • Entpacken Sie die zwei Tarballs (d.h. tar –xvzf Kam1n0-IDA-Plugin.tar.gz und tar –xvzf Kam1n0-Server.tar.gz)

  • Die Datei Kam1n0-Server.tar.gz erstellt das Server-Verzeichnis.

  • Innerhalb des server-Verzeichnisses sollten Sie eine Datei namens kam1n0.properties sehen, in der Sie verschiedene Konfigurationen für kam1n0 festlegen; dies ist sehr wichtig.

  • Setzen Sie kam1n0.data.path auf den Ort, an dem Ihre kam1n0-bezogenen Daten geschrieben werden sollen. Wir wählen, es am gleichen Ort wie unser server zu platzieren. kam1n0.ida.home bezieht sich darauf, wo Ihre IDA-Installation ist. Kommentieren Sie diese Zeile (und die folgende Zeile kam1n0.ida.batch) aus, wenn Sie kein IDA haben und kam1n0 nicht für die Disassemblierung verwenden möchten. Weitere (genaue) Informationen zur Datei kam1n0.properties finden Sie in der Datei kam1n0.properties.explained.

  • Führen Sie kam1n0-server-workbench aus: java -jar kam1n0-server-workbench.jar. Dies sollte ein Fenster öffnen, das Sie auffordert, kam1n0 tatsächlich zu starten. Alternativ führen Sie kam1n0-server aus: java -jar kam1n0-server.jar --start. Dadurch wird der Server von der Konsole aus ohne Fenster gestartet.

  • Um eine Verbindung herzustellen und es zu verwenden, gehen Sie in Ihrem Browser zu 127.0.0.1:8571 (der Standardport, den kam1n0 überwacht, sollte 8571 sein, kann aber in kam1n0.properties geändert werden). Sie sollten die schöne Web-UI von kam1n0 sehen. Folgen Sie dann dem Tutorial im Kam1n0-Community-Repository, wenn Sie nicht wissen, wie man kam1n0 verwendet.

  • Details
  • IDA Pro-Plug-in-Tutorial
    • Funktionalitäten
    • Beispiel durchgehen
      • Vorbereiten der Daten
      • Engine-Start und Anwendungs-URL
      • Verbindungskonfiguration
      • Indizierung vom Plug-in aus
      • Funktionssuche
      • Kompositionsanalyse
      • Assembly-Fragment-Suche
      • Suchbox
    • Wie funktioniert das Plug-in?
      • Benutzeroberfläche
      • Synchronisierung
      • Zwei-Wege-Kommunikation