Ghidra Downloadunabhängige Download- und Installationsanleitung
Deutsch
GHIDRA-SUCHANLEITUNG

Strings in Ghidra suchen: Adressen, Befehle und Funktionen finden

Die schnellste Untersuchung eines Programms beginnt damit, einen vagen Hinweis in ein genaues Suchziel zu übersetzen. Diese Anleitung zeigt, wann Defined Strings, Search Program Text, Search Memory, Go To, Symbol Tree und Querverweise sinnvoll sind, damit Sie von einem String oder einer Adresse zur verwendenden Funktion gelangen.

Offizielle Ghidra-Suchdokumentation öffnen
HauptaufgabeProgrammindizien finden
Guter StartBekannter String oder Adresse
Nützliche AnsichtenListing + XREF + Decompiler
Geprüfte VersionGhidra 12.1.3
KURZANTWORT

Das Suchwerkzeug passend zum Hinweis auswählen

Wenn Sie Strings in Ghidra suchen, entscheiden Sie zuerst, ob Sie bereits definierte Daten, sichtbaren Text im Programmmodell, rohe Bytes im geladenen Speicher oder eine exakte Adresse suchen. Defined Strings ist eine gute Übersicht, aber keine vollständige String-Suche. Ein kurzer String kann undefiniert sein, Unicode kann eine andere Darstellung verwenden und ein Speicherblock außerhalb des aktuellen Bereichs kann im selben Fenster fehlen.

Für Adressen bleibt Listing die wichtigste Quelle. Verwenden Sie Decompiler erst, nachdem Sie den Hinweis gefunden haben, um eine Funktion zu erklären. Die offizielle Einsteigerdokumentation beschreibt den größeren CodeBrowser-Ablauf; diese Seite konzentriert sich auf die Suchentscheidungen, die am Anfang leicht übersehen werden.

Nur autorisierte Übungsdateien verwenden

Untersuchen Sie nur Software und Systeme, für die Sie eine Erlaubnis haben. Ein Suchtreffer ist ein Hinweis auf eine Datei, keine Erlaubnis zur Analyse und keine Sicherheitsgarantie.

  • Bekannter Text: mit Defined Strings oder Search for Strings beginnen und Referenzen prüfen.
  • Name, Symbol, Funktion oder Kommentar: Search Program Text oder Symbol Tree verwenden.
  • Exakte Adresse: Go To verwenden und Block sowie dekodierte Instruktion prüfen.
  • Bytefolge oder Muster: Search Memory mit passendem Bereich verwenden.
  • Verwendende Funktion: XREFs verfolgen und Listing, Function Graph und Decompiler vergleichen.
SCHRITT 1

Strings suchen, statt im Decompiler zu raten

Wenn Sie eine Meldung, URL, Datei, einen Befehl oder einen Fehlerausschnitt kennen, suchen Sie den Text, bevor Sie Hunderte Funktionen lesen. Öffnen Sie Defined Strings für eine Liste der bereits erkannten Strings. Fehlt der Wert, verwenden Sie die String-Suche und prüfen Encoding, Mindestlänge, Ausrichtung, Nullterminierung und Speicherbereich. Ein leeres Ergebnis bedeutet oft, dass Definition oder Suchbereich nicht passen.

Ein Treffer ist erst nach der Adressprüfung nützlich. Öffnen Sie ihn in Listing, sehen Sie sich Bytes und benachbarte Daten an und bestätigen Sie, dass er in einem geladenen Block liegt. Wenn Ghidra undefinierte Daten anzeigt, prüfen Sie Ausrichtung und nahe Referenzen, bevor Sie sie definieren. Vor vielen Definitionen immer eine Projektkopie anlegen.

  1. 1

    Mit einem eindeutigen Hinweis beginnen

    Eine vollständige URL, ein seltener Hinweis oder eine ungewöhnliche Dateiendung liefert weniger Fehlalarme als ein allgemeines Wort oder ein Initialisierungsname.

    Defined Strings / Search for Strings
  2. 2

    Encoding und Bereich prüfen

    ASCII, UTF-8, UTF-16 oder die passende Darstellung testen und zwischen geladenen Blöcken, allen Blöcken und Auswahl unterscheiden.

    Encoding + memory block scope
  3. 3

    Adresse in Listing öffnen

    Bytes, Datentyp, benachbarte Strings und Referenzen prüfen. Eine Markierung beweist noch nicht die richtige Funktion.

    Open in Listing
  4. 4

    Eine brauchbare Referenz verfolgen

    Über References oder XREF zu Vergleich, Aufruf, Formatierung oder Verzweigung gehen und die Rolle des Strings klären.

    References / Show XRefs
