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
libptrace — Un framework di debug, tracing e manipolazione di processi multi-core basato su eventi. | Kitploit
Strumenti/GitHubGitHub/immunityinc/libptrace
Analisi Dinamica (Sandboxing)ExploitReverse EngineeringDebuggerUtilità e FrameworkAnalisi di Binari
GitHubimmunityinc/libptrace

libptrace

Un framework di debug, tracing e manipolazione di processi multi-core basato su eventi.

Vedi Repository
175186 anni 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

libptrace

libptrace è un framework per il debug, tracing e manipolazione di processi/thread guidato dagli eventi. È scritto in C e ha binding per Python 2.7 e 3.7.

È progettato per essere usato come libreria. L'API è stata pensata con il supporto multipiattaforma in mente. Sebbene la versione corrente funzioni solo su versioni Windows a 32 e 64 bit (wow64 è supportato), la progettazione e le astrazioni sono tali che altre piattaforme e persino il supporto per debug remoto possono essere aggiunti sotto la stessa API.

È consapevole di più core/thread e può essere facilmente utilizzato per eseguire più cicli di eventi contemporaneamente. Il debug di gruppi di processi o pipeline o il tracing di un gran numero di processi può essere scalato aumentando i core di esecuzione in questo modo.

Premessa

Ho scritto la versione iniziale di libptrace nel 2006 mentre ero ancora all'università, e l'ho ri-licenziata per uso completo da Immunity Inc. nel 2011, il mio datore di lavoro all'epoca. In quel periodo il framework doveva essere integrato in Immunity Debugger, anche se ho sempre avuto cura di tenerlo separato, in modo che potesse essere utilizzato in modo autonomo.

Con questo obiettivo in mente, ha visto molto sviluppo in Immunity, e sono grato di aver potuto sviluppare attivamente durante l'orario di lavoro e vedere il framework diventare più maturo. Ho riprogettato gran parte di esso per essere consapevole di più core, per fornire binding Python e creare astrazioni migliori.

Con il rilascio finale di x64dbg si è deciso che non avremmo più lavorato su Immunity Debugger, concentrandoci invece su altre cose. Questo ha anche bloccato lo sviluppo di libptrace, e per gli anni successivi ha raccolto polvere nel repository git interno, finché, dopo l'acquisizione di Immunity Inc. da parte di Cyxtera Technologies, ora sotto Cyxtera Cybersecurity Inc., si è deciso di rilasciare il progetto sotto LGPL versione 2.1, nella speranza che potesse vedere adozione e ulteriore sviluppo.

Desidero ringraziare gentilmente Immunity Inc., così come Cyxtera Technologies e Cyxtera Cybersecurity Inc. per aver reso possibile questo rilascio. Inoltre, vorrei ringraziare in particolare Dave Aitel per aver spinto questo rilascio attraverso strati di gestione e per avermi protetto dalle parti burocratiche del processo. Sarebbe stato triste vedere il mio lavoro perso e senza scopo, e senza la loro volontà di rilasciare come open source lo sviluppo di libptrace fatto internamente, questo è ciò che sarebbe successo.

Vorrei anche ringraziare diversi colleghi che hanno passato del tempo a usare o lavorare sul framework, in particolare Massimiliano Oldani, Roderick Asselineau e Christos Kalkanis. I miei ringraziamenti vanno anche a Lennert Buytenhek per le sue implementazioni intrusive di alberi AVL e liste collegate che ho finito per utilizzare.

Sebbene siano passati oltre 4 anni da quando è stato fatto qualsiasi lavoro sul progetto, spero che le persone lo trovino utile. Credo che la progettazione e il codice sorgente siano relativamente puliti, e a questo punto permettono di estendere il framework e portarlo su altre piattaforme in modo relativamente semplice. Spero che un giorno questo possa trasformarsi in una vera libreria di debug multipiattaforma con un'API unica e coerente.

Infine, vorrei dedicare questo progetto alla mia figlia perduta, Yuzuyu Huizer, con la quale spero di riunirmi un giorno. Ti amo.

-- Ronald Huizer [email protected]

Compilazione

Il metodo di compilazione attualmente supportato è la cross-compilazione del progetto usando MinGW e CMake. Il sistema di compilazione è stato testato su Ubuntu 19.04.

Un installer a 32 bit può essere compilato usando:

root@kitploit:~
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=mingw-w64-x86.cmake .
make
makensis libptrace-setup.nsi

Un installer a 64 bit può essere compilato usando:

root@kitploit:~
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=mingw-w64-x64.cmake .
make
makensis -DUSE64 libptrace-setup.nsi

