xAnalyzer ist ein Plugin für den x86/x64 x64dbg-Debugger von @mrexodia. Dieses Plugin basiert auf dem APIInfo Plugin von @mrfearless, obwohl einige Verbesserungen und Ergänzungen vorgenommen wurden. xAnalyzer ist in der Lage, verschiedene Arten von Analysen des statischen Codes der debuggten Anwendung durchzuführen, um dem Benutzer weitere zusätzliche Informationen bereitzustellen. Dieses Plugin wird eine umfassende Erkennung von API-Funktionsaufrufen durchführen, um Funktionsdefinitionen, Argumente und Datentypen sowie alle anderen ergänzenden Informationen hinzuzufügen, etwas, das dem ähnelt, was Sie mit der OllyDbg-Analyse-Engine erhalten, um es für die noch verständlicher zu machen Benutzer kurz vor dem Starten der Debuggin-Aufgabe.
Zu den wichtigsten Funktionen und Verbesserungen gehören:
Erweiterte Analyse von Funktionsaufrufen (über 13.000 API-Definitionen aus fast 200 DLLs)
Definierte und generische Funktionen, Argumente, Datentypen und zusätzliche Erkennung von Debugging-Informationen.
Automatische Schleifenerkennung.
Vom Benutzer verwaltete Definitionsdateien
Vor xAnalyzer
Nach xAnalyzer
Laden Sie HIER die neueste Version der Binärdateien herunter
Laden Sie die neueste Version von x64dbg herunter
Extrahieren Sie apis_def.zip
Kopieren Sie xAnalyzer.dp32/xAnalyzer.dp64 und den Ordner apis_def in die entsprechenden Plugin-Verzeichnisse in x64dbg
Suchen Sie im Menü „ Plugins “ im Hauptfenster von x64dbg oder auch im Nebenmenü im Disasm-Fenster nach einem Eintrag „ xAnalyzer “.
xAnalyzer bietet einige Optionen zur Auswahl, um das Erlebnis damit noch individueller zu gestalten und es genau dann zu verwenden, wenn Sie es brauchen und wie Sie es möchten. Die Plugin-Optionen sind wie folgt:
Automatische Analyse : Wenn diese Option aktiviert ist, startet das Plugin jedes Mal eine vollautomatische Analyse des ausführbaren Codes, wenn dieser beim Laden im Debugger den Einstiegspunkt erreicht. Durch die Verwendung dieser Option erhalten Sie ein genaueres OllyDbg-Erstanalyseverhalten auf x64dbg.
Erweiterte Analyse : Diese Option zwingt xAnalyzer dazu, eine erweiterte Analyse über den gesamten Codeabschnitt der debuggten ausführbaren Datei durchzuführen. WARNUNG!!! Durch die Aktivierung dieser Option kann der Analysevorgang viel mehr Zeit und Ressourcen in Anspruch nehmen. Außerdem wird von x64dbg je nach Größe des Abschnitts und der Menge zusätzlicher Daten, die der debuggten statischen Disassemblierung der ausführbaren Datei hinzugefügt werden, möglicherweise eine große Menge RAM-Speicher verwendet
Undefinierte Funktionen analysieren : Durch Auswahl dieser Option verwendet xAnalyzer generische Analyse- und Argumenttypen für alle API-Aufrufe/Funktionen, die nicht in den API-Definitionsdateien definiert sind, sowie für Aufrufe wie:
CALL {REGISTER}
CALL {REGISTER + DISPLACEMENT}
CALL {DYNAMIC_POINTER}
xAnalyzer verfügt über einige Befehle und Menüoptionen zur Auswahl, wenn Sie mit einer ausführbaren Datei arbeiten:
Durch Auswahl mehrerer Anweisungen in den Demontagefenstern von x64dbg und Auswahl dieses Menüs wird eine schnelle Analyse der ausgewählten Zeilen durchgeführt. Sie können zum Starten dieser Option auch den Befehl xanal Selection verwenden oder sogar Ihre eigenen Hotkeys dafür in der x64dbg-GUI festlegen.
Wenn Sie sich mitten in einer Funktion befinden, können Sie diesen Menüeintrag verwenden, um die gesamte Funktion und nur diese Funktion zu analysieren. xAnalyzer nimmt Ihre einzelne ausgewählte Anweisung als Referenz und verarbeitet von dort aus alle Zeilen innerhalb eines Codeblocks. Sie können zum Starten dieser Art von Analyse auch die Befehlsfunktion xanal verwenden oder sogar Ihre eigenen Hotkeys dafür in der x64dbg-GUI festlegen.
Mit diesem Befehl wird eine vollständige Analyse des gesamten Moduls gestartet. Diese Funktion berücksichtigt die Option „Erweiterte Analyse“ für die zu verwendende Analysetiefe. Sie können es auch mit dem Befehl xanal module ausführen oder sogar Ihre eigenen Hotkeys in der x64dbg-GUI festlegen.
In diesen Fällen bewirken alle diese Menüs das Gegenteil von dem, was die vorherigen Befehle bewirkt haben. Falls Sie die Analyse zusätzlicher Informationen in einigen Teilen des Codes oder auf Wunsch in der gesamten ausführbaren Datei entfernen möchten. Sie können auch die Befehle verwenden: xanalremove Selection/Function/Module
xAnalyzer verfügt über ein erweiterbares System von API-Definitionsdateien. Diese Dateien befinden sich in den Ordnern „api_def“ und „api_def/headers“ , die alle Dateien mit einer .ini-Struktur und der Norm enthalten sollten:
„ Dateiname “: Dies ist der Name des Moduls, in dem sich die API-Funktion befindet.
„ Dateiname.h “: Dies ist der Header, der Informationen zu Typdaten (Flags und Aufzählungen) enthält
Erweiterung „ .api “: Gibt an, dass es sich um eine Definitionsdatei handelt. Andere Erweiterungen werden nicht erkannt (kernel32.api, shell32.api usw.).
Alle diese INI-Dateien enthalten wichtige Informationen für das Plugin, wie z. B. die Funktionsprototypen, Argumenttypen usw. Alle diese Informationen werden von xAnalyzer verwendet, um die zusätzlichen Informationen für den statischen Code festzulegen. Ein einzelner Eintrag in einer dieser Dateien würde wie folgt aussehen:
Datei user32.api
[MessageBox]
1=HANDLE hWnd
2=LPCTSTR lpText
3=LPCTSTR lpCaption
4=[MessageBoxType] uType
ParamCount=4
Header=shell.h.api;
@=MessageBox
Datei shell.h.api
[MessageBoxType]
TypeDisplay=UINT
Base=UINT
Type=Flag
Const1=MB_ABORTRETRYIGNORE
Value1=0x00000002
Const2=MB_CANCELTRYCONTINUE
Value2=0x00000006
Const3=MB_HELP
Value3=0x00004000
Const4=MB_OK
Value4=0x00000000
Const5=MB_OKCANCEL
...
Jedes Argument in Klammern bedeutet, dass es sich um einen bestimmten Datentyp (Enum- oder Binärflags) handelt und dass dieser in der richtigen .h-Header-Datei definiert wird, die im Schlüssel „ Header “ angegeben ist.
Was die Header-Datei betrifft, ist das Schema im Wesentlichen das gleiche, nur ein paar Schlüssel, wie „ TypeDisplay “. Dies gibt den richtigen Datentyp an, der im DBG-Kommentar angezeigt werden soll, dann kommt „ Base “ und zeigt auf den Basisdatentyp, der vom Haupteintrag verwendet wird. Falls es einen verknüpften Datentyp gibt, könnte dieser in Klammern stehen Also. Der Schlüssel „ Type “ gibt den Typ der Datenstruktur an und kann „Flag“ oder „Enum“ sein. Schließlich werden alle Variablennamen und -werte angezeigt.
Wenn Sie feststellen, dass eine bestimmte API-Aufrufdefinition von xAnalyzer nicht oder nicht richtig erkannt wird, kann dies bedeuten, dass sie nicht in den Definitionsdateien vorhanden ist oder falsch definiert ist. In diesem Fall könnte also eine Ergänzung oder Änderung vorgenommen werden, um sie einzuschließen Alle fehlenden Funktionen oder Argumente können zu 100 % anpassbar sein, sofern dieselbe Struktur eingehalten wird.
Der erste undefinierte Aufruf mit generischen Argumenten in einer Funktion wird nicht verarbeitet, es sei denn, ihm geht ein Sprung voraus, da es keine Möglichkeit gibt, zu sagen, wie viele Argumente verwendet werden sollen, ohne die Funktionsprologanweisungen illegal zu verwenden. Am Anfang einer Funktion oder einer undefinierten Funktion, der ein Sprung vorausgeht, werden nur dokumentierte Aufrufe verarbeitet.
Einige „ungewöhnliche“ Funktionen haben Argumente zwischen Sprüngen, daher werden diese Aufrufe gemäß dem tatsächlichen Design des Plugins (keine Sprünge zwischen Funktionsargumenten) nicht verarbeitet, da jedes Mal, wenn ein Sprung gefunden wird, die Anweisungen im Stapel bereinigt werden.
Verschachtelte Aufrufe funktionieren nur dann ordnungsgemäß, wenn:
1-) Innerer Anruf ist definiert
2-) Wenn der innere undefinierte Aufruf nicht mehr Argumente vom Stapel annimmt, als vom äußeren Aufruf benötigt werden
Es erkennt nur Schleifen innerhalb von Funktionen (Funktionsgrenzen-Prologs/RETs). Wenn eine Funktion in der Mitte ihres Codes ein RET enthält, wird dies als Funktionsende erkannt und der Schleifenstapel wird geleert.
Die Analyse könnte fehlschlagen, wenn der Name der zu debuggenden ausführbaren Datei mehrere Punkte enthält
Falsche Schleifenerkennung für einen Abschnitt mit einem nicht bedingten Sprung darin (siehe Nr. 7)
Verschachtelte Argumentzeilen (xAnalyzer unterstützt verschachtelte Argumente, x64dbg derzeit jedoch nicht)
Entropieanalyse hinzufügen
Durchflussanalyse-Scanning statt linear (Trace-Emulation)
Case-Switch-Erkennung
xAnalyzer 2.5.4
- Aktualisiertes Projekt auf VS2017
– Probleme bei der Verarbeitung von Argumentanweisungen mit dem Stapelzeiger behoben (x64-Version).
– Falsche Reihenfolge der Argumente im Zusammenhang mit dem Stapelzeiger behoben (x64-Version).
- Fehler bei der Argumenterkennung undefinierter Funktionen behoben, der dazu führte, dass Register als unterschiedliche Argumente dupliziert wurden (x64-Version)
- Die Erkennung undefinierter Aufrufargumente wurde geändert. Standardmäßig werden nur bis zu 4 undefinierte Argumente vorhergesagt (x86-Version).
- Etwas Code-Refactoring
xAnalyzer 2.5.3
-Erkennung von Funktionsnamen in neueren Versionen von x64dbg behoben
xAnalyzer 2.5.2
-Verwendet die aktuell ausgewählte Disasm-Zeile für die Modulanalyse anstelle von cip
-Einige Eingaben in Plugin-Einträgen wurden geändert
- Einige Code-Refactorings
-Befehl „xanal/xanalremove exe“ in „xanal/xanalremove module“ geändert
xAnalyzer 2.5.1
-Absturz bei Variationen von MOV-Anweisungen behoben
xAnalyzer 2.5.0
– [EBP+/-]-Anweisungen als mögliche Funktionsaufrufargumente entfernt
– Das Präfix „0x“ aller Funktionsargumentwerte wurde entfernt, da hexadezimal abgeleitet wird
– Argumente behoben, bei denen Zeigervariablen nicht korrekt als Zeiger, sondern stattdessen als Basisdatentyp angezeigt wurden
-Erkennung der Stapelzeigerverwendung (ESP) als mögliches Argument für Funktionsaufrufe hinzugefügt (x86)
– Verwendung eines genauen Datentypnamens in Argumenten anstelle des generischen/Basisdatentypnamens hinzugefügt
- Funktion zur intelligenten Verfolgung hinzugefügt (intelligente Vorhersage und Erkennung indirekter Funktionsaufrufe wie: CALL {REGISTER}, CALL {POINTER})
-Name von Funktionszeigern als Parameter hinzugefügt (der gesamte Funktionsname, falls erkannt, wird anstelle nur der Adresse verwendet)
xAnalyzer 2.4.3
- Erkennung von MOV-Anweisungen auf x86 hinzugefügt
- Erkennung von Funktionen mit dem Suffix „Stub“ hinzugefügt
- Fehler bei der „automatischen Analyse“ behoben (weitere EP-Prüfbedingungen hinzugefügt)
- Deaktivieren Sie die Optionen „Automatische Kommentare/Automatische Beschriftungen“ jetzt standardmäßig
xAnalyzer 2.4.2
– BoF behoben, wenn Argument-Flags-Kommentar MAX_COMMENT_SIZE überschreitet
- Fehler bei der Suche nach Funktionsnamen behoben, wenn die Definition in einer zweiten .api-Datei liegt
xAnalyzer 2.4.1
- Ein neues Hotkeys-Schema hinzugefügt
- Neue Optionen hinzugefügt, um zu steuern, welche vorherigen Analysedaten gelöscht werden sollen. (Dies bietet die Möglichkeit, nahtlos mit Kartenlade-Plugins wie SwissArmyKnife usw. zu arbeiten).
- Neue Befehle hinzugefügt (alte wurden veraltet)
xanale Auswahl: Führt eine Auswahlanalyse durch
xanale Funktion: Führt eine Funktionsanalyse durch
xanal exe: Führt eine vollständige ausführbare Analyse durch
xanalremove Selection: Entfernt eine vorherige Auswahlanalyse
xanalremove-Funktion: Entfernt eine vorherige Funktionsanalyse
xanalremove exe: Entfernt eine vorherige gesamte ausführbare Analyse
xanal help: Öffnet im Protokollfenster einen Hilfetext
- Problem behoben, bei dem die automatische Analyse beim Start nicht startete (Schließt Nr. 18)
- Verschiedene API-Definitionsdateien korrigiert (Schließt Nr. 17)
xAnalyzer 2.4
- Neue und verbesserte API-Definitionsdateien mit leicht geändertem Schema (13.000 APIs aus fast 200 DLLs)
- Symbolerkennungssystem für jedes verwendete API-Definitionsargument (über 1000 Enums-Datentypen und über 800 Flags)
- Erkennung von Parameterdatentypen (BOOL, NUMERIC, NON-NUMERIC)
- VB-„DllFunctionCall“-Stub-Erkennung
- Als Argumente übergebene Zeichenfolgen sind jetzt sauberer (bei Debugger-Kommentaren wurde jetzt der Adressteil entfernt)
- Ausführungszusammenfassung zum Protokollfenster hinzugefügt
- Hotkeys-Funktion entfernt (wird in zukünftige Revisionen integriert), da es zu Konflikten mit x64dbg kommt
- Verschiedene Fehler behoben
xAnalyzer 2.3.1
- Fehler behoben, der beim Starten des Menüs „Auswahl analysieren“ mit einer einzelnen ausgewählten Zeile zu einer abrupten DBG-Ausnahme führte (danke an @blaquee)
- Überprüfen Sie, ob der Definitionsdateiordner „apis_def“ und die Definitionsdateien darin vorhanden sind, bevor Sie das Plugin laden
- Die Hotkeys wurden in Strg+Umschalt+X für die Auswahl und Strg+X für Funktionen geändert
xAnalyzer 2.3
- Option „Undefinierte Funktionen analysieren“ hinzugefügt. (Standardmäßig deaktiviert, alles, was nicht in den Definitionsdateien enthalten ist, wird nicht analysiert.)
- Option „Automatische Analyse“ hinzugefügt (standardmäßig AUS, Analyse beim Start am EP der debuggten ausführbaren Datei durchführen)
- Funktion „Auswahl analysieren“ hinzugefügt (Führt eine Analyse ausgewählter Anweisungen durch und unterstützt mehrere ausgewählte Aufrufe)
- Funktion „Funktion analysieren“ hinzugefügt (ermöglicht eine automatische Erkennung und Analyse der aktuellen Funktion anhand der ausgewählten Adresse)
- Funktion „Analyse entfernen“ aus Auswahl/Funktion/Ausführbare Datei hinzugefügt
- Befehlsverknüpfungen hinzugefügt
- Neue Symbole hinzugefügt
- Speichern der Konfiguration zur .ini-Datei hinzugefügt
- Großschreibung von hexadezimalen Argumentwerten hinzugefügt
- Umstrukturierte Funktion „Ausführbare Datei analysieren“ (Erstellt eine vollständige Analyse der aktuellen ausführbaren Datei)
- Neustrukturierte Menüs
- Der Dialog „Neues Info“ zeigt jetzt die Versionsnummer an, um den Überblick über Aktualisierungen zu behalten
- Einige kleine Fehlerbehebungen
- Einige API-Definitionsdateien korrigiert und zusammengeführt
- Geschwindigkeits- und Stabilitätsverbesserungen
xAnalyzer 2.2
- Analysefortschrittsanzeige hinzugefügt
- Neuer Analysetiefenmodus hinzugefügt
-Jetzt wird die automatische Analyse nur dann ausgeführt, wenn keine Backup-Datenbank vorhanden ist
- Fehler behoben
xAnalyzer 2.1
- Generische Argumente für undefinierte Funktionen und interne Subs
- Intelligente Funktionskommentare und Argumente (nur Funktionen mit Argumenten auf dem Stapel werden verarbeitet). Dies ermöglicht es xAnalyzer, eine klarere Sicht auf den Code zu geben, indem diese Funktionen einfach mit tatsächlichen Argumenten verarbeitet und kommentiert werden
- Erkennung indirekter Funktionsaufrufe mit Schema CALL -> DYNAMIC_MEMORY -> API
- Erkennung indirekter Funktionsaufrufe mit Schema CALL -> REGISTER/REGISTER + DISPLACEMENT -> API
- Erkennung indirekter Funktionsaufrufe mit Schema CALL -> JMP -> JMP -> API
- Automatische Schleifenerkennung
- Fehler bei Minderjährigen behoben
- Code-Neuordnungen
xAnalyzer 2.0
- Unterstützung für x64-Bit
- Unterstützt Änderungen der Reihenfolge der API-Aufrufargumente in x64-Bit
- Unterstützt zusätzliche Informationen zu PDB-Dateien in API-Aufrufen
- Unterstützung direkter/indirekter API-Aufrufe
- Unterstützung statischer API-Funktionsaufrufe an den Hauptmodulcode
– Mehrere falsche Reihenfolge der API-Aufrufargumente in Definitionsdateien behoben. Weitere Anrufe können jetzt erkannt und ordnungsgemäß kommentiert werden
- Einige Verbesserungen und besser geschriebener Code
- Diverse Fehler behoben
xAnalyzer 1.2
– Die Definitionsdateien der API wurden aktualisiert
- Unterstützung für ausführbare vc6+-Dateien hinzugefügt
xAnalyzer 1.1
– Es wurde ein Problem behoben, bei dem API-Informationen zu ausführbaren VC++-Dateien nicht angezeigt wurden, weil BASIC_INSTRUCTION_INFO-Strukturen vor/nach der Verwendung in einer Schleife nicht ordnungsgemäß bereinigt wurden
- Definitionsdateien der API hinzugefügt/aktualisiert
- Fehler behoben
xAnalyzer 1.0
- Erstveröffentlichung
Beiträge aller Art sind willkommen, nicht nur als PR, sondern auch als Fehlermeldung, Dokumentation usw.
Bitte beachten Sie Folgendes:
Vielen Dank, dass Sie das xAnalyzer-Plugin verwenden ... und viel Spaß beim Rückwärtsfahren!