Offizielles Ghidra-CodeBrowser-Listing mit Adressen, Programmbaum, Bytes und dekodierten Daten
Offizieller Ghidra-CodeBrowser-Screenshot: Suchtreffer vor der Interpretation im Listing prüfen.
SCHRITT 2

Ermitteln, wo ein String verwendet wird

Eine URL oder Meldung zu finden ist meistens nur die Mitte der Untersuchung. Wählen Sie das Datenelement und prüfen Sie seine Referenzen. Eine URL kann an eine Netzwerkfunktion übergeben, mit einem lokalen Wert verglichen oder unbenutzt gespeichert werden. Eine Meldung kann zu einem Fehlerpfad, einer Lizenzprüfung, einem Menü oder einem Debug-Zweig gehören. Die Referenzadresse zeigt den Verbrauchsort; Aufrufer und Aufgerufene erklären die Rolle.

Bei einer komplizierten Funktion zwischen Listing und Decompiler wechseln. Listing zeigt die tatsächlichen dekodierten Befehle und Adressen; Decompiler schlägt Kontrollfluss und Variablenmodell vor. Erst nach ausreichenden Belegen umbenennen und Beobachtung von Vermutung trennen.

  • Prüfen, ob es eine echte Code- oder Datenreferenz und nicht nur eine nahe Adresse ist.
  • Den Basisblock lesen und Vergleich, Aufruf oder Formatierung identifizieren.
  • Aufrufer und Aufgerufene prüfen, bevor eine fachliche Bedeutung vergeben wird.
  • Function Graph verwenden, wenn Verzweigungen im linearen Listing unübersichtlich sind.
  • Bei Pseudocode-Fragen die Decompiler-Anleitung öffnen.
SCHRITT 3

Speicheradresse, Wert oder Byte-Muster finden

Eine Frage wie „Wo liegt 0x00421A3F?“ ist zuerst ein Navigationsproblem. Mit Go To zur Adresse springen und anschließend Programm, Speicherblock, Sprache und Adressraum im Listing prüfen. Datei-Offsets, virtuelle Adressen, Image-Basen und relocierte Adressen sind nicht austauschbar. Wenn eine kopierte Adresse nirgendwohin führt, muss ihre Quelle geklärt werden: Datei, Debugger-Trace, Log oder relociertes Modul.

Für Rohdaten ist Search Memory besser als eine Textsuche. Bytes in der richtigen Reihenfolge suchen, Endianness und Ausrichtung beachten und bei vielen Treffern Block oder Auswahl einschränken. Ein Treffer kann in Code, Daten, Padding oder einer unabhängigen Struktur liegen. Die Suche erzeugt Kandidaten; Bytes und Referenzen im Umfeld liefern den Kontext.

Warum eine Adresse unterschiedlich aussehen kann

Debugger, Dateibetrachter und Ghidra können unterschiedliche Koordinatensysteme verwenden. Quelle der Adresse bewahren und bewusst umrechnen, statt so lange eine Konstante zu addieren, bis der Wert plausibel wirkt.

HinweisErstes WerkzeugDanach prüfen
Exakte geladene AdresseGo ToAdressraum, Block, Instruktion oder Daten
Hex-BytefolgeSearch MemoryEndianness, Ausrichtung, Bereich, Referenzen
URL oder MeldungString-SucheEncoding, Definition, XREF, verwendende Funktion
Name oder LabelSymbol Tree / Search Program TextNamensraum, Typ, Aufrufer und Aufgerufene
Wert aus Log oder DebuggerGo To + ListingRebase, Modulbasis und Offset gegenüber Adresse
SCHRITT 4

Befehle und Befehlsmuster suchen

Eine Befehlsuche braucht eine präzisere Frage als „finde dieses Wort“. Gesucht werden können Mnemonic, Register, Konstante, Sequenz oder Compiler-Bytes. Search Program Text hilft bei stabilem Text im Listing; Search Memory ist besser, wenn die Bytekodierung der stabile Hinweis ist. Architektur und Importsprache bestimmen, wie dieselben Bytes dekodiert werden. Diese Einstellungen vor dem Vergleich prüfen.

