Ghidra Downloadguide indépendant de téléchargement et d’installation
Français
GUIDE DE RECHERCHE GHIDRA

Rechercher des chaînes dans Ghidra : adresses, instructions et fonctions

La méthode la plus rapide pour examiner un programme consiste à transformer un indice vague en cible de recherche précise. Ce guide explique quand utiliser Defined Strings, Search Program Text, Search Memory, Go To, Symbol Tree et les références croisées pour passer d'une chaîne ou d'une adresse à la fonction qui l'utilise.

Ouvrir la documentation officielle de recherche Ghidra
Tâche principaleTrouver des éléments probants
Point de départChaîne ou adresse connue
Vues utilesListing + XREF + Decompiler
Version vérifiéeGhidra 12.1.3
RÉPONSE RAPIDE

Choisir l'outil selon l'indice

Pour rechercher des chaînes dans Ghidra, déterminez d'abord si vous cherchez des données déjà définies par Ghidra, du texte visible dans le modèle du programme, des octets bruts en mémoire chargée ou une adresse exacte. Defined Strings est un bon inventaire, mais ce n'est pas une recherche exhaustive. Une chaîne courte peut ne pas être définie, une valeur Unicode peut employer une autre représentation et un bloc hors du périmètre courant peut ne pas apparaître dans la même fenêtre.

Pour les adresses, gardez Listing comme référence principale. Utilisez Decompiler pour expliquer une fonction après avoir trouvé l'élément probant, et non pour remplacer la recherche. La documentation officielle pour débutants présente le flux CodeBrowser plus large ; cette page se concentre sur les choix de recherche qui posent problème au début.

Utiliser des fichiers autorisés

N'examinez que des logiciels et systèmes pour lesquels vous avez une autorisation. Un résultat de recherche décrit un fichier ; il ne constitue ni une autorisation de rétro-ingénierie ni une garantie de sécurité.

  • Texte connu : commencez par Defined Strings ou Search for Strings, puis vérifiez les références.
  • Nom, symbole, fonction ou commentaire : utilisez Search Program Text ou Symbol Tree.
  • Adresse précise : utilisez Go To et confirmez le bloc chargé et l'instruction.
  • Séquence d'octets ou motif : utilisez Search Memory avec le bon périmètre.
  • Fonction utilisatrice : suivez les XREF et comparez Listing, Function Graph et Decompiler.
ÉTAPE 1

Rechercher les chaînes avant de deviner dans le décompilateur

Si vous connaissez un message, une URL, un chemin, une commande ou un fragment d'erreur, recherchez le texte avant de lire des centaines de fonctions. Ouvrez Defined Strings pour obtenir l'inventaire des chaînes déjà reconnues. Si la valeur manque, utilisez la recherche de chaînes et vérifiez l'encodage, la longueur minimale, l'alignement, la terminaison nulle et les blocs mémoire concernés. Une recherche vide signifie souvent que la définition ou le périmètre ne correspondent pas.

Un résultat n'est utile qu'après vérification de son adresse. Ouvrez-le dans Listing, examinez les octets et les données voisines, puis confirmez qu'il se trouve dans un bloc chargé. Si Ghidra affiche des données indéfinies, vérifiez l'alignement et les références proches avant de les définir. Conservez une copie du projet avant toute définition en série.

  1. 1

    Commencer par un indice distinctif

    Une URL complète, un fragment distinctif ou une extension rare produit moins de faux positifs qu'un terme courant ou un nom d'initialisation.

    Defined Strings / Search for Strings
  2. 2

    Vérifier l'encodage et le périmètre

    Essayez ASCII, UTF-8, UTF-16 ou l'encodage adapté, puis confirmez si la recherche porte sur les blocs chargés, tous les blocs ou la sélection.

    Encodage + périmètre mémoire
  3. 3

    Ouvrir l'adresse dans Listing

    Inspectez les octets, le type de donnée, les chaînes voisines et les références. Un surlignage ne prouve pas encore la fonction pertinente.

    Open in Listing
  4. 4

    Suivre une première référence utile

    Passez par References ou XREF vers une comparaison, un appel, un formatage ou une branche qui donne un rôle à la chaîne.

    References / Show XRefs