Installazione

Dopo aver seguito i passaggi di compilazione sopra, l'installer a 32 bit sarà in libptrace-setup32.exe e l'installer a 64 bit sarà in libptrace-setup64.exe.

L'installer determinerà automaticamente quali versioni di Python sono installate e se sono a 32 o 64 bit. Le versioni trovate verranno offerte dall'installer, mentre quelle non trovate saranno disabilitate.

I download dei rilasci sono disponibili qui.

Esempi

La directory doc/ è irrimediabilmente obsoleta. È inclusa come punto di partenza per una documentazione più aggiornata. Si prega di non usarla.

Diversi script di esempio si trovano nella directory python/scripts. Verranno installati in Program Files\Immunity Inc\libptrace o, nel caso della versione a 32 bit, in Program Files (x86)\Immunity Inc\libptrace.

Questi esempi non mostrano in alcun modo il framework in modo esaustivo, ma dovrebbero fornire un buon punto di partenza per chiunque voglia usare il framework. L'API C non è stata ben documentata, ma alcuni esempi si trovano nella directory unittests/windows. La directory python/ che contiene i binding Python fornisce anche una buona panoramica. Infine, la directory include/libptrace contiene i file header che sono pubblici e, come tali, forniscono un buon elenco di funzioni API.

Va notato che l'API Python è attualmente un sottoinsieme piuttosto limitato dell'API C.

Un esempio in Python

Ad esempio, il flusso di lavoro generale per tracciare le chiamate a RegOpenKeyExW in un eseguibile sarebbe:

root@kitploit:~
import _ptrace

def bp_handler(bp, thread):
    (key, subkey, options, sam, result) = _ptrace.cconv.args_get(thread, "%u%p%u%u%p")
    subkey = thread.process.read_utf16(subkey)
    print('T{}: RegOpenKeyEx({}, "{}", 0x{:08x}, 0x{:08x}, 0x{:08x})'
          .format(thread.id, key, subkey, options, sam, result), end='')

def attached_handler(process):
    bp = _ptrace.breakpoint_sw("advapi32!RegOpenKeyExW", bp_handler)
    process.breakpoint_set(bp)

handlers          = _ptrace.event_handlers()
handlers.attached = attached_handler

_ptrace.execv(r"C:\Windows\Notepad.exe", [], handlers, 0)
_ptrace.main()

Se si desidera anche il valore di ritorno di RegOpenKeyExW, è più semplice impostare un breakpoint sull'indirizzo di ritorno della chiamata di funzione. Questo evita la necessità di analisi del codice per determinare staticamente i percorsi di uscita della funzione:

root@kitploit:~
def bp_end_handler(bp, thread):
    print("=", _ptrace.cconv.retval_get(thread))

def bp_handler(bp, thread):
    (key, subkey, options, sam, result) = _ptrace.cconv.args_get(thread, "%u%p%u%u%p")
    subkey = thread.process.read_utf16(subkey)
    print('T{}: RegOpenKeyEx({}, "{}", 0x{:08x}, 0x{:08x}, 0x{:08x})'
          .format(thread.id, key, subkey, options, sam, result), end='')

    retaddr = _ptrace.cconv.retaddr_get(thread)
    if thread.process.breakpoint_find(retaddr) is None:
        bp_end = _ptrace.breakpoint_sw(retaddr, bp_end_handler)
        thread.process.breakpoint_set(bp_end)

Copyright

La situazione del copyright è chiarita in ogni singolo file. Sono per lo più detenuti da Cyxtera Cybersecurity Inc., Ronald Huizer, o entrambi contemporaneamente. Alcuni file selezionati hanno titolari di copyright di terze parti, come Lennert Buytenhek.

Licenza

Distribuito sotto la versione 2.1 della GNU Lesser General Public License. Vedere COPYING e COPYING.LESSER per maggiori informazioni.

Autori

  • Ronald Huizer - progettazione e implementazione del progetto
  • Massimiliano Oldani - gestione dei simboli, correzioni di bug
  • Roderick Asselineau - miglioramenti PE, albero di intervalli, correzioni di bug
  • Christos Kalkanis - test, miglioramenti, correzioni di bug

Contatti

  • Ronald Huizer - [email protected] - @ronaldhuizer

Ringraziamenti

  • Immunity Inc. e Cyxtera Cybersecurity Inc. per aver reso possibile questo rilascio.
  • Lennert Buytenhek per le sue implementazioni intrusive di alberi AVL e liste collegate.
  • Dave Aitel per aver gestito le parti burocratiche e legali di questo rilascio.
Scarica lo strumento