Bei Java-Befehlen oder plattformspezifischen Begriffen Quellsprachenwörter und Disassemblierungssyntax nicht vermischen. Die Form suchen, die im Listing tatsächlich erscheint, und einen Treffer über Operanden und Kontrollfluss prüfen. Für wiederholbare Muster Architektur, Endianness, Wildcards und Suchbereich dokumentieren.

  1. 1

    Muster definieren

    Mnemonic, Operanden, Bytes, Register oder Konstanten notieren und variable Teile markieren.

    Muster = Mnemonic + Operanden + optionale Wildcards
  2. 2

    Text oder Bytes wählen

    Textsuche nutzen, wenn die dekodierte Form stabil ist; Memory-Suche, wenn die Byteform stabil ist.

    Search Program Text / Search Memory
  3. 3

    Treffer validieren

    Ergebnis öffnen, vollständige Instruktion und Block lesen und Referenzen sowie Aufrufer vergleichen.

    Listing + XREF + Function Graph
Offizieller Ghidra Function Graph mit Basisblöcken und Kontrollflusskanten
Offizieller Function-Graph-Screenshot: Kontrollfluss rund um einen Instruktionssuchtreffer prüfen.
SCHRITT 5

Funktionen, undefinierte Funktionen und Grenzen finden

Wenn ein Suchtreffer auf Code zeigt, über Symbol Tree, Function Window oder den aktuellen Listing-Kontext prüfen, ob Ghidra bereits eine Funktion erkannt hat. „Undefined“ kann bedeuten, dass die Analyse noch keine Grenze erstellt hat, dass die Adresse Daten enthält oder dass die importierte Architektur überprüft werden muss. Eine Funktion nicht nur deshalb erstellen, weil eine nahe Sequenz bekannt aussieht: Einstiegspunkt, Referenzen, Calling Convention und Rückkehr prüfen.

In einem suchgetriebenen Ablauf ist die Funktion eine Ordnungshilfe für Belege, aber kein Beweis für das Verhalten. Adresse, gefundene Daten oder Instruktion, verbindende Referenz und nächste konsumierende Funktion notieren. Die Einsteigeranleitung behandelt Auto Analysis und Function Graph im größeren Zusammenhang.

ErgebnisBedeutungSicherer nächster Schritt
Benannte FunktionSymbolische Grenze vorhandenAufrufer, Aufgerufene, Signatur und Referenzen prüfen
FUN_... oder namenlose FunktionFunktion vorhanden, Rolle unbekanntStrings, Aufrufe und Datenfluss vor Umbenennung nutzen
Undefinierte AdresseNoch keine verlässliche GrenzeCode/Daten-Klassifizierung prüfen und Kopie analysieren
Treffer in einem BlockHinweis nahe Code oder DatenBlock vollständig lesen und XREF verfolgen
Keine ReferenzenIndirekte Nutzung oder unvollständige DefinitionPointertabellen, Relocation und Analysebereich prüfen
HÄUFIGE FRAGEN ZUR SUCHE

Fragen zur Suche in Ghidra

Wie sucht man in Ghidra am einfachsten nach Strings?

Mit Defined Strings als Übersicht beginnen und die String-Suche verwenden, wenn der Wert fehlt oder das Encoding unklar ist. Treffer im Listing prüfen und XREFs verfolgen.

Wie findet man eine URL-Adresse in Ghidra?

Einen eindeutigen URL-Teil als String suchen, Encoding und Adresse im Listing prüfen und Referenzen bis zur lesenden oder vergleichenden Funktion verfolgen. URLs können zur Laufzeit zusammengesetzt werden.

Wie sucht man eine bestimmte Speicheradresse in Ghidra?

Go To verwenden und Adressraum, Speicherblock sowie dekodierte Instruktion oder Daten prüfen. Datei-Offsets und Debugger-Adressen vorher umrechnen.

Wie sucht man bestimmte Befehle in Ghidra?

Search Program Text für stabilen dekodierten Text oder Search Memory für stabile Bytes verwenden. Architektur und Endianness prüfen und Treffer in Listing sowie Function Graph validieren.

Warum findet eine Ghidra-String-Suche nichts?

Encoding, Mindestlänge, Ausrichtung, geladene Speicherbereiche und eine mögliche Aufteilung oder Laufzeit-Erzeugung des Werts prüfen. Bedingungen einzeln erweitern.

Sollte man den Decompiler zum Suchen eines Strings verwenden?

Meist zuerst String oder Bytes suchen und den Decompiler danach zum Verständnis der referenzierenden Funktion einsetzen. Listing und Bytes sind die direktere Evidenz für den Treffer.