Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
drltrace — Drltrace est un traceur d'appels de bibliothèque pour les applications Windows et Linux. | Kitploit
Outils/GitHubGitHub/mxmssh/drltrace
Analyse Dynamique (Sandboxing)Rétro-ingénierieDébogueursAnalyse de MalwareAnalyse de Binaires
GitHubmxmssh/drltrace

drltrace

Drltrace est un traceur d'appels de bibliothèque pour les applications Windows et Linux.

Voir le dépôt
41971il y a 6 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Drltrace

Build de test Windows build status

Build de test Linux Build Status

Drltrace est un traceur dynamique d'appels API pour les applications Windows et Linux. Drltrace est construit au-dessus du DynamoRIO, un framework d'instrumentation binaire dynamique. Drltrace a été initialement implémenté par Derek Bruening et distribué avec les frameworks DynamoRIO et DrMemory. Ce dépôt contient une version autonome de drltrace avec des scripts et du matériel supplémentaires sur la façon de l'utiliser pour l'analyse de logiciels malveillants. La version compilée peut être téléchargée ici.

Utilisation

L'utilisation de drltrace est très simple. Un utilisateur doit spécifier un répertoire de journalisation et le nom d'un processus cible de la manière suivante :

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

C'est tout, l'outil injectera les DLL requises dans le processus cible, démarrera l'instrumentation et, en parallèle, enregistrera des informations sur tous les appels de bibliothèque exécutés dans le processus cible :

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

Le format de la sortie est simple et peut être facilement analysé par un script externe :

root@kitploit:~
~~[id du thread]~~ [nom de la DLL]![nom de l'appel API]
arg [numéro d'arg] : [valeur] (type=[nom du type Windows], size=[taille de l'arg])
and return to module id:[id unique du module], offset:[offset en mémoire]

L'analyse avec grep peut être effectuée lorsque l'argument -grepable est utilisé ; cela imprime les noms de fonctions et les arguments sur une seule ligne :

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 table des identifiants uniques des modules est imprimée à la fin du fichier journal :

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 peut facilement filtrer les appels inter-bibliothèques et n'afficher que les appels API effectués à partir du module principal (ou du tas) d'une application cible en spécifiant l'option -only_from_app, ce qui est très utile dans le cas d'applications générant d'énormes journaux. Pour un contrôle plus granulaire, l'option -filter permet à l'utilisateur de spécifier un fichier de configuration de filtre afin de filtrer les fonctions autorisées spécifiques (liste blanche) ou d'ignorer les fonctions de la liste noire (voir le fichier filter.config pour des exemples). Drltrace dispose également de plusieurs scripts externes utiles pour filtrer les appels API pour une certaine bibliothèque, n'afficher que les appels API et les chaînes potentiellement intéressants.

Licence

Les modules principaux de Drltrace sont distribués sous licence BSD.

Certains fichiers nécessaires à drltrace sont distribués sous LGPL. Voir les fichiers source pour plus de détails.

Motivation

L'analyse de logiciels malveillants n'est pas une tâche facile. Des packagers logiciels sophistiqués comme Themida et Armadillo, ainsi que des dizaines de packagers non nommés écrits par des auteurs de malwares, plus le chiffrement du code et des données, facilitent considérablement (dans certains cas rendent complètement impossible) la rétro-ingénierie statique de tels échantillons, compliquant la vie des analystes de malwares. Dans ce cas, le traçage des appels API peut réduire considérablement le temps nécessaire pour comprendre l'intention malveillante réelle et révéler de nombreux détails techniques sur le code malveillant protégé.

Bien que la technique traditionnelle de hooking d'API ait été implémentée avec succès dans plusieurs solutions, cette approche est bien étudiée par les auteurs de malwares et peut être facilement détectée et/ou contournée. De plus, ces outils sont distribués sous forme d'applications GUI lourdes et autonomes (en tant que produits propriétaires), qui ne sont souvent pas faciles à intégrer dans un flux de travail d'analyse de malwares existant.

Si l'on regarde le monde Linux, il existe un outil formidable appelé ltrace. En utilisant une seule commande bash, nous pouvons facilement obtenir la trace complète des appels API d'un exécutable donné.

