Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
Ponce — Vincitore del concorso plugin IDA 2016! Esecuzione Simbolica a un clic di distanza! | Kitploit
Strumenti/GitHubGitHub/illera88/ponce
Reverse EngineeringDebuggerAnalisi MalwareCTFAnalisi di Binari
GitHubillera88/ponce

Ponce

Vincitore del concorso plugin IDA 2016! Esecuzione Simbolica a un clic di distanza!

Vedi Repository
1.6k851 anno faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
Sito web

Build for Windows Build for OSX Build for Linux

Ponce

Ponce (pronunciato [ 'poN θe ] pon-they ) è un plugin per IDA Pro che fornisce agli utenti la possibilità di eseguire l'analisi di taint e l'esecuzione simbolica su binari in modo facile e intuitivo. Con Ponce sei a un clic di distanza da tutta la potenza dell'esecuzione simbolica all'avanguardia. Interamente scritto in C/C++.

Perché?

L'esecuzione simbolica non è un concetto nuovo nella comunità della sicurezza. Esiste da molti anni, ma solo intorno al 2015 progetti open source come Triton e Angr sono stati creati per affrontare questa esigenza. Nonostante la disponibilità di questi progetti, spesso gli utenti finali devono implementare da soli casi d'uso specifici.

Abbiamo affrontato queste esigenze creando Ponce, un plugin per IDA che implementa l'esecuzione simbolica e l'analisi di taint all'interno del disassemblatore/debugger più utilizzato dai reverse engineer.

Installazione

Ponce funziona con binari x86 e x64 in qualsiasi versione di IDA >= 7.0. Installare il plugin è semplice come copiare i file appropriati dalle ultime build nella cartella plugins\ nella directory di installazione di IDA.

Assicurati di utilizzare il binario di Ponce compilato per la tua versione di IDA per evitare incompatibilità.

Supporto OS

Ponce funziona nativamente su Windows, Linux e OSX!

Casi d'uso

  • Sviluppo di exploit: Ponce può aiutarti a creare un exploit in modo molto più efficiente, poiché lo sviluppatore di exploit può vedere facilmente quali parti della memoria e quali registri controlli, nonché gli indirizzi possibili che possono essere sfruttati come gadget ROP.
  • Analisi malware: Un altro uso di Ponce è legato al codice malware. Analizzare i comandi supportati da una particolare famiglia di malware è facilmente determinato simbolizzando un semplice comando noto e negando tutte le condizioni in cui il comando viene verificato.
  • Reverse engineering di protocolli: Uno degli usi più interessanti di Ponce è la possibilità di riconoscere magic number, header o persino interi protocolli richiesti per l'input utente controllato. Ad esempio, Ponce può aiutarti a elencare tutti gli argomenti accettati per un dato binario a riga di comando o estrarre il formato file richiesto per un parser di file specifico.
  • CTF: Ponce accelera il processo di reverse engineering dei binari durante i CTF. Poiché Ponce è completamente integrato in IDA, non devi preoccuparti dei tempi di configurazione. È pronto per essere utilizzato!

Il plugin verrà eseguito automaticamente, guidandoti attraverso la configurazione iniziale la prima volta che viene eseguito. La configurazione verrà salvata in un file di configurazione, così non dovrai più preoccuparti della finestra di configurazione.

Modalità d'uso

  • Motore di taint: Questo motore viene utilizzato per determinare, ad ogni passo dell'esecuzione del binario, quali parti della memoria e dei registri sono controllabili dall'input dell'utente.
  • Motore simbolico: Questo motore mantiene uno stato simbolico dei registri e di parte della memoria ad ogni passo nel percorso di esecuzione di un binario.

Esempi

Nega e inietta una condizione

Nel prossimo GIF possiamo vedere l'uso del taint automatico e come possiamo negare una condizione e iniettarla in memoria durante il debug:

  • Selezioniamo il motore simbolico e impostiamo l'opzione per simbolizzare argv.
  • Identifichiamo la condizione che deve essere soddisfatta per vincere il crackMe.
  • Negliamo e iniettiamo la soluzione ogni volta che un byte del nostro input viene confrontato con la chiave.
  • Finalmente otteniamo la chiave elite che è stata iniettata in memoria e quindi raggiungiamo il codice Win.

Il codice sorgente del crackme può essere trovato qui

crackmexor_negate_and_inject

Utilizzo del motore di taint per tracciare l'input controllato dall'utente

In questo esempio possiamo vedere l'uso del motore di taint con cmake. Stiamo:

  • Passando un file come argomento a cmake per fargli analizzare il file.
  • Selezioniamo che vogliamo usare il motore di taint
  • Taintiamo il buffer che ```fread()```` legge dal file.
  • Riprendiamo l'esecuzione sotto il controllo del debugger per vedere dove viene spostato l'input taintato.
  • Ponce rinominerà le funzioni taintate. Queste sono le funzioni su cui l'utente ha in qualche modo influenza, non le funzioni semplicemente eseguite.

cmake_tainting_fread

Usa Nega, Inietta e Ripristina

Nel prossimo esempio stiamo usando il motore di snapshot:

  • Passando un file come argomento.
  • Selezioniamo che vogliamo usare il motore simbolico.
  • Taintiamo il buffer che ```fread()```` legge dal file.
  • Creiamo uno snapshot nella funzione che analizza il buffer letto dal file.
  • Quando una condizione viene valutata, la neghiamo, iniettiamo la soluzione in memoria e ripristiniamo lo snapshot con essa.
  • La soluzione sarà 'valida', quindi soddisfaremo le condizioni esistenti.

fread_test_negate_restore_inject Il codice sorgente dell'esempio può essere trovato qui

Utilizzo

In questa sezione elencheremo le diverse opzioni di Ponce e le scorciatoie da tastiera:

  • Accedi alla configurazione e alle finestre di taint/simbolico: Modifica > Ponce > Mostra Config (Ctrl+Maiusc+P e Ctrl+Alt+T)

2016-09-15 11_39_08-configuracion

  • Abilita/Disabilita tracciamento Ponce (Ctrl+Maiusc+E)

2016-09-15 11_31_34-

  • Simbolizza/tainta un registro (Ctrl+Maiusc+R)

2016-09-15 11_32_32-

  • Simbolizza/tainta memoria. Può essere fatto dalla Vista IDA o dalla Vista Hex (Ctrl+Maiusc+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

  • Risolvi formula (Ctrl+Maiusc+S)

2016-09-15 11_35_11-

  • Nega e Inietta (Ctrl+Maiusc+N)

2016-09-15 11_34_44-

  • Nega, Inietta e Ripristina Snapshot (Ctrl+Maiusc+I)

2016-09-15 11_47_19-

  • Crea Snapshot di Esecuzione (Ctrl+Maiusc+C)

2016-09-15 11_37_40-

  • Ripristina Snapshot di Esecuzione (Ctrl+Maiusc+S)

2016-09-15 11_38_10-

  • Elimina Snapshot di Esecuzione (Ctrl+Maiusc+D)

2016-09-15 11_38_23-

  • Esegui Nativo (Ctrl+Maiusc+F9)

2016-09-15 12_07_10-

Triton

Ponce si basa sul framework Triton per fornire semantica, analisi di taint ed esecuzione simbolica. Triton è un fantastico progetto Open Source sponsorizzato da Quarkslab e mantenuto principalmente da Jonathan Salwan con una ricca libreria. Vorremmo ringraziare e sostenere il lavoro di Jonathan con Triton. Sei grande! :)

Compilazione

Dalla versione 0.3 di Ponce abbiamo spostato il processo di compilazione su CMake. In questo modo unifichiamo il modo in cui la configurazione e la compilazione avvengono per Linux, Windows e OSX. Ora supportiamo la possibilità di fornire feedback sul pseudocodice riguardante le istruzioni simboliche o di taint. Per far funzionare questa funzione, devi aggiungere hexrays.hpp alla cartella include dell'IDA SDK. hexrays.hpp si trova in plugins/hexrays_sdk/ nel percorso di installazione di IDA. Se non hai acquistato il decompilatore hex-rays, puoi comunque compilare Ponce usando -DBUILD_HEXRAYS_SUPPORT=OFF. Usiamo Github Actions come ambiente CI. Controlla i file delle azioni se vuoi capire come avviene il processo di compilazione.

FAQ

Perché il nome Ponce?

Juan Ponce de León (1474 – luglio 1521) fu un esploratore e conquistatore spagnolo. Scoprì la Florida negli Stati Uniti. Il plugin per IDA ti aiuterà a scoprire, esplorare e si spera conquistare i diversi percorsi in un binario.

Ponce può essere usato per analizzare binari Windows, OS X e Linux?

Sì, puoi usare Ponce nativamente in IDA per Windows o connetterti in remoto a una macchina Linux o OS X e usarlo. Nella prossima versione di Ponce supporteremo nativamente Ponce per le versioni IDA di Linux e OS X.

Quante istruzioni al secondo può gestire Ponce?

Nei nostri test raggiungiamo l'elaborazione di 3000 istruzioni al secondo. Prevediamo di utilizzare il tracciatore PIN offerto da IDA per aumentare la velocità.

Qualcosa non funziona!

Apri un issue, lo risolveremo al più presto ;)

Adoro il tuo progetto! Posso collaborare?

Certo! Per favore, fai pull request e lavora sugli issue aperti. Ti pagheremo in birre per l'aiuto ;)

Limitazioni

L'esecuzione concolica e Ponce hanno alcuni problemi:

  • Carico/scrittura di memoria simbolica: Quando l'indice usato per leggere un valore di memoria è simbolico, come in x = aray[symbolic_index], sorgono alcuni problemi che potrebbero portare alla perdita di traccia dell'input controllato dall'utente taintato/simbolizzato.

  • Triton non funziona molto bene con le istruzioni in virgola mobile.

  • L'esecuzione concolica analizza solo le istruzioni eseguite. Ciò significa che il tracciamento simbolico viene perso in casi come il seguente:

    root@kitploit:~
    int check(char myinput)  // Input is symbolic/tainted
    {
    int flag = 0;
    if (myinput == 'A')  //This condition is symbolic/tainted
      flag = 1
    else
      flag =- 1;
    return flag; // flag is not symbolic/tainted!
    }
    

Autori

  • Alberto Garcia Illera (@algillera) [email protected]
  • Francisco Oca (@francisco_oca) [email protected]
Scarica lo strumento