Listing CodeBrowser officiel de Ghidra avec adresses, arbre du programme, octets et données décodées
Capture officielle de Ghidra CodeBrowser : vérifiez chaque résultat dans Listing avant de l'interpréter.
ÉTAPE 2

Trouver où la chaîne est utilisée et pourquoi

Trouver une URL ou un message est généralement le milieu de l'enquête. Sélectionnez l'élément et examinez ses références. Une URL peut être transmise à une routine réseau, comparée à une valeur locale ou rester une ressource inutilisée. Un message peut appartenir à une erreur, une vérification de licence, un menu ou une branche de débogage. L'adresse de référence indique où la valeur est consommée ; le contexte des appels indique son rôle.

Lorsqu'une référence mène à une fonction complexe, passez de Listing à Decompiler. Listing montre les instructions et adresses décodées ; Decompiler propose un flux de contrôle et un modèle de variables. Ne renommez qu'après avoir réuni assez d'indices et séparez les observations des hypothèses.

  • Confirmez qu'il s'agit d'une vraie référence de code ou de données, pas d'une simple proximité d'adresse.
  • Lisez le bloc de base et repérez la comparaison, l'appel ou le formatage.
  • Vérifiez appelants et appelées avant d'attribuer un sens métier.
  • Utilisez Function Graph lorsque les branches sont difficiles à suivre dans Listing.
  • Consultez le guide Decompiler si le problème restant concerne le pseudocode.
ÉTAPE 3

Trouver une adresse mémoire, une valeur ou un motif d'octets

Une question comme « où se trouve 0x00421A3F ? » est d'abord un problème de navigation. Utilisez Go To, puis vérifiez le programme, le bloc mémoire, le langage et l'espace d'adresses affichés dans Listing. Les offsets de fichier, adresses virtuelles, bases d'image et adresses relocalisées ne sont pas interchangeables. Si une adresse copiée n'ouvre rien, identifiez son origine : offset, trace de débogueur, journal ou module relocalisé.

Pour les données brutes, Search Memory convient mieux qu'une recherche textuelle. Recherchez les octets dans le bon ordre, tenez compte de l'endianness et réduisez le bloc ou la sélection si les résultats sont nombreux. Une valeur peut se trouver dans du code, des données, du remplissage ou une structure sans rapport. La recherche produit des candidats ; les octets voisins et les références donnent le contexte.

Pourquoi une même adresse peut différer

Un débogueur, un lecteur de fichier et Ghidra peuvent utiliser des systèmes de coordonnées différents. Conservez l'origine de l'adresse et traduisez-la explicitement au lieu d'ajouter une constante jusqu'à obtenir une valeur plausible.

IndicePremier outilVérification suivante
Adresse chargée exacteGo ToEspace d'adresses, bloc, instruction ou donnée
Séquence hexadécimaleSearch MemoryEndianness, alignement, périmètre, références
URL ou messageRecherche de chaînesEncodage, définition, XREF, fonction utilisatrice
Nom ou étiquetteSymbol Tree / Search Program TextEspace de noms, type, appelants et appelées
Valeur issue d'un journal ou débogueurGo To + ListingRebase, base du module, offset contre adresse
ÉTAPE 4

Rechercher des instructions et des motifs d'instructions

Une recherche d'instructions demande une question plus précise que « trouver ce mot ». Vous pouvez chercher un mnémonique, un registre, une constante, une séquence ou les octets produits par un compilateur. Search Program Text aide lorsque le texte décodé dans Listing est stable ; Search Memory convient lorsque l'encodage est l'indice stable. L'architecture et le langage d'importation déterminent le décodage des mêmes octets, donc vérifiez-les avant de comparer.

