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
Ponce — Gewinner des IDA 2016 Plugin-Wettbewerbs! Symbolische Ausführung nur einen Klick entfernt! | Kitploit
Tools/GitHubGitHub/illera88/ponce
Reverse EngineeringDebuggerMalware-AnalyseCTFBinäranalyse
GitHubillera88/ponce

Ponce

Gewinner des IDA 2016 Plugin-Wettbewerbs! Symbolische Ausführung nur einen Klick entfernt!

Repository anzeigen
1.6k85vor 1 JahrVon 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
Webseite

Build for Windows Build for OSX Build for Linux

Ponce

Ponce (ausgesprochen [ 'poN θe ] pon-they) ist ein IDA Pro Plugin, das Benutzern die Möglichkeit bietet, Taint-Analyse und symbolische Ausführung an Binärdateien auf einfache und intuitive Weise durchzuführen. Mit Ponce sind Sie nur einen Klick davon entfernt, die volle Leistung modernster symbolischer Ausführung zu nutzen. Vollständig in C/C++ geschrieben.

Warum?

Symbolische Ausführung ist kein neues Konzept in der Sicherheitscommunity. Es existiert schon seit vielen Jahren, aber erst um 2015 herum wurden Open-Source-Projekte wie Triton und Angr geschaffen, um diesen Bedarf zu decken. Trotz der Verfügbarkeit dieser Projekte müssen Endanwender oft selbst spezifische Anwendungsfälle implementieren.

Wir haben diesen Bedarf erkannt und Ponce entwickelt, ein IDA-Plugin, das symbolische Ausführung und Taint-Analyse innerhalb des am häufigsten verwendeten Disassemblers/Debuggers für Reverse Engineers implementiert.

Installation

Ponce funktioniert sowohl mit x86- als auch mit x64-Binärdateien in jeder IDA-Version >= 7.0. Die Installation des Plugins ist so einfach wie das Kopieren der entsprechenden Dateien aus den aktuellen Builds in den Ordner plugins\ Ihres IDA-Installationsverzeichnisses.

Stellen Sie sicher, dass Sie die für Ihre IDA-Version kompilierte Ponce-Binärdatei verwenden, um Inkompatibilitäten zu vermeiden.

Betriebssysteme

Ponce funktioniert nativ unter Windows, Linux und OSX!

Anwendungsfälle

  • Exploit-Entwicklung: Ponce kann Ihnen helfen, einen Exploit weitaus effizienter zu erstellen, da der Exploit-Entwickler leicht sehen kann, welche Speicherbereiche und Register kontrolliert werden, sowie mögliche Adressen, die als ROP-Gadgets genutzt werden können.
  • Malware-Analyse: Eine weitere Verwendung von Ponce betrifft die Analyse von Malware-Code. Die von einer bestimmten Malware-Familie unterstützten Befehle lassen sich leicht ermitteln, indem man einen einfachen bekannten Befehl symbolisiert und alle Bedingungen negiert, unter denen der Befehl geprüft wird.
  • Protokoll-Reversing: Eine der interessantesten Anwendungen von Ponce ist die Möglichkeit, erforderliche Magic Numbers, Header oder sogar ganze Protokolle für kontrollierte Benutzereingaben zu erkennen. Zum Beispiel kann Ponce Ihnen helfen, alle akzeptierten Argumente für ein bestimmtes Kommandozeilenprogramm aufzulisten oder das für einen bestimmten Dateiparser erforderliche Dateiformat zu extrahieren.
  • CTF: Ponce beschleunigt das Reverse Engineering von Binärdateien bei CTFs. Da Ponce vollständig in IDA integriert ist, müssen Sie sich nicht um die Einrichtungszeit kümmern. Es ist einsatzbereit!

Das Plugin wird beim ersten Start automatisch ausgeführt und führt Sie durch die anfängliche Konfiguration. Die Konfiguration wird in einer Konfigurationsdatei gespeichert, sodass Sie sich nicht erneut um das Konfigurationsfenster kümmern müssen.

Verwendungsmodi

  • Tainting-Engine: Diese Engine wird verwendet, um bei jedem Schritt der Binärausführung zu bestimmen, welche Speicherbereiche und Register durch die Benutzereingabe kontrollierbar sind.
  • Symbolic Engine: Diese Engine verwaltet einen symbolischen Zustand von Registern und Teilen des Speichers bei jedem Schritt entlang des Ausführungspfads einer Binärdatei.

Beispiele

Bedingung negieren und injizieren

Im folgenden GIF sehen wir die Verwendung des automatischen Taintings und wie wir eine Bedingung negieren und während des Debuggens in den Speicher injizieren können:

  • Wir wählen die symbolische Engine und setzen die Option, argv zu symbolisieren.
  • Wir identifizieren die Bedingung, die erfüllt sein muss, um das CrackMe zu gewinnen.
  • Wir negieren und injizieren die Lösung jedes Mal, wenn ein Byte unserer Eingabe gegen den Schlüssel geprüft wird.
  • Schließlich erhalten wir den Schlüssel elite, der in den Speicher injiziert wurde, und erreichen somit den Win-Code.

Der Quellcode des CrackMe befindet sich hier

crackmexor_negate_and_inject

Verwendung der Tainting-Engine zur Verfolgung benutzergesteuerter Eingaben

In diesem Beispiel sehen wir die Verwendung der Tainting-Engine mit cmake. Wir:

  • Übergeben eine Datei als Argument an cmake, damit er sie parst.
  • Wählen aus, dass wir die Tainting-Engine verwenden möchten.
  • Taintieren den Puffer, den fread() aus der Datei liest.
  • Setzen die Ausführung unter Debugger-Kontrolle fort, um zu sehen, wohin die Taint-Eingabe verschoben wird.
  • Ponce benennt die getainteten Funktionen um. Dies sind die Funktionen, die irgendwie vom Benutzer beeinflusst werden, nicht die einfach ausgeführten Funktionen.

cmake_tainting_fread

Verwendung von Negate, Inject & Restore

Im nächsten Beispiel verwenden wir die Snapshot-Engine:

  • Übergeben eine Datei als Argument.
  • Wählen aus, dass wir die symbolische Engine verwenden möchten.
  • Taintieren den Puffer, den fread() aus der Datei liest.
  • Erstellen einen Snapshot in der Funktion, die den aus der Datei gelesenen Puffer parst.
  • Wenn eine Bedingung ausgewertet wird, negieren wir sie, injizieren die Lösung in den Speicher und stellen den Snapshot damit wieder her.
  • Die Lösung wird "gültig" sein, sodass wir die vorhandenen Bedingungen erfüllen.

fread_test_negate_restore_inject Der Beispielquellcode befindet sich hier

Verwendung

In diesem Abschnitt listen wir die verschiedenen Ponce-Optionen sowie die Tastaturkürzel auf:

  • Zugriff auf das Konfigurations- und Taint/Symbolic-Fenster: Edit > Ponce > Show Config (Ctl+Shift+P und Ctl+Alt+T)

2016-09-15 11_39_08-configuracion

  • Ponce-Tracing aktivieren/deaktivieren (Ctl+Shift+E)

2016-09-15 11_31_34-

  • Ein Register symbolisieren/taintieren (Ctl+Shift+R)

2016-09-15 11_32_32-

  • Speicher symbolisieren/taintieren. Kann aus der IDA-Ansicht oder der Hex-Ansicht erfolgen (Ctl+Shift+M)

2016-09-15 11_32_52-ida - testproject idb testproject exe c__users_default default-pc_documents_vi2016-09-15 11_33_10-taint _ symbolize memory range

2016-09-15 12_09_11-inicio

  • Formel lösen (Ctl+Shift+S)

2016-09-15 11_35_11-

  • Negieren & Injizieren (Ctl+Shift+N)

2016-09-15 11_34_44-

  • Negieren, Injizieren & Snapshot wiederherstellen (Ctl+Shift+I)

2016-09-15 11_47_19-

  • Ausführungs-Snapshot erstellen (Ctl+Shift+C)

2016-09-15 11_37_40-

  • Ausführungs-Snapshot wiederherstellen (Ctl+Shift+S)

2016-09-15 11_38_10-

  • Ausführungs-Snapshot löschen (Ctl+Shift+D)

2016-09-15 11_38_23-

  • Nativ ausführen (Ctl+Shift+F9)

2016-09-15 12_07_10-

Triton

Ponce baut auf dem Triton-Framework auf, um Semantiken, Taint-Analyse und symbolische Ausführung bereitzustellen. Triton ist ein großartiges Open-Source-Projekt, das von Quarkslab gesponsert und hauptsächlich von Jonathan Salwan mit einer umfangreichen Bibliothek gepflegt wird. Wir möchten Jonathans Arbeit mit Triton danken und unterstützen. Du rockst! :)

Erstellen

Seit Ponce v0.3 haben wir den Build-Prozess auf CMake umgestellt. Dadurch vereinheitlichen wir die Konfiguration und Erstellung für Linux, Windows und OSX. Wir unterstützen jetzt die Rückmeldung im Pseudocode über symbolische oder Taint-Instruktionen. Damit diese Funktion funktioniert, müssen Sie hexrays.hpp in Ihren IDA-SDK-Include-Ordner einfügen. hexrays.hpp befindet sich unter plugins/hexrays_sdk/ in Ihrem IDA-Installationspfad. Falls Sie den Hex-Rays Decompiler nicht erworben haben, können Sie Ponce trotzdem mit -DBUILD_HEXRAYS_SUPPORT=OFF erstellen. Wir verwenden Github Actions als CI-Umgebung. Überprüfen Sie die Aktionsdateien, wenn Sie verstehen möchten, wie der Build-Prozess abläuft.

FAQ

Warum der Name Ponce?

Juan Ponce de León (1474 – Juli 1521) war ein spanischer Entdecker und Konquistador. Er entdeckte Florida in den Vereinigten Staaten. Das IDA-Plugin wird Ihnen helfen, die verschiedenen Pfade in einer Binärdatei zu entdecken, zu erkunden und hoffentlich zu erobern.

Kann Ponce zur Analyse von Windows-, OS X- und Linux-Binärdateien verwendet werden?

Ja, Sie können Ponce nativ in IDA für Windows verwenden oder sich remote mit einem Linux- oder OS X-Rechner verbinden und es nutzen. In der nächsten Ponce-Version werden wir Ponce nativ für Linux- und OS X-IDA-Versionen unterstützen.

Wie viele Anweisungen pro Sekunde kann Ponce verarbeiten?

In unseren Tests erreichen wir eine Verarbeitung von 3000 Anweisungen pro Sekunde. Wir planen, den PIN-Tracer von IDA zu verwenden, um die Geschwindigkeit zu erhöhen.

Etwas funktioniert nicht!

Eröffnen Sie ein Issue, wir werden es schnellstmöglich lösen ;)