Pourquoi n'avons-nous pas un tel outil (comme ltrace sous Linux) pour Windows, qui soit également transparent face aux techniques anti-recherche utilisées par les malwares modernes ?

Il s'avère qu'il existe une technique qui peut nous aider à avoir un tel outil pour Windows et à tracer les appels API de manière transparente par rapport au programme exécuté. Cette technique s'appelle l'instrumentation binaire dynamique (DBI). La DBI est une technique d'analyse du comportement d'une application binaire au moment de l'exécution par l'injection de code d'instrumentation.

Cependant, l'application de la DBI à l'analyse de malwares est injustement limitée à l'automatisation du dépaquetage et à quelques preuves de concept pour le traçage d'instructions, de blocs de base et d'appels de fonctions. À notre connaissance, drltrace est le premier outil de traçage d'appels API basé sur la DBI pouvant être utilisé en pratique pour l'analyse de malwares. Nous avons fourni plusieurs exemples d'analyse de malwares dans notre wiki où nous avons décrit comment drltrace a permis de révéler en quelques minutes de nombreux détails techniques internes sur des échantillons malveillants sophistiqués sans même avoir à démarrer IDA ou un débogueur.

Pourquoi Drltrace Déchire ?

  • Suffisamment rapide pour effectuer l'analyse d'échantillons malveillants sans être détecté par les techniques anti-recherche basées sur le temps.
  • Prend en charge à la fois x86 et x64 (ARM dans le futur).
  • Prend en charge à la fois Windows et Linux (macOS dans le futur).
  • Prend en charge le code auto-modifiant.
  • Prend en charge tous les types de liaison de bibliothèque (statique et dynamique).
  • Non détectable par les approches anti-recherche standard (anti-hooking, anti-debugging et anti-émulation).
  • L'utilisateur peut facilement ajouter un nouveau prototype de fonction pour indiquer à drltrace comment afficher plus de détails sur des appels API jusque-là inconnus (même pour des DLL non système). Un fichier de configuration externe est utilisé.
  • Facile à utiliser et à modifier pour vos propres besoins (aucune exigence de paquet supplémentaire, aucune interface GUI lourde).
  • Open-source, le code est clair et bien documenté. Vous pouvez librement construire et utiliser votre propre solution avancée basée sur drltrace.

Options de la ligne de commande

root@kitploit:~
 -logdir              [     .]  Répertoire des journaux pour écrire les données d'appels de bibliothèque
 -only_from_app       [ false]  Signale uniquement les appels de bibliothèque provenant de l'application
 -follow_children     [  true]  Tracer les processus enfants
 -print_ret_addr      [ false]  Afficher l'adresse de retour de l'appel de bibliothèque
 -num_unknown_args    [     2]  Nombre d'arguments inconnus d'appel de bibliothèque à afficher
 -num_max_args        [     6]  Nombre maximum d'arguments à afficher
 -default_config      [  true]  Utiliser le fichier de configuration par défaut.
 -config              [    ""]  Chemin vers un fichier de configuration personnalisé.
 -filter              [filter.config]  Chemin du fichier de liste blanche/noire.
 -ignore_underscore   [ false]  Ignore les noms de routines de bibliothèque commençant par "_".
 -help                [ false]  Afficher ce message.
 -version             [ false]  Afficher le numéro de version.
 -verbose             [     1]  Modifier la verbosité.
 -use_config          [  true]  Utiliser le fichier de configuration
 -grepable            [ false]  Sortie exploitable avec grep

Syntaxe du fichier de configuration

Drltrace prend en charge des fichiers de configuration externes dans lesquels un utilisateur peut décrire comment drltrace doit afficher les arguments pour certains appels API.

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

Chaque argument de fonction doit être séparé par |. Le premier argument est le type de retour, le second est le nom de la fonction elle-même et les autres sont les arguments de la fonction. Un jeton __out est utilisé pour marquer les arguments de sortie et ___inout pour marquer les arguments d'entrée+sortie.

Exemples d'analyse de malwares

Vous pouvez trouver des exemples d'utilisation de drltrace pour l'analyse de malwares complexes sur notre page Wiki.

Visualisation des journaux

