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
drltrace — Drltrace è un tracciatore di chiamate di libreria per applicazioni Windows e Linux. | Kitploit
Strumenti/GitHubGitHub/mxmssh/drltrace
Analisi Dinamica (Sandboxing)Reverse EngineeringDebuggerAnalisi MalwareAnalisi di Binari
GitHubmxmssh/drltrace

drltrace

Drltrace è un tracciatore di chiamate di libreria per applicazioni Windows e Linux.

Vedi Repository
419716 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

Drltrace

Build di test per Windows Stato della build

Build di test per Linux Stato della build

Drltrace è un tracciatore dinamico di chiamate API per applicazioni Windows e Linux. Drltrace è costruito sopra il framework di instrumentazione binaria dinamica DynamoRIO. Drltrace è stato inizialmente implementato da Derek Bruening e distribuito con i framework DynamoRIO e DrMemory. Questo repository contiene una versione standalone di drltrace con script aggiuntivi e materiali su come utilizzarlo per l'analisi dei malware. La build di rilascio può essere scaricata qui.

Utilizzo

L'utilizzo di drltrace è molto semplice. Un utente deve specificare una directory di log e il nome di un processo target nel seguente modo:

root@kitploit:~
drltrace -logdir . -- calc.exe

Tutto qui, lo strumento inietterà le DLL necessarie nel processo target, avvierà l'instrumentazione e in parallelo registrerà informazioni su tutte le chiamate di libreria eseguite nel processo target:

root@kitploit:~
~~43600~~ msvcrt.dll!__wgetmainargs
    arg 0: 0x010d2364
    arg 1: 0x010d2368
    and return to module id:0, offset:0x193a
~~43600~~ ntdll.dll!EtwEventRegister
    arg 0: 0x002ff994
    arg 1: 0x010d1490
    and return to module id:0, offset:0x157e
~~43600~~ ntdll.dll!EtwEventSetInformation
    arg 0: 0x007b4b40
    arg 1: 0x00000033
    and return to module id:0, offset:0x15a1
~~43600~~ SHELL32.dll!ShellExecuteW
    arg 0: <null> (type=<unknown>, size=0x0)
    arg 1: <null> (type=wchar_t*, size=0x0)
    arg 2: calculator:// (type=wchar_t*, size=0x0)
    arg 3: <null> (type=wchar_t*, size=0x0)
    arg 4: <null> (type=wchar_t*, size=0x0)
    arg 5: 0x1 (type=int, size=0x4)
    and return to module id:0, offset:0x167d

Il formato dell'output è semplice e può essere facilmente analizzato da uno script esterno:

