RET-Sync steht für die Synchronisation von Reverse-Engineering-Tools. Es handelt sich um eine Reihe von Plugins, die dazu beitragen, eine Debugging -Sitzung (Windbg/GDB/LLDB/OllyDBG/OllyDBG2/X64DBG) mit einem Disassembler (IDA/Ghidra/Binär -Ninja) zu synchronisieren. Die zugrunde liegende Idee ist einfach: Nehmen Sie das Beste aus beiden Welten (statische und dynamische Analyse).
Debugger und dynamische Analyse bieten uns:
!peb ,! !drvobj ,! !address usw. )Disassembler und statische Analyse liefern uns:
Schlüsselmerkmale:
RET-Sync ist eine Gabel von QB-Sync, die ich während meines Aufenthalts in Quarkslab entwickelt und gepflegt habe.
Die Debugger -Plugins:
ext_windbg/sync : windbg -Erweiterungsquelldateien, nach erstellt: sync.dllext_gdb/sync.py : GDB -Pluginext_lldb/sync.py : LLDB -Pluginext_olly1 : OllyDBG 1.10 Pluginext_olly2 : Ollydbg V2 Pluginext_x64dbg : x64dbg PluginDie Disassembler -Plugins:
ext_ida/SyncPlugin.pyext_ghidra/dist/ghidra_*_retsync.zip : ghidra pluginext_bn/retsync : Binäres Ninja -PluginUnd das Bibliotheks -Plugin:
ext_lib/sync.py : eigenständige Python -BibliothekIDA- und GDB -Plugins erfordern ein gültiges Python -Setup. Python 2 (> = 2,7) und Python 3 werden unterstützt.
Vorgefertigte Binärdateien für Windbg/Ollydbg/Ollydbg2/X64DBG-Debugger werden durch eine Azure DevOps Pipeline vorgeschlagen:
Wählen Sie den letzten Build aus und überprüfen Sie die Artefakte im Related Abschnitt: 6 published .