Pour faciliter le travail avec les fichiers journaux, nous avons implémenté un script appelé api_calls_viz.py qui peut être utilisé pour générer des images RVB où chaque couleur de pixel représente un appel API unique. Par exemple, l'image ci-dessous représente le fichier journal du malware WannaCry.

Image des appels API

Les grandes zones vertes sur l'image représentent des appels API (wcscmp/wcsicmp) qui sont utilisés pour sélectionner des fichiers avec des extensions intéressantes (par exemple docx, xls, py) afin de les chiffrer. Les zones violettes représentent des appels API (FindFirstFile/FindNextFile/CryptEncrypt) qui sont utilisés pour énumérer et chiffrer les fichiers et dossiers sur le disque.

Le script peut également générer une représentation HTML de l'image RVB générée où chaque élément peut être sélectionné pour afficher le nom d'un appel API.

Image des appels API

Fichier HTML brut.

Voir le répertoire api_calls_viz pour plus de détails.

Comment compiler

Vous pouvez trouver un manuel détaillé sur cette page Wiki.

Prise en charge des systèmes d'exploitation

Windows, Linux (macOS dans le futur).

Prise en charge des architectures CPU

x86, x64 (ARM sur la liste).

Langages

Bibliothèque standard C et C++ (et scripts de gestion des journaux écrits en Python).

Détails techniques

Nous avons décidé d'implémenter notre traceur d'appels API sur la base du framework d'instrumentation binaire dynamique DynamoRIO. Drltrace demande à DynamoRIO d'effectuer l'instrumentation de l'appel LoadLibrary afin de pouvoir gérer les nouvelles bibliothèques chargées par le processus cible. Lorsque le processus tente de charger une nouvelle bibliothèque, DynamoRIO redirige le flux de contrôle vers drltracelib.dll. À son tour, drltrace énumère les fonctions exportées dans la DLL nouvellement chargée et enregistre un rappel spécial pour chacune d'elles. Ainsi, si une fonction exportée est appelée par le malware, le rappel de drltrace sera exécuté avant cette fonction et l'outil pourra enregistrer toutes les informations requises telles que le nom de la fonction et ses arguments. Un autre rappel peut être enregistré après la fonction pour enregistrer les résultats de l'exécution.

Pourquoi pas Intel Pin ? Nous avons choisi d'utiliser DynamoRIO pour les raisons suivantes :

  1. Le code source de DynamoRIO est disponible sur github.com et distribué sous licence BSD, tandis qu'Intel Pin est un logiciel propriétaire.
  2. L'une des exigences de base pour DynamoRIO au moment du développement était la transparence vis-à-vis de l'exécutable instrumenté.
  3. DynamoRIO utilise une technologie d'instrumentation différente basée sur la transformation de code, tandis qu'Intel PIN utilise des trampolines spéciaux qui ne sont pas transparents vis-à-vis de l'exécutable analysé et peuvent être détectés par les malwares.

Travaux futurs

  1. Bien que drltrace ne soit pas détectable par les astuces anti-recherche standard, le moteur DBI lui-même peut être détecté comme le montrent ces travaux 1, 2. Rendre DynamoRIO résistant à ces astuces est une voie importante pour les travaux futurs.
  2. Actuellement, drltrace imprime un journal brut et fournit plusieurs scripts pour afficher les chaînes importantes et les appels de bibliothèque. À l'avenir, nous prévoyons d'ajouter des heuristiques (probablement en appliquant des règles YARA) pour pouvoir sélectionner automatiquement le comportement indicatif des malwares.
  3. Actuellement, DynamoRIO prend en charge en version bêta l'architecture ARM ; des tests et un portage de drltrace sur ARM sont nécessaires.
  4. Drltrace ne prend pas en charge les situations où un malware injecte du code dans un processus distant. Dans de tels cas, il est possible de demander à DynamoRIO d'injecter drltrace dans tous les processus nouvellement créés (option -syswide_on de drrun.exe). Cependant, à l'avenir, il est nécessaire d'implémenter un support spécial dans drltrace pour de telles situations.

Notre gestionnaire de tickets contient plus de détails sur l'avenir de drltrace.

Remerciements

Maksim Shudrak https://github.com/mxmssh

Derek Bruening https://github.com/derekbruening

Joe Testa https://github.com/jtesta

Télécharger l’outil