Pour les instructions Java ou d'autres termes liés à une plateforme, ne mélangez pas le vocabulaire du langage source et la syntaxe désassemblée. Recherchez la représentation réellement visible dans Listing, puis validez un résultat avec ses opérandes et son flux de contrôle. Pour un motif répétable, notez l'architecture, l'endianness, les jokers et le périmètre mémoire.

  1. 1

    Définir le motif

    Notez le mnémonique, les opérandes, les octets, les registres ou les constantes et séparez les parties variables.

    Motif = mnémonique + opérandes + jokers
  2. 2

    Choisir le texte ou les octets

    Utilisez le texte quand la forme décodée est stable et les octets quand l'encodage est la preuve stable.

    Search Program Text / Search Memory
  3. 3

    Valider le résultat

    Ouvrez le résultat, lisez l'instruction et son bloc, puis comparez références et appelants.

    Listing + XREF + Function Graph
Function Graph officiel de Ghidra avec blocs de base et arêtes de contrôle
Capture officielle de Function Graph : vérifiez le flux de contrôle autour d'un résultat d'instruction.
ÉTAPE 5

Trouver les fonctions, les fonctions indéfinies et les limites utiles

Lorsqu'un résultat pointe vers du code, utilisez Symbol Tree, Function Window ou le contexte de Listing pour voir si Ghidra a déjà reconnu une fonction. « Undefined » peut signifier que l'analyse n'a pas encore créé la limite, que l'adresse est une donnée ou que l'architecture importée doit être revue. Ne créez pas une fonction parce qu'une séquence semble familière : vérifiez le point d'entrée, les références, la convention d'appel et le retour lorsque c'est possible.

Dans un flux guidé par la recherche, la fonction organise les éléments probants sans constituer une conclusion sur le comportement. Notez l'adresse, la donnée ou l'instruction trouvée, la référence qui les relie et la fonction qui consomme ensuite la valeur. Le tutoriel pour débutants présente le flux Auto Analysis et Function Graph plus global.

RésultatInterprétationÉtape prudente
Fonction nomméeGhidra a créé une limite symboliqueVérifier appelants, appelées, signature et références
FUN_... ou fonction sans nomLa fonction existe mais son rôle est inconnuS'appuyer sur chaînes, appels et flux avant de renommer
Adresse indéfiniePas encore de limite fiableVérifier code/donnée et analyser une copie
Résultat dans un blocL'indice se trouve près du code ou des donnéesLire le bloc entier et suivre les XREF
Aucune référenceUsage indirect ou définition incomplèteVérifier pointeurs, relocation et périmètre
FAQ RECHERCHE

Questions sur la recherche dans Ghidra

Quelle est la manière la plus simple de rechercher des chaînes dans Ghidra ?

Commencez par Defined Strings pour l'inventaire, puis utilisez l'action de recherche lorsqu'une valeur manque ou que l'encodage est incertain. Vérifiez l'adresse dans Listing et suivez les XREF.

Comment trouver une adresse URL dans Ghidra ?

Recherchez un fragment distinctif de l'URL, confirmez son encodage et son adresse dans Listing, puis suivez les références jusqu'à la fonction qui la lit, la compare ou l'envoie. Elle peut être construite à l'exécution.

Comment rechercher une adresse mémoire précise dans Ghidra ?

Utilisez Go To, puis vérifiez l'espace d'adresses, le bloc et le contenu décodé. Traduisez les offsets de fichier et les adresses de débogueur avant de les considérer comme des adresses chargées.

Comment rechercher des instructions précises dans Ghidra ?

Utilisez Search Program Text lorsque le texte décodé est stable, ou Search Memory lorsque les octets sont stables. Confirmez l'architecture et l'endianness, puis validez dans Listing et Function Graph.

Pourquoi une recherche de chaînes Ghidra ne renvoie-t-elle rien ?

Vérifiez l'encodage, la longueur minimale, l'alignement, les blocs chargés et la possibilité que la valeur soit découpée ou construite à l'exécution. Élargissez une contrainte à la fois.

Faut-il utiliser Decompiler pour rechercher une chaîne ?

Recherchez généralement d'abord la chaîne ou les octets, puis utilisez Decompiler pour comprendre la fonction qui référence le résultat. Listing et les octets sont la preuve directe de la correspondance.