root@kitploit:~
~~[thread id]~~ [dll name]![api call name]
arg [arg #]: [value] (type=[Windows type name], size=[size of arg])
and return to module id:[module unique id], offset:[offset in memory]

L'analisi con grep può essere eseguita quando viene utilizzato l'argomento -grepable; questo stampa i nomi delle funzioni e gli argomenti tutti su una riga:

root@kitploit:~
~~4824~~ KERNELBASE.dll!CreateFileW {0: C:\Windows\Fonts\staticcache.dat (type=wchar_t*, size=0x0)} {1: 0x80000000 (type=DWORD, size=0x4)} {2: 0x3 (type=DWORD, size=0x4)} {3: 0x005cde8c (type=<unknown>*, size=0x0)} {4: 0x3 (type=DWORD, size=0x4)} {5: 0x80 (type=DWORD, size=0x4)}

La tabella degli identificatori unici dei moduli viene stampata alla fine del file di log:

root@kitploit:~
Module Table: version 3, count 70
Columns: id, containing_id, start, end, entry, checksum, timestamp, path
  0,   0, 0x010d0000, 0x010da000, 0x010d1b80, 0x0000f752, 0xb5fe3575,  C:\Windows\SysWOW64\calc.exe
  1,   1, 0x6d4c0000, 0x6d621000, 0x6d563940, 0x00136d65, 0x59ce1b0b,  C:\Users\Max\Downloads\drltrace\drltrace\dynamorio\lib32\release\dynamorio.dll
  2,   2, 0x73800000, 0x73975000, 0x7380dbf7, 0x00000000, 0x59ce1b0f,  C:\Users\Max\Downloads\drltrace\drltrace\bin\release/drltracelib.dll
  3,   3, 0x742f0000, 0x742fa000, 0x742f2a00, 0x0000c877, 0x0adc52c1,  C:\Windows\System32\CRYPTBASE.dll
  4,   4, 0x74300000, 0x74320000, 0x7430c9b0, 0x0002c617, 0x245970b4,  C:\Windows\System32\SspiCli.dll
  5,   5, 0x74410000, 0x74431000, 0x74416900, 0x0002a940, 0x88a53c1d,  C:\Windows\System32\GDI32.dll
  6,   6, 0x74440000, 0x74500000, 0x7446fb20, 0x000cc410, 0xd343d532,  C:\Windows\System32\RPCRT4.dll
  7,   7, 0x74500000, 0x74525000, 0x745047d0, 0x00026737, 0xa39c8991,  C:\Windows\System32\IMM32.DLL
  8,   8, 0x74550000, 0x745c7000, 0x7456e8a0, 0x00081857, 0x73b971e1,  C:\Windows\System32\advapi32.dll
  9,   9, 0x748f0000, 0x74929000, 0x748febd0, 0x00045303, 0xa58be652,  C:\Windows\System32\cfgmgr32.dll
 10,  10, 0x74930000, 0x75c78000, 0x74aa09d0, 0x01377aa6, 0x4b39926b,  C:\Windows\System32\SHELL32.dll

Drltrace può facilmente filtrare le chiamate tra librerie e stampare solo le chiamate API eseguite dal modulo principale (o dall'heap) di un'applicazione target specificando l'opzione -only_from_app, molto utile nel caso di applicazioni che generano log enormi. Per un controllo più granulare, l'opzione -filter consente all'utente di specificare un file di configurazione del filtro per includere solo funzioni consentite o ignorare funzioni bloccate (vedi il file filter.config per esempi). Drltrace dispone anche di diversi utili script esterni per filtrare le chiamate API per una determinata libreria, stampare solo le chiamate API potenzialmente interessanti e le stringhe.

Licenza

I moduli principali di Drltrace sono distribuiti sotto licenza BSD.

Alcuni file necessari per drltrace sono distribuiti sotto LGPL. Vedi i file sorgente per maggiori dettagli.

Motivazione

L'analisi dei malware non è un compito facile. I packer software sofisticati come Themida e Armadillo e naturalmente decine di packer senza nome scritti dagli autori di malware, insieme alla crittografia del codice e dei dati, facilitano notevolmente (in alcuni casi rendendolo completamente impossibile) il reverse engineering statico di tali campioni, complicando la vita degli analisti di malware. In questo caso, la tracciatura delle chiamate API può ridurre significativamente il tempo necessario per comprendere l'effettivo intento malevolo e rivelare molti dettagli tecnici sul codice malevolo protetto.

Mentre la tecnica tradizionale dell'API-hooking è stata implementata con successo in diverse soluzioni, l'approccio è ben studiato dagli autori di malware e può essere facilmente rilevato e/o aggirato. Inoltre, questi strumenti sono distribuiti come applicazioni GUI standalone pesanti (come prodotti proprietari) che non sono spesso facili da integrare nel flusso di lavoro esistente per l'analisi dei malware.

Se guardiamo al mondo Linux, c'è un meraviglioso strumento chiamato ltrace. Usando un singolo comando bash, possiamo facilmente ottenere la traccia completa delle chiamate API di un determinato eseguibile.

Perché non abbiamo uno strumento simile (come ltrace in Linux) per Windows che sia anche trasparente ai trucchi anti-ricerca usati dai malware moderni?

Risulta che esiste una tecnica che può aiutarci ad avere uno strumento del genere per Windows e tracciare le chiamate API in modo trasparente rispetto al programma eseguito. Questa tecnica è chiamata instrumentazione binaria dinamica, nota come DBI. DBI è una tecnica per analizzare il comportamento di un'applicazione binaria in fase di esecuzione tramite l'iniezione di codice di instrumentazione.

Tuttavia, l'applicazione della DBI per l'analisi dei malware è ingiustamente limitata all'automazione dell'unpacking e a diverse prove di concetto per la tracciatura di istruzioni, blocchi di base e chiamate di funzione. Per quanto ne sappiamo, drltrace è il primo strumento per la tracciatura delle chiamate API basato su DBI che può essere utilizzato nella pratica per l'analisi dei malware. Abbiamo fornito diversi esempi di analisi di malware nel nostro wiki in cui abbiamo descritto come drltrace ha permesso di rivelare in pochi minuti molti dettagli tecnici interni su campioni malevoli sofisticati senza nemmeno avviare IDA o un debugger.

Perché Drltrace è Eccezionale?

  • Abbastanza veloce da eseguire l'analisi di campioni malevoli senza essere rilevato da tecniche anti-ricerca basate sul tempo.
  • Supporta sia x86 che x64 (ARM in futuro).
  • Supporta sia Windows che Linux (macOS in futuro).
  • Supporta codice automodificante.
  • Supporta tutti i tipi di collegamento delle librerie (statico e dinamico).
  • Non rilevabile dagli approcci anti-ricerca standard (anti-hooking, anti-debugging e anti-emulazione).
  • L'utente può facilmente aggiungere un nuovo prototipo di funzione per dire a drltrace come stampare maggiori dettagli su chiamate API precedentemente sconosciute (anche su DLL non di sistema). Viene utilizzato un file di configurazione esterno.
  • Facile da usare e modificare per i propri scopi (nessun requisito di pacchetti aggiuntivi, nessuna interfaccia GUI pesante).
  • Open-source, codice chiaro e ben documentato. Puoi liberamente costruire e utilizzare la tua soluzione avanzata basata su drltrace.

Opzioni della riga di comando

root@kitploit:~
 -logdir              [     .]  Directory di log per stampare i dati delle chiamate di libreria
 -only_from_app       [ false]  Segnala solo le chiamate di libreria dall'app
 -follow_children     [  true]  Traccia i processi figli
 -print_ret_addr      [ false]  Stampa l'indirizzo di ritorno delle chiamate di libreria
 -num_unknown_args    [     2]  Numero di argomenti sconosciuti delle chiamate di libreria da stampare
 -num_max_args        [     6]  Numero massimo di argomenti da stampare
 -default_config      [  true]  Usa il file di configurazione predefinito.
 -config              [    ""]  Il percorso del file di configurazione personalizzato.
 -filter              [filter.config]  Il percorso del file whitelist/blacklist.
 -ignore_underscore   [ false]  Ignora i nomi delle routine di libreria che iniziano con "_".
 -help                [ false]  Stampa questo messaggio.
 -version             [ false]  Stampa il numero di versione.
 -verbose             [     1]  Cambia la verbosità.
 -use_config          [  true]  Usa il file di configurazione
 -grepable            [ false]  Output leggibile con grep

Sintassi del file di configurazione

Drltrace supporta file di configurazione esterni in cui un utente può descrivere come drltrace deve stampare gli argomenti per determinate chiamate API.

root@kitploit:~
HANDLE|CreateRemoteThread|HANDLE|SECURITY_ATTRIBUTES*|size_t|THREAD_START_ROUTINE*|VOID*|DWORD|__out DWORD*

Ogni argomento di funzione deve essere separato da |. Il primo argomento è il tipo di ritorno, il secondo argomento è il nome della funzione stesso e il resto sono gli argomenti della funzione. Un token __out viene utilizzato per contrassegnare gli argomenti di output e ___inout viene utilizzato per contrassegnare gli argomenti di input+output.

Esempi di Analisi di Malware

Puoi trovare esempi su come utilizzare drltrace per l'analisi di malware complessi nella nostra pagina Wiki.

Visualizzazione dei Log

Per semplificare il lavoro con i file di log, abbiamo implementato uno script chiamato api_calls_viz.py che può essere utilizzato per generare immagini RGB in cui ogni colore di pixel rappresenta una chiamata API unica. Ad esempio, l'immagine qui sotto rappresenta il file di log del malware WannaCry.

Immagine delle chiamate API

Le grandi aree verdi nell'immagine rappresentano chiamate API (wcscmp/wcsicmp) utilizzate per selezionare file con estensioni interessanti (es. docx, xls, py) da crittografare. Le aree viola rappresentano chiamate API (FindFirstFile/FindNextFile/CryptEncrypt) utilizzate per enumerare e crittografare file e cartelle sul disco.

Lo script può anche generare una rappresentazione HTML dell'immagine RGB generata in cui ogni elemento può essere selezionato per mostrare il nome di una chiamata API.

Immagine delle chiamate API

File HTML grezzo.

Vedi la directory api_calls_viz per maggiori dettagli.

Come Compilare

Puoi trovare un manuale dettagliato in questa pagina Wiki.

Supporto Sistemi Operativi

Windows, Linux (macOS in futuro).

Supporto Architetture CPU

x86, x64 (ARM in programma).

Linguaggi

Libreria standard C e C++ (e script per la gestione dei log scritti in Python).

Dettagli Tecnici

Abbiamo deciso di implementare il nostro tracciatore di chiamate API basandoci sul framework di instrumentazione binaria dinamica DynamoRIO. Drltrace chiede a DynamoRIO di eseguire l'instrumentazione della chiamata LoadLibrary per poter gestire le nuove librerie caricate dal processo target. Quando il processo tenta di caricare una nuova libreria, DynamoRIO reindirizza il flusso di controllo a drltracelib.dll. A sua volta, drltrace enumera le funzioni esportate nella DLL appena caricata e registra un callback speciale per ciascuna di esse. Quindi, se una funzione esportata viene chiamata dal malware, il callback di drltrace verrà eseguito prima di questa funzione e lo strumento sarà in grado di registrare tutte le informazioni necessarie come il nome della funzione e gli argomenti. Un altro callback potrebbe essere registrato dopo la funzione per salvare i risultati dell'esecuzione.

Perché non Intel Pin? Abbiamo deciso di utilizzare DynamoRIO motivati dai seguenti motivi:

  1. Il codice sorgente di DynamoRIO è disponibile su github.com e distribuito sotto licenza BSD, mentre Intel Pin è un software proprietario.
  2. Uno dei requisiti di base per DynamoRIO al momento dello sviluppo era la trasparenza verso l'eseguibile instrumentato.
  3. DynamoRIO utilizza una tecnologia di instrumentazione diversa basata sulla trasformazione del codice, mentre Intel PIN utilizza trampolini speciali che non sono trasparenti verso l'eseguibile analizzato e potrebbero essere rilevati dal malware.

Lavori Futuri

  1. Sebbene drltrace non sia rilevabile dai trucchi anti-ricerca standard, il motore DBI stesso può essere rilevato come mostrato in questi lavori 1, 2. Rendere DynamoRIO resistente a questi trucchi è un percorso importante per il lavoro futuro.
  2. Attualmente, drltrace stampa un log grezzo e fornisce diversi script per stampare stringhe importanti e chiamate di libreria. In futuro, prevediamo di aggiungere euristiche (probabilmente applicando regole YARA) per poter selezionare automaticamente il comportamento indicativo dal malware.
  3. Attualmente, DynamoRIO ha supporto beta per l'architettura ARM, è necessario testare e portare drltrace su ARM.
  4. Drltrace non supporta la situazione in cui il malware inietta codice in un processo remoto. In tali casi, è possibile dire a DynamoRIO di iniettare drltrace in tutti i processi appena creati (opzione -syswide_on di drrun.exe). Tuttavia, in futuro, è necessario implementare un supporto speciale in drltrace per tali situazioni.

Il nostro issue tracker contiene maggiori dettagli sul futuro di drltrace.

Ringraziamenti

Maksim Shudrak https://github.com/mxmssh

Derek Bruening https://github.com/derekbruening

Joe Testa https://github.com/jtesta

Scarica lo strumento