Ich liebe Ihr Projekt! Kann ich mitarbeiten?

Klar! Bitte machen Sie Pull-Requests und arbeiten Sie an den offenen Issues. Wir werden Sie in Form von Bier für Ihre Hilfe bezahlen ;)

Einschränkungen

Concolic Execution und Ponce haben einige Probleme:

  • Symbolischer Speicherzugriff/Schreiben: Wenn der Index, der zum Lesen eines Speicherwerts verwendet wird, symbolisch ist, wie in x = array[symbolic_index], können Probleme auftreten, die zum Verlust der Verfolgung der getainteten/symbolisierten benutzergesteuerten Eingabe führen können.

  • Triton funktioniert nicht gut mit Gleitkomma-Anweisungen.

  • Concolic Execution analysiert nur die ausgeführten Anweisungen. Das bedeutet, dass die symbolische Verfolgung in Fällen wie dem folgenden verloren geht:

    root@kitploit:~
    int check(char myinput)  // Eingabe ist symbolisch/getaintet
    {
    int flag = 0;
    if (myinput == 'A')  // Diese Bedingung ist symbolisch/getaintet
      flag = 1
    else
      flag = -1;
    return flag; // flag ist nicht symbolisch/getaintet!
    }
    

Autoren

  • Alberto Garcia Illera @algillera [email protected]
  • Francisco Oca @francisco_oca [email protected]
Tool herunterladen