Ein vorgefertigtes Plugin-Archiv des Ghidra-Plugins ist in ext_ghidra/dist bereitgestellt.
RET-Sync sollte für die meisten Benutzer mit einem typischen Setup: Debugger und Disassembler (en) auf demselben Host, Modulnamen, herausarbeiten.
In einigen Szenarien kann jedoch eine bestimmte Konfiguration verwendet werden. Zu diesem Zweck prüfen Erweiterungen und Plugins nach einer optionalen globalen Konfigurationsdatei namens .sync im Home -Verzeichnis des Benutzers. Es muss eine gültige .INI -Datei sein.
Darüber hinaus suchen die IDA- und Ghidra-Plugins auch nach der Konfigurationsdatei im IDB- oder Projektverzeichnis ( <project>.rep ), um lokale, pro-IDB/Projekt-Einstellungen zuzulassen. Wenn eine lokale Konfigurationsdatei vorhanden ist, wird die globale Konfigurationsdatei ignoriert.
Die in diesen Konfigurationsdateien deklarierten Werte überschreiben Standardwerte. Bitte beachten Sie, dass die Nr .sync -Datei standardmäßig erstellt wird.
Im Folgenden detailliert drei gemeinsame Szenarien, in denen eine Konfigurationsdatei nützlich/benötigt ist:
Der Abschnitt [INTERFACE] wird verwendet, um netzwerkbezogene Einstellungen anzupassen. Nehmen wir an, man möchte Ida mit einem Debugger synchronisieren, der in einem virtuellen Maschine (oder einfach einem anderen Host), dem gemeinsamen Fernkern -Kernel -Debugging -Szenario, ausgeführt wird.
Erstellen Sie einfach zwei .sync -Datei:
[INTERFACE]
host=192.168.128.1
port=9234
Es teilt das Ret-Sync IDA Plugin mit, dass sie die Schnittstelle 192.168.128.1 mit Port 9234 anhören sollen. Es versteht sich von selbst, dass diese Schnittstelle vom Remote -Host oder der virtuellen Maschine erreichbar sein muss.
[INTERFACE]
host=192.168.128.1
port=9234
Es teilt das RET-Sync -Debugger-Plugin mit, dass sie eine Verbindung zum RET-Sync- IDA Plugin herstellen sollen, das zuvor in dieser Schnittstelle zum Anhören konfiguriert ist.
Hinweis: Hier müssen Sie eine echte IP angeben und nicht 0.0.0.0 verwenden. Dies liegt daran, dass die Variable von mehreren Quellen sowohl zum Binden als auch zum Verbinden verwendet wird. Die Verwendung von 0.0.0.0 führt daher zu seltsamen Fehlern.
[ALIASES]
ntoskrnl_vuln.exe=ntkrnlmp.exe
Der Abschnitt [ALIASES] wird verwendet, um den Namen anzupassen, der von einem Disassembler (IDA/Ghidra) verwendet wird, um ein Modul an seinen Dispatcher/Programmmanager zu registrieren.
Standardmäßig verwenden Disassembler -Plugins den Namen der Eingabedatei. Man kann jedoch die Datei vorher umbenannt haben und nicht mehr mit dem Namen des tatsächlichen Prozesses oder des geladenen Moduls übereinstimmt, wie der Debugger angezeigt wird.
Hier sagen wir einfach dem Dispatcher, er solle dem Namen ntkrnlmp.exe (richtiger Name) anstelle von ntoskrnl_vuln.exe (IDB -Name) übereinstimmen.
Der Debugging Frontend des QT Creators ändert die Art und Weise, wie die GDB -Befehlsausgabe protokolliert wird. Da dies die Synchronisation beeinträchtigen würde, besteht eine Option, um die RAW -GDB -Ausgabe für die Synchronisation anstelle einer temporären Datei zu verwenden. In der .sync -Konfigurationsdatei verwenden
[GENERAL]
use_tmp_logging_file=false
Wenn Sie das QT -Debugging -Frontend für das Ziel verwenden möchten.
/proc/<pid>/maps In einigen Szenarien, wie z. B. eingebettete Geräte über serielle oder rohe Firmware in QEMU, ist GDB der PID nicht bekannt und kann nicht zugreifen /proc/<pid>/maps .
In diesen Fällen wird der Abschnitt [INIT] verwendet, um einen benutzerdefinierten Kontext an das Plugin zu übergeben. Es ermöglicht das Überschreiben einiger Felder wie PID- und Speicherzuordnungen.
.sync -Inhaltsextrakt:
[INIT]
context = {
"pid": 200,
"mappings": [ [0x400000, 0x7A81158, 0x7681158, "asav941-200.qcow2|lina"] ]
}
Jeder Eintrag in den Zuordnungen ist: mem_base , mem_end , mem_size , mem_name .
In einigen Szenarien, wie z. B. eingebettete Geräte für Debuggen oder eine Verbindung zu minimalistischen Debug -Schnittstellen, ist es möglicherweise bequemer, die in den Disassembler -Plugins implementierte automatische Re -Rebasing -Funktion zu umgehen.
Die Option use_raw_addr wird derzeit nur für Ghidra unterstützt. In der .SYNC -Konfigurationsdatei verwenden Sie:
[GENERAL]
use_raw_addr=true
IDA 7.x Branch ist erforderlich. Für ältere Versionen (6.9x) siehe Archived Release ida6.9x .
Für die IDA -Installation kopieren Sie Syncplugin.py und retsync -Ordner von ext_ida nach IDA -Plugins -Verzeichnis, zum Beispiel:
C:Program FilesIDA Pro 7.4plugins%APPDATA%Hex-RaysIDA Proplugins~/.idapro/pluginsAlt-Shift-S ) oder Edit > Plugins > ret-sync [sync] default idb name: ld.exe
[sync] sync enabled
[sync] cmdline: "C:Program FilesPython38python.exe" -u "C:UsersuserAppDataRoamingHex-RaysIDA Propluginsretsyncbroker.py" --idb "target.exe"
[sync] module base 0x100400000
[sync] hexrays #7.3.0.190614 found
[sync] broker started
[sync] plugin loaded
[sync] << broker << dispatcher not found, trying to run it
[sync] << broker << dispatcher now runs with pid: 6544
[sync] << broker << connected to dispatcher
[sync] << broker << listening on port 63107
Um Probleme mit der IDA -Erweiterung zu beheben, sind in der Datei retsync/rsconfig.py verfügbar:
LOG_LEVEL = logging.INFO
LOG_TO_FILE_ENABLE = False
Einstellen LOG_LEVEL -Wert auf logging.DEBUG macht das Plugin ausführlicher.
Einstellen LOG_TO_FILE_ENABLE Wert auf True löst die Protokollierung von Ausnahmeinformationen von broker.py und dispatcher.py in dedizierte Dateien aus. Die Protokolldatei wird im %TMP% -Ordner mit einem Namensmuster retsync.%s.err generiert.
Verwenden Sie entweder die vorgefertigte Version aus dem Ordner ext_ghidra/dist oder folgen Sie dem Anweisungen, um sie zu erstellen. Jede Erweiterungsaufbau unterstützt nur die Version von Ghidra, die im Dateinamen des Plugins angegeben ist. EG ghidra_9.1_PUBLIC_20191104_retsync.zip ist für Ghidra 9.1 Public.
apt install gradle$GHIDRA_DIR durch Ihr Installationsverzeichnis) cd ext_ghidra
gradle -PGHIDRA_INSTALL_DIR= $GHIDRA_DIRFile -> Install Extensions... klicken Sie auf das + Zeichen und wählen Sie die ext_ghidra/dist/ghidra_*_retsync.zip und klicken Sie auf OK. Dies extrahiert den retsync -Ordner effektiv aus dem Reißverschluss in $GHIDRA_DIR/Extensions/Ghidra/ [*] retsync init
[>] programOpened: tm.sys
imageBase: 0x1c0000000
Alt+s )/Deaktivieren ( Alt+Shift+s )/Neustart ( Alt+r ) -Synchronisation zu aktivieren. Ein Statusfenster ist auch bei Windows -> RetSyncPlugin verfügbar. Sie möchten es im Allgemeinen auf die Seite fallen lassen, um es in die Ghidra -Umgebungsfenster zu integrieren.
Binary Ninja -Unterstützung ist experimentell. Stellen Sie sicher, dass Sie Ihre Analysedatenbanken sichern.
RET-Sync benötigt mindestens ebenso wie Python 3 binäre Ninja Version 2.2 (Python 2 wird nicht unterstützt).
Ret-Sync ist noch nicht über den Plugin-Manager des binären Ninja verteilt. Eine manuelle Installation ist erforderlich. Kopieren Sie diesen Inhalt des ext_bn -Ordners einfach in den Plugins -Ordner von Biny Ninja, zum Beispiel:
%APPDATA%Binary Ninjaplugins
Nach dem Neustart binärer Ninja sollte die folgende Ausgabe im Konsolenfenster vorhanden sein:
[sync] commands added
Loaded python3 plugin 'retsync'
Verwenden Sie entweder vorgebaute Binärdateien oder die in ext_windbg bereitgestellte Visual Studio 2017-Lösung (siehe https://docs.microsoft.com/en-us/visualstudio/releasenotes/vs2017-relnotes).
Dadurch wird die x64releasesync.dll -Datei erstellt.
Sie müssen die resultierende sync.dll -Datei in den entsprechenden Windbg -Erweiterungsweg kopieren.
Für frühere Versionen von Windbg ist dies so etwas (achten Sie auf x86 / x64 -Aromen) zum Beispiel
C:Program Files (x86)Windows Kits10Debuggersx64winextsync.dll
Der Ordner für die Speicherung der Erweiterung scheint auf dem Pfad zu basieren, sodass Sie einen der abgefragten Standorte platzieren müssen.
Ein Beispiel ist, es hier zu setzen:
C:UsersuserAppDataLocalMicrosoftWindowsAppssync.dll
.load -Befehl) 0:000> .load sync
[sync.dll] DebugExtensionInitialize, ExtensionApis loaded
0:000> !sync
[sync] No argument found, using default host (127.0.0.1:9100)
[sync] sync success, sock 0x5a8
[sync] probing sync
[sync] sync is now enabled with host 127.0.0.1
ZB im Ausgabefenster von IDA
[*] << broker << dispatcher msg: add new client (listening on port 63898), nb client(s): 1
[*] << broker << dispatcher msg: new debugger client: dbg connect - HostMachineHostUser
[sync] set debugger dialect to windbg, enabling hotkeys
Wenn das aktuelle Modul von Windbg die IDA -Dateiname übereinstimmt
[sync] idb is enabled with the idb client matching the module name.
Hinweis: Wenn Sie den folgenden Fehler erhalten, liegt dies daran, dass Sie die Datei in den obigen Schritten nicht in den richtigen Ordner kopiert haben.
0: kd> .load sync
The call to LoadLibrary(sync) failed, Win32 error 0n2
"The system cannot find the file specified."
Please check your debugger configuration and/or network access.
Der folgende Fehler bedeutet normalerweise, dass Windbg versucht hat, den falschen Geschmack der Erweiterung, z. B. x64 , anstelle der x86 sync.dll zu laden.
0:000> .load sync
The call to LoadLibrary(sync) failed, Win32 error 0n193
"%1 is not a valid Win32 application."
Please check your debugger configuration and/or network access.
Wenn Windbg -Vorschau beide Plugins ( x86 und x64 ) aus demselben Verzeichnis lädt, kann man die x86 -Datei sync32.dll umbenennen.
0:000> .load sync32
ext_gdb/sync.py in das Verzeichnis Ihrer Wahl gdb> source sync.py
[sync] configuration file loaded 192.168.52.1:9100
[sync] commands added
LLDB -Unterstützung ist jedoch experimentell:
~/.lldbinit hinzugefügt werden) lldb> command script import sync
Die Unterstützung von Ollydbg 1.10 ist jedoch experimentell:
Die Unterstützung von OllyDBG2 ist jedoch experimentell:
Basierend auf Testplugin https://github.com/x64dbg/Testplugin. Die Unterstützung von X64DBG ist jedoch experimentell:
pluginsdk " in " ext_x64dbgx64dbg_sync " ein..d32 oder .dp64 ) im Plugin -Verzeichnis von X64DBG.Für Befehlszeilen-orientierte Debugger (hauptsächlich Windbg und GDB) wird von Ret-Sync eine Reihe von Befehlen freigelegt, um die Aufgabe des umgekehrten Engineering zu unterstützen.
Die folgenden Befehle sind generisch (Windbg und GDB). Bitte beachten Sie, dass a ! Präfix wird für Windbg (z. B. sync in GDB , !sync in Windbg) benötigt.
| Debugger Command | Beschreibung |
|---|---|
synchelp | Zeigen Sie die Liste der verfügbaren Befehle mit kurzer Erklärung an |
sync | Synchronisation beginnen |
syncoff | Synchronisation stoppen |
cmt [-a address] <string> | Fügen Sie einen Kommentar bei Current IP in Disassembler hinzu |
rcmt [-a address] | Kommentar bei aktuellen IP in Disassembler zurücksetzen |
fcmt [-a address] <string> | Fügen Sie einen Funktionskommentar für die Funktion hinzu, in der sich die aktuelle IP befindet |
raddr <expression> | Fügen Sie einen Kommentar mit einer neu aus dem Ausdruck bewerteten Adresse hinzu |
rln <expression> | Holen Sie sich Symbol aus dem Disassembler für die angegebene Adresse |
lbl [-a address] <string> | Fügen Sie bei der aktuellen IP in Disassembler einen Labelnamen hinzu |
cmd <string> | Führen Sie einen Befehl in Debugger aus und fügen Sie seine Ausgabe als Kommentar bei Current IP in Disassembler hinzu |
bc <||on|off|set 0xBBGGRR> | Aktivieren/deaktivieren Sie Pfadfärben im Disassembler |
idblist | Holen Sie sich die Liste aller mit dem Dispatcher verbundenen IDB -Clients |
syncmodauto <on|off> | Aktivieren/Deaktivieren des Disassembler -Autoschalters basierend auf dem Modulnamen |
idbn <n> | Stellen Sie die aktive IDB auf den N -ten Client ein |
jmpto <expression> | |
jmpraw <expression> | Wenn eine IDB aktiviert ist, wird die Ansicht von Disassembler mit der resultierenden Adresse synchronisiert. |
translate <base> <addr> <mod> | Wiederholen Sie eine Adresse in Bezug auf den Namen und den Versatz seines Moduls |
Windbg spezifische Befehle:
| Debugger Command | Beschreibung |
|---|---|
curmod | MODUL FOMATION für den aktuellen Befehlsversatz anzeigen (zur Fehlerbehebung) |
modlist | DEBUGGER MARKUP Language (DML) Verbesserte Modulliste für einen reibungsloseren aktiven IDB |
idb <module name> | Setzen Sie das angegebene Modul als aktive IDB (siehe modlist Enhanced Version von lm ) |
modmap <base> <size> <name> | Ein synthetisches ("gefälschtes") Modul (definiert unter Verwendung seiner Basisadresse und Größe) wird der internen Debugger -Liste hinzugefügt |
modunmap <base> | Entfernen Sie ein zuvor kartiertes synthetisches Modul an der Basisadresse |
modcheck <||md5> | Überprüfen Sie, ob das aktuelle Modul wirklich übereinstimmt, dass die Datei von IDB übereinstimmt (Beispiel: Modul wurde aktualisiert) |
bpcmds <||save|load|> | BPCMDS -Wrapper, Speichern und Neuladen .bpcmds (Breakpoints Commands List) Ausgabe auf die aktuelle IDB |
ks | Debugger Markup Language (DML) erweiterte Ausgabe des KV -Befehls |
GDB -spezifische Befehle:
| Debugger Command | Beschreibung |
|---|---|
bbt | Schöne Backtrace. Ähnlich wie BT in GDB, fordert aber Symbole von Disassembler an |
patch | Patch -Bytes im Disassembler basierend auf dem Live -Kontext |
bx | Ähnlich wie GDB X , aber ein Symbol verwendet. Das Symbol wird von Disassembler gelöst |
cc | Weiter in Disassembler Cursor |
Das Feld Overwrite idb name Eingabe" soll den Standard -IDB -Namen ändern. Es ist der Name, der vom Plugin verwendet wird, um sich beim Dispatcher zu registrieren. Der automatische IDB -Switch basiert auf dem Modulnamen -Matching. Bei widersprüchlichen Namen (wie ein foo.exe und foo.dll ) kann dies verwendet werden, um die Übereinstimmung zu erleichtern. Bitte beachten Sie, dass Sie das Eingabefeld während der aktiven Synchronisierung ändern müssen, müssen Sie sich wieder mit dem Dispatcher registrieren. Dies kann einfach mit der Schaltfläche " Restart " erfolgen.
Als Erinnerung ist es standardmäßig mit der .sync -Konfigurationsdatei zu alias möglich.
Ret-Sync definiert diese globalen Verknüpfungen in IDA:
Alt-Shift-S - RET-Sync- Plugin ausführenCtrl-Shift-S -Globale Synchronisierung des globalen Synchronisierens umschaltenCtrl-H -Synchronisierung von Hexenstrahlen umschaltenIn der Debug-Symbolleiste sind auch zwei Schaltflächen erhältlich, um die synchronisierende globale und hex-Strahlen umzuschalten.
Syncplugin.py registriert auch Debugger Command Wrapper Hotkeys.
F2 - Setzen Sie den Haltepunkt an der CursoradresseF3 - Setzen Sie One -Shot -Haltepunkt unter CursoradresseCtrl-F2 - Hardware -Haltepunkt unter Cursoradresse einstellenCtrl-F3 -Setzen Sie One-Shot-Hardware-Haltepunkt unter CursoradresseAlt-F2 - Übersetzende (Rebase im Debugger) Aktuelle CursoradresseAlt-F5 - GOCtrl-Alt-F5 -Run (nur GDB)F10 - EinzelschrittF11 - Single TraceDiese Befehle sind nur verfügbar, wenn die aktuelle IDB aktiv ist. Wenn möglich, wurden sie auch für andere Debugger implementiert.
Sobald das RetSyncplugin geöffnet ist, können Sie es dem CodeBrowser -Fenster durch einfaches Drag'n'Drop hinzufügen:

Wenn Sie mehrere Module anzeigen möchten, müssen Dateien im selben CodeBrowser -Viewer geöffnet werden. Ziehen Sie einfach die zusätzlichen im CodeBrowser -Fenster ab, um das Ergebnis wie oben zu erhalten.
Ret-Sync definiert diese globalen Verknüpfungen in Ghidra:
Alt-S - Synchronisierung ermöglichenAlt-Shift-S -Synchronisierung deaktivierenAlt-R - Synchronisierung neu startenAlt-Shift-R -Konfiguration neu ladenBindungen über Debugger -Befehle werden ebenfalls implementiert. Sie ähneln denen aus der Erweiterung von IDA (außer dem Befehl "go").
F2 - Setzen Sie den Haltepunkt an der CursoradresseCtrl-F2 - Hardware -Haltepunkt unter Cursoradresse einstellenAlt-F3 -Setzen Sie One-Shot-Haltepunkt unter CursoradresseCtrl-F3 -Setzen Sie One-Shot-Hardware-Haltepunkt unter CursoradresseAlt-F2 - Übersetzende (Rebase im Debugger) Aktuelle CursoradresseF5 - GehAlt-F5 - Run (nur GDB)F10 - EinzelschrittF11 - Single Trace Ret-Sync definiert diese globalen Verknüpfungen in binären Ninja:
Alt-S - Synchronisierung ermöglichenAlt-Shift-S -Synchronisierung deaktivierenBindungen über Debugger -Befehle werden ebenfalls implementiert. Sie ähneln denen aus der Erweiterung von Ida.
F2 - Setzen Sie den Haltepunkt an der CursoradresseCtrl-F2 - Hardware -Haltepunkt unter Cursoradresse einstellenAlt-F3 -Setzen Sie One-Shot-Haltepunkt unter CursoradresseCtrl-F3 -Setzen Sie One-Shot-Hardware-Haltepunkt unter CursoradresseAlt-F2 - Übersetzende (Rebase im Debugger) Aktuelle CursoradresseAlt-F5 - GOF10 - EinzelschrittF11 - Single Trace [WinDbg]
0:000:x86> pr
eax=00000032 ebx=00000032 ecx=00000032 edx=0028eebc esi=00000032 edi=00000064
eip=00430db1 esp=0028ed94 ebp=00000000 iopl=0 nv up ei pl nz na po nc
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000202
image00000000_00400000+0x30db1:
00430db1 57 push edi
0:000:x86> dd esp 8
0028ed94 00000000 00433845 0028eebc 00000032
0028eda4 0028f88c 00000064 002b049e 00000110
0:000:x86> !cmt 0028ed94 00000000 00433845 0028eebc 00000032
[sync.dll] !cmt called
[IDA]
.text:00430DB1 push edi ; 0028ed94 00000000 00433845 0028eebc 00000032
[WinDbg]
0:000:x86> !rcmt
[sync] !rcmt called
[IDA]
.text:00430DB1 push edi
[WinDbg]
0:000:x86> !fcmt decodes buffer with key
[sync] !fcmt called
[IDA]
.text:004012E0 ; decodes buffer with key
.text:004012E0 public decrypt_func
.text:004012E0 decrypt_func proc near
.text:004012E0 push ebp
Hinweis: Wenn Sie diesen Befehl ohne Argument aufrufen, setzen Sie den Kommentar der Funktion zurück.
[WinDbg]
0:000:x86> !lbl meaningful_label
[sync] !lbl called
[IDA]
.text:000000000040271E meaningful_label:
.text:000000000040271E mov rdx, rsp
[WinDbg]
0:000:x86> pr
eax=00000032 ebx=00000032 ecx=00000032 edx=0028eebc esi=00000032 edi=00000064
eip=00430db1 esp=0028ed94 ebp=00000000 iopl=0 nv up ei pl nz na po nc
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000202
image00000000_00400000+0x30db1:
00430db1 57 push edi
[sync.dll] !cmd r edi
[IDA]
.text:00430DB1 push edi ; edi=00000064
[WinDbg]
0:000> !idblist
> currently connected idb(s):
[0] target.exe
[WinDbg]
0:000> !syncmodauto off
[IDA]
[*] << broker << dispatcher msg: sync mode auto set to off
[WinDbg]
0:000:> !idbn 0
> current idb set to 0
In diesem Beispiel wäre der aktuelle aktive IDB -Client auf:
[0] target.exe.
Alt-F2 Verknüpfung) verwendet werden, können Sie eine Adresse in Bezug auf den Namen und den Offset seines Moduls wieder aufnehmen. ! CMT ,! -a --address Die Adresse sollte als hexadezimaler Wert übergeben werden. Das Parsen des Befehls basiert auf Pythons argparse -Modul. Zum Stoppen der Verwendung von Parsen verwendet -- .
[WinDbg]
0:000:x86> !cmt -a 0x430DB2 comment
Die Adresse muss die Adresse einer gültigen Anweisung sein.
Synchronisieren mit Host:
gdb> sync
[sync] sync is now enabled with host 192.168.52.1
<not running>
gdb> r
Starting program: /bin/ls
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/libthread_db.so.1".
Verwenden Sie Befehle ohne "!" Präfix
(gdb) cmd x/i $pc
[sync] command output: => 0x8049ca3: push edi
(gdb) synchelp
[sync] extension commands help:
> sync <host>
> syncoff
> cmt [-a address] <string>
> rcmt [-a address] <string>
> fcmt [-a address] <string>
> cmd <string>
> bc <on|off|>
> rln <address>
> bbt <symbol>
> patch <addr> <count> <size>
> bx /i <symbol>
> cc
> translate <base> <addr> <mod>
(gdb) bt
#0 0x0000000000a91a73 in ?? ()
#1 0x0000000000a6d994 in ?? ()
#2 0x0000000000a89125 in ?? ()
#3 0x0000000000a8a574 in ?? ()
#4 0x000000000044f83b in ?? ()
#5 0x0000000000000000 in ?? ()
(gdb) bbt
#0 0x0000000000a91a73 in IKE_GetAssembledPkt ()
#1 0x0000000000a6d994 in catcher ()
#2 0x0000000000a89125 in IKEProcessMsg ()
#3 0x0000000000a8a574 in IkeDaemon ()
#4 0x000000000044f83b in sub_44F7D0 ()
#5 0x0000000000000000 in ()
F3 , um einen One-Shot-Haltepunkt und F5 für den Fortsetzung des F5 festzulegen. Dies ist nützlich, wenn Sie es vorziehen, dies von GDB zu tun. (gdb) b* 0xA91A73
Breakpoint 1 at 0xa91a73
(gdb) c
Continuing.
Breakpoint 1, 0x0000000000a91a73 in ?? ()
(gdb) cc
[sync] current cursor: 0xa91a7f
[sync] reached successfully
(gdb)
lldb> process launch -s
lldb> sync
[sync] connecting to localhost
[sync] sync is now enabled with host localhost
[sync] event handler started
lldb> synchelp
[sync] extension commands help:
> sync <host> = synchronize with <host> or the default value
> syncoff = stop synchronization
> cmt <string> = add comment at current eip in IDA
> rcmt <string> = reset comments at current eip in IDA
> fcmt <string> = add a function comment for 'f = get_func(eip)' in IDA
> cmd <string> = execute command <string> and add its output as comment at current eip in IDA
> bc <on|off|> = enable/disable path coloring in IDA
color a single instruction at current eip if called without argument
lldb> cmt mooo
Alt+s )/Deaktivieren ( Alt+u ) -Synchronisation zu aktivieren. Ctrl+s )/Deaktivieren ( Ctrl+u ) Synchronisation zu aktivieren.Aufgrund des Beta -Status der OllyDBG2 -API wurden nur die folgenden Funktionen implementiert:
F7 verwenden; F8 für das Stufen]CTRL+; ]CTRL+: ] Verwenden Sie das Plugins -Menü oder die Befehle aktivieren (" !sync" ) oder deaktivieren Sie (" !syncoff
Verwenden Sie Befehle
[sync] synchelp command!
[sync] extension commands help:
> !sync = synchronize with <host from conf> or the default value
> !syncoff = stop synchronization
> !syncmodauto <on | off> = enable / disable idb auto switch based on module name
> !synchelp = display this help
> !cmt <string> = add comment at current eip in IDA
> !rcmt <string> = reset comments at current eip in IDA
> !idblist = display list of all IDB clients connected to the dispatcher
> !idb <module name> = set given module as the active idb (see !idblist)
> !idbn <n> = set active idb to the n_th client. n should be a valid decimal value
> !translate <base> <addr> <mod> = rebase an address with respect to local module's base
HINWEIS: Verwenden des Befehls ! Übersetzer von einem Disassembler (IDA/Ghidra, Alt-F2 -Verknüpfung) das Disassembler-Fenster zum "Springen" zur spezifischen Adresse (entspricht des Ausführens von DisasMen in X64DBG-Befehlszeile).
Möglicherweise möchten Sie RET-Sync -Kernfunktionen (Positionssynchronisierung mit einem Disassembler, Symbolauflösung) verwenden, obwohl eine vollständige Debugging-Umgebung nicht verfügbar oder mit einem benutzerdefinierten Tool ist. Zu diesem Zweck wurde eine minimalistische Python -Bibliothek extrahiert.
Das folgende Beispiel zeigt die Verwendung der Python -Bibliothek mit einem Skript, das durch die Ausgabe eines ereignisbasierten Protokollierungs-/Tracing -Tools führt.
from sync import *
HOST = '127.0.0.1'
MAPPINGS = [
[ 0x555555400000 , 0x555555402000 , 0x2000 , " /bin/tempfile" ],
[ 0x7ffff7dd3000 , 0x7ffff7dfc000 , 0x29000 , " /lib/x86_64-linux-gnu/ld-2.27.so" ],
[ 0x7ffff7ff7000 , 0x7ffff7ffb000 , 0x4000 , " [vvar]" ],
[ 0x7ffff7ffb000 , 0x7ffff7ffc000 , 0x1000 , " [vdso]" ],
[ 0x7ffffffde000 , 0x7ffffffff000 , 0x21000 , " [stack]" ],
]
EVENTS = [
[ 0x0000555555400e74 , "malloc" ],
[ 0x0000555555400eb3 , "open" ],
[ 0x0000555555400ee8 , "exit" ]
]
synctool = Sync ( HOST , MAPPINGS )
for e in EVENTS :
offset , name = e
synctool . invoke ( offset )
print ( " 0x%08x - %s" % ( offset , name ))
print ( "[>] press enter for next event" )
input ()Während sich zunächst auf die dynamische Analyse (Debuggers) konzentriert, ist es möglich, die Plugins-Set zu erweitern und in andere Tools zu integrieren.
Andere Ressourcen (en):
Mit GDB:
Mit Windbg:
g '). Dies kann zu einer größeren Verlangsamung führen, wenn zu viele dieser Ereignisse vorhanden sind. Eine begrenzte Lösung wurde implementiert. Die beste Lösung besteht darin, immer noch vorübergehend zu synchronisieren.Mit Ghidra:
Mit IDA:
Konflikte:
.sync -Konfigurationsdatei zu verwenden, um einen anderen Port zu definieren. [INTERFACE]
host=127.0.0.1
port=9234
RET-Sync ist kostenlose Software: Sie können sie neu verteilt und/oder unter den Bestimmungen der GNU General Public License wie von der Free Software Foundation, entweder Version 3 der Lizenz, veröffentlicht oder (nach Ihrer Option) jede spätere Version veröffentlicht.
Dieses Programm wird in der Hoffnung verteilt, dass es nützlich sein wird, jedoch ohne Garantie; Ohne die implizite Garantie für Handelsfähigkeit oder Eignung für einen bestimmten Zweck. Weitere Informationen finden Sie in der GNU General Public Lizenz.
Sie hätten zusammen mit diesem Programm eine Kopie der GNU General Public Lizenz erhalten haben. Wenn nicht, siehe http://www.gnu.org/licenses/.
Das binäre Ninja -Plugin wird unter der MIT -Lizenz veröffentlicht.
Hagel an Bruce Dang, Stalkr, @Ivanlef0u, Damien Aumaître, Sébastien Renaud und Kévin Szkudlapski, @ M00dy , @Saidelike, Xavier Mehrenberger, Ben64, Raphaël Rigo, Jiss für ihre Freundlichkeit, Hilfe, Feedbacks und Gedanken. Ilfak Guilfanov, Igor Skochinsky und Arnaud Dieorenen für ihre Hilfe bei IDAs Interna und herausragende Unterstützung. Vielen Dank an Jordan Wiens und Vector 35. Vielen Dank auch an alle Mitwirkenden und alle, die Probleme/Fehler gemeldet haben.