RET-Sync signifie Synchronisation des outils d'ingénierie inverse. Il s'agit d'un ensemble de plugins qui aident à synchroniser une session de débogage (WindBG / GDB / LLDB / OLLYDBG / OLLYDBG2 / X64DBG) avec un démontbler (IDA / Ghidra / Binary Ninja). L'idée sous-jacente est simple: prendre le meilleur des deux mondes (analyse statique et dynamique).
Les débuggeurs et l'analyse dynamique nous fournissent:
!peb , !drvobj ,! !address , etc. )Les démonts et l'analyse statique nous fournissent:
Caractéristiques clés:
RET-Sync est une fourche de QB-Sync que j'ai développée et entretenue pendant mon séjour à Quarkslab.
Les plugins débogueurs:
ext_windbg/sync : fichiers source d'extension de Windbg, une fois construit: sync.dllext_gdb/sync.py : plugin gdbext_lldb/sync.py : plugin LLDBext_olly1 : plugin OLLYDBG 1.10ext_olly2 : plugin ollydbg v2ext_x64dbg : plugin x64dbgLes plugins de désassembleur:
ext_ida/SyncPlugin.pyext_ghidra/dist/ghidra_*_retsync.zip : plugin ghidraext_bn/retsync : Plugin ninja binaireEt le plugin de la bibliothèque:
ext_lib/sync.py : bibliothèque Python autonomeLes plugins IDA et GDB nécessitent une configuration Python valide. Python 2 (> = 2,7) et Python 3 sont pris en charge.
Des binaires prédéfinis pour Windbg / Ollydbg / Olydbg2 / x64DBG Les débuggeurs sont proposés via un pipeline Azure DevOps :
Sélectionnez la dernière construction et vérifiez les artefacts dans la section Related : 6 published .

Une archive de plugin prédéfinie du plugin Ghidra est fournie dans ext_ghidra/dist .
RET-Sync devrait fonctionner hors de la boîte pour la plupart des utilisateurs avec une configuration typique: débogueur et désassembleur sur le même hôte, noms de modules correspondant.
Pourtant, dans certains scénarios, une configuration spécifique peut être utilisée. Pour cela, les extensions et les plugins vérifient un fichier de configuration global en option nommé .sync dans le répertoire personnel de l'utilisateur. Ce doit être un fichier .INI valide.
De plus, les plugins IDA et GHIDRA recherchent également le fichier de configuration dans le répertoire IDB ou Project ( <project>.rep ) d'abord pour permettre les paramètres locaux, Per-IDB / Project. Si un fichier de configuration local est présent, le fichier de configuration global est ignoré.
Valeurs déclarées dans ces fichiers de configuration remplacer les valeurs par défaut. Veuillez noter qu'aucun fichier .sync est créé par défaut.
Ci-dessous, nous détaillons, trois scénarios communs où un fichier de configuration est utile / nécessaire:
La section [INTERFACE] est utilisée pour personnaliser les paramètres liés au réseau. Supposons que l'on souhaite synchroniser IDA avec un débogueur exécutant à l'intérieur d'une machine virtuelle (ou simplement un autre hôte), un scénario de débogage de noyau à distance commun.
Créez simplement deux fichiers .sync :
[INTERFACE]
host=192.168.128.1
port=9234
Il indique au plugin RET-Sync IDA d'écouter sur l'interface 192.168.128.1 avec le port 9234 . Il va sans dire que cette interface doit être accessible à partir de l'hôte distant ou de la machine virtuelle.
[INTERFACE]
host=192.168.128.1
port=9234
Il indique au plugin de débogueur RET-Sync de se connecter au plugin RET-Sync IDA configuré précédemment pour écouter dans cette interface.
Remarque: vous devez spécifier une vraie IP ici et ne pas utiliser 0.0.0.0 . En effet, la variable est utilisée par plusieurs sources à la fois pour la liaison et la connexion, donc l'utilisation de 0.0.0.0 entraînera des erreurs étranges.
[ALIASES]
ntoskrnl_vuln.exe=ntkrnlmp.exe
La section [ALIASES] est utilisée pour personnaliser le nom qui est utilisé par un désassembleur (IDA / Ghidra) pour enregistrer un module à son Dispatcher / Program Manager.
Par défaut, les plugins de désassembleur utilisent le nom du fichier d'entrée. Cependant, on peut avoir renommé le fichier à l'avance et il ne correspond plus au nom du processus réel ou du module chargé comme le montre le débogueur.
Ici, nous disons simplement au répartiteur pour correspondre au nom ntkrnlmp.exe (vrai nom) au lieu de ntoskrnl_vuln.exe (nom idb).
Le Frontend de débogage du créateur QT modifie la façon dont la sortie de la commande GDB est enregistrée. Étant donné que cela interférerait avec la synchronisation, une option existe pour utiliser la sortie GDB brute pour la synchronisation au lieu d'un fichier temporaire. Dans le fichier de configuration .Sync Utilisation
[GENERAL]
use_tmp_logging_file=false
Si vous souhaitez utiliser le Frontend de débogage QT pour la cible.
/proc/<pid>/maps Dans certains scénarios, tels que le débogage des dispositifs intégrés sur le micrologiciel en série ou brut dans QEMU, GDB n'est pas au courant du PID et ne peut pas accéder /proc/<pid>/maps .
Dans ces cas, la section [INIT] est utilisée pour transmettre un contexte personnalisé au plugin. Il permet de remplacer certains champs tels que le PID et les mappages de mémoire.
.sync Content Extrait:
[INIT]
context = {
"pid": 200,
"mappings": [ [0x400000, 0x7A81158, 0x7681158, "asav941-200.qcow2|lina"] ]
}
Chaque entrée dans les mappages est: mem_base , mem_end , mem_size , mem_name .
Dans certains scénarios, tels que le débogage des appareils intégrés ou la connexion à des interfaces de débogage minimalistes, il peut être plus pratique de contourner la fonction de rebasing d'adresse automatique implémentée dans les plugins de désassembleur.
L'option use_raw_addr est actuellement prise en charge uniquement pour Ghidra. Dans le fichier de configuration .Sync Utilisation:
[GENERAL]
use_raw_addr=true
La branche IDA 7.x est requise. Pour les versions plus anciennes (6.9x), veuillez consulter la version archivée ida6.9x .
Pour l'installation d'IDA, copiez le dossier Syncplugin.py et retsync du répertoire ext_ida vers IDA Plugins, par exemple:
C:Program FilesIDA Pro 7.4plugins%APPDATA%Hex-RaysIDA Proplugins~/.idapro/pluginsAlt-Shift-S ) ou 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
Pour résoudre les problèmes avec l'extension IDA, deux options sont disponibles dans le fichier retsync/rsconfig.py :
LOG_LEVEL = logging.INFO
LOG_TO_FILE_ENABLE = False
La définition de la valeur LOG_LEVEL sur logging.DEBUG rend le plugin plus verbeux.
Définition de la valeur LOG_TO_FILE_ENABLE à True déclenche la journalisation des informations d'exception de broker.py et dispatcher.py dans des fichiers dédiés. Le fichier journal est généré dans le dossier %TMP% avec un modèle de nom retsync.%s.err .
Utilisez la version prédéfinie du dossier ext_ghidra/dist ou suivez l'instruction pour la construire. Chaque build d'extension prend uniquement en charge la version de Ghidra spécifiée dans le nom de fichier du plugin. Par exemple ghidra_9.1_PUBLIC_20191104_retsync.zip est pour Ghidra 9.1 public.
apt install gradle$GHIDRA_DIR par votre répertoire d'installation) cd ext_ghidra
gradle -PGHIDRA_INSTALL_DIR= $GHIDRA_DIRFile -> Install Extensions... , cliquez sur le signe + et sélectionnez l' ext_ghidra/dist/ghidra_*_retsync.zip et cliquez sur OK. Cela extraire efficacement le dossier retsync du zip dans $GHIDRA_DIR/Extensions/Ghidra/ [*] retsync init
[>] programOpened: tm.sys
imageBase: 0x1c0000000
Alt+s ) / Disable ( Alt+Shift+s ) / Redémarrer ( Alt+r ) Synchronisation. Une fenêtre d'état est également disponible à partir de Windows -> RetSyncPlugin . Vous voulez généralement le laisser tomber sur le côté pour l'intégrer avec les fenêtres de l'environnement Ghidra.
Le support binaire en ninja est expérimental, assurez-vous de sauvegarder vos bases de données d'analyse.
RET-Sync nécessite Binary Ninja version 2.2 au minimum ainsi que Python 3 (Python 2 n'est pas pris en charge).
RET-Sync n'est pas encore distribué par le gestionnaire de plugin de Ninja binaire; Une installation manuelle est requise. Copiez simplement ce contenu du dossier ext_bn dans le dossier des plugins ninja binaire, par exemple:
%APPDATA%Binary Ninjaplugins
Après avoir redémarré le ninja binaire, la sortie suivante doit être présente dans la fenêtre de la console:
[sync] commands added
Loaded python3 plugin 'retsync'
Utilisez des binaires pré-construits ou utilisez la solution Visual Studio 2017 fournie dans ext_windbg , (voir https://docs.microsoft.com/en-us/visualstudio/releasenotes/vs2017-relnotes si nécessaire).
Cela construira le fichier x64releasesync.dll .
Vous devrez copier le fichier sync.dll résultant dans le chemin d'extension WindBG approprié.
Pour les versions antérieures de Windbg, c'est quelque chose comme ça (faites attention aux saveurs x86 / x64 ), par exemple
C:Program Files (x86)Windows Kits10Debuggersx64winextsync.dll
Le dossier de stockage d'extension semble être basé sur le chemin, vous devez donc le mettre l'un des emplacements interrogés.
Un exemple est de le mettre ici:
C:UsersuserAppDataLocalMicrosoftWindowsAppssync.dll
.load ) 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
Par exemple dans la fenêtre de sortie d'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
Si le module actuel de Windbg correspond au nom du fichier IDA
[sync] idb is enabled with the idb client matching the module name.
Remarque: Si vous obtenez l'erreur suivante, c'est parce que vous n'avez pas copié le fichier dans le bon dossier dans les étapes ci-dessus.
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.
L'erreur ci-dessous signifie généralement que WindBG a essayé de charger la saveur incorrecte de l'extension, Ex: x64 à la place du x86 sync.dll .
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.
Alors que WindBG Preview charge les deux plugins ( x86 et x64 ) à partir du même répertoire, on peut renommer le fichier x86 sync32.dll .
0:000> .load sync32
ext_gdb/sync.py dans le répertoire de votre choix gdb> source sync.py
[sync] configuration file loaded 192.168.52.1:9100
[sync] commands added
Le support LLDB est cependant expérimental:
~/.lldbinit ) lldb> command script import sync
Cependant, le support OLLYDBG 1.10 est expérimental:
Cependant, le support OllyDBG2 est expérimental:
Basé sur TestPlugin, https://github.com/x64dbg/testplugin. Le support X64DBG est cependant expérimental:
pluginsdk " dans " ext_x64dbgx64dbg_sync ".d32 ou .dp64 ) dans le répertoire du plugin de X64DBG.Pour les débuggeurs orientés vers la ligne de commande (principalement WindBG et GDB), un ensemble de commandes est exposé par RET-Sync pour aider à la tâche de l'inverse.
Les commandes ci-dessous sont génériques (WindBG et GDB), veuillez noter que A ! Le préfixe est nécessaire sur Windbg (par exemple: sync dans GDB , !sync dans Windbg).
| Commandement de débogueur | Description |
|---|---|
synchelp | Afficher la liste des commandes disponibles avec une courte explication |
sync | Commencer la synchronisation |
syncoff | Stop synchronisation |
cmt [-a address] <string> | Ajouter un commentaire sur IP actuel dans Disassebler |
rcmt [-a address] | Réinitialisez le commentaire sur IP actuel dans Disassebler |
fcmt [-a address] <string> | Ajouter un commentaire de fonction pour la fonction dans laquelle se trouve la propriété intellectuelle actuelle |
raddr <expression> | Ajouter un commentaire avec une adresse rebelle évaluée à partir de l'expression |
rln <expression> | Obtenez un symbole du désassembleur pour l'adresse donnée |
lbl [-a address] <string> | Ajouter un nom d'étiquette sur IP actuel dans Disassebler |
cmd <string> | Exécutez une commande dans Debugger et ajoutez sa sortie comme commentaire sur IP actuel dans DisAssebler |
bc <||on|off|set 0xBBGGRR> | Activer / désactiver la coloration du chemin dans le désassembleur |
idblist | Obtenez une liste de tous les clients IDB connectés au répartiteur |
syncmodauto <on|off> | Activer / désactiver l'interrupteur automatique du désassembleur en fonction du nom du module |
idbn <n> | Définir une IDB active sur le nième client |
jmpto <expression> | |
jmpraw <expression> | Si une IDB est activée, la vue de Disassebler est synchronisée avec l'adresse résultante. |
translate <base> <addr> <mod> | Rebase une adresse en ce qui concerne le nom et le décalage de son module |
Commandes spécifiques à WindBG:
| Commandement de débogueur | Description |
|---|---|
curmod | Afficher l'infromisation du module pour le décalage d'instructions actuel (pour le dépannage) |
modlist | Liste des modules améliorés du langage de balisage du débogueur (DML) destinés à la commutation IDB active plus lisse |
idb <module name> | Définissez le module donné comme IDB actif (voir la version améliorée modlist de lm ) |
modmap <base> <size> <name> | Un module synthétique ("FAKE") (défini à l'aide de son adresse et de sa taille de base) est ajouté à la liste interne du débogueur |
modunmap <base> | Supprimer un module synthétique mappé précédemment à l'adresse de base |
modcheck <||md5> | Utiliser pour vérifier si le module actuel correspond vraiment au fichier d'IDB (ex: le module a été mis à jour) |
bpcmds <||save|load|> | BPCMDS Wrapper, Enregistrer et Recharger .BPCMDS (Commandes de points d'arrêt Liste) |
ks | Sortie améliorée du langage de balisage de débogueur (DML) de la commande KV |
Commandes spécifiques GDB:
| Commandement de débogueur | Description |
|---|---|
bbt | Belle contour. Semblable à BT dans GDB mais demande des symboles de Disassebler |
patch | Patch octets dans le désassembleur basé sur le contexte en direct |
bx | Similaire à GDB X mais en utilisant un symbole. Le symbole sera résolu par le démontbler |
cc | Continuez vers le curseur dans le désassembleur |
Le champ de saisie Overwrite idb name est destiné à modifier le nom IDB par défaut. C'est le nom utilisé par le plugin pour s'inscrire auprès du répartiteur. Le commutateur automatique IDB est basé sur la correspondance du nom du module. En cas de noms contradictoires (comme un foo.exe et foo.dll ), cela peut être utilisé pour faciliter la correspondance. Veuillez noter que si vous modifiez le champ de saisie pendant que la synchronisation est active, vous devez vous réinscrire avec le répartiteur; Cela peut être fait simplement en utilisant le bouton " Restart ".
En tant que rappel, il est possible d'alias par défaut en utilisant le fichier de configuration .sync .
RET-Sync définit ces raccourcis mondiaux dans IDA:
Alt-Shift-S - Exécutez le plugin RET-SyncCtrl-Shift-S - Toggle Global SyncingCtrl-H - Togue HEX Rays SynccingDeux boutons sont également disponibles dans la barre d'outils de débogage pour basculer la synchronisation globale et les rayons hexagonaux.
Syncplugin.py enregistre également les raccourcis hot les hot-hot-hot-hot-kings.
F2 - Définir le point d'arrêt à l'adresse du curseurF3 - Réglez le point d'arrêt unique à l'adresse du curseurCtrl-F2 - Définissez le point d'arrêt matériel à l'adresse du curseurCtrl-F3 - Définissez un point d'arrêt matériel à un seul coup à l'adresse du curseurAlt-F2 - Traduire (Rebase in Debugger) Adresse du curseur actuelAlt-F5 - allezCtrl-Alt-F5 - Run (GDB uniquement)F10 - étape uniqueF11 - Trace uniqueCes commandes ne sont disponibles que lorsque l'IDB actuel est actif. Lorsque cela est possible, ils ont également été mis en œuvre pour d'autres débuggeurs.
Une fois que RetSyncplugin a ouvert ses portes, vous pouvez l'ajouter à la fenêtre CodeBrowser par simple drag'n'drop:

Si vous souhaitez afficher plusieurs modules, les fichiers doivent être ouverts dans la même visionneuse CodeBrowser, faites simplement glisser les autres dans la fenêtre CodeBrowser pour obtenir le résultat comme ci-dessus.
RET-Sync définit ces raccourcis mondiaux dans Ghidra:
Alt-S - activer la synchronisationAlt-Shift-S - désactiver la synchronisationAlt-R - Redémarrer la synchronisationAlt-Shift-R - Configuration de rechargementLes liaisons sur les commandes de débogueur sont également implémentées. Ils sont similaires à ceux de l'extension d'Ida (sauf la commande "go").
F2 - Définir le point d'arrêt à l'adresse du curseurCtrl-F2 - Définissez le point d'arrêt matériel à l'adresse du curseurAlt-F3 - définir un point d'arrêt unique à l'adresse du curseurCtrl-F3 - Définissez un point d'arrêt matériel à un seul coup à l'adresse du curseurAlt-F2 - Traduire (Rebase in Debugger) Adresse du curseur actuelF5 - AllezAlt-F5 - Run (GDB uniquement)F10 - étape uniqueF11 - Trace unique RET-Sync définit ces raccourcis mondiaux en ninja binaire:
Alt-S - activer la synchronisationAlt-Shift-S - désactiver la synchronisationLes liaisons sur les commandes de débogueur sont également implémentées. Ils sont similaires à ceux de l'extension d'Ida.
F2 - Définir le point d'arrêt à l'adresse du curseurCtrl-F2 - Définissez le point d'arrêt matériel à l'adresse du curseurAlt-F3 - définir un point d'arrêt unique à l'adresse du curseurCtrl-F3 - Définissez un point d'arrêt matériel à un seul coup à l'adresse du curseurAlt-F2 - Traduire (Rebase in Debugger) Adresse du curseur actuelAlt-F5 - allezF10 - étape uniqueF11 - Trace unique [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
Remarque: Appeler cette commande sans argument réinitialiser le commentaire de la fonction.
[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
Dans cet exemple, le client IDB actif actuel aurait été défini sur:
[0] target.exe.
Alt-F2 ), rébase une adresse par rapport au nom et au décalage de son module. ! CMT ,! RCMT et ! Les commandes FCMT prennent en charge une option d'adresse facultative: -a ou --address . L'adresse doit être transmise en valeur hexadécimale. L'analyse de commande est basée sur le module argparse de Python. Pour arrêter l'utilisation d'analyse de ligne -- .
[WinDbg]
0:000:x86> !cmt -a 0x430DB2 comment
L'adresse doit être l'adresse d'une instruction valide.
Synchroniser avec l'hôte:
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".
Utilisez des commandes, sans "!" préfixe
(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 pour définir un point d'arrêt à un coup et F5 pour continuer. Ceci est utile si vous préférez le faire à partir de GDB. (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 ) / désactiver ( Alt+u ) synchronisation. Ctrl+s ) / désactiver ( Ctrl+u ) Synchronisation.En raison de l'état bêta de l'API Olydbg2, seules les fonctionnalités suivantes ont été implémentées:
F7 ; F8 pour tremper]CTRL+; ]]CTRL+: ] Utilisez le menu des plugins ou les commandes Activer (" !sync" ) ou désactiver (" !syncoff ") Synchronisation.
Utiliser les commandes
[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
Remarque: L'utilisation de la commande ! Translate d'un désassembleur (ida / ghidra, raccourci Alt-F2 ), fera la fenêtre de désassembleur pour "sauter" à l'adresse spécifique (équivalent de l'exécution de désasme dans la ligne de commande x64dbg).
On peut vouloir utiliser des fonctionnalités de base RET-Sync (synchronisation de position avec un démontbler, une résolution de symboles) même si un environnement de débogage complet n'est pas disponible ou avec un outil personnalisé. À cette fin, une bibliothèque Python minimaliste a été extraite.
L'exemple ci-dessous illustre l'utilisation de la bibliothèque Python avec un script qui traverse la sortie d'un outil de journalisation / traçage basé sur des événements.
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 ()Bien que initialement axé sur l'analyse dynamique (débogueurs), il est possible de prolonger l'ensemble des plugins et de s'intégrer à d'autres outils.
Autres ressources (s):
Avec gdb:
Avec Windbg:
g »). Cela peut provoquer un ralentissement majeur s'il y a trop de ces événements. Une correction limitée a été implémentée, la meilleure solution est toujours de se synchroniser temporairement.Avec Ghidra:
Avec Ida:
Conflit (s):
.sync global pour définir un port différent. [INTERFACE]
host=127.0.0.1
port=9234
RET-Sync est un logiciel gratuit: vous pouvez le redistribuer et / ou le modifier en vertu des termes de la licence publique générale GNU publiée par la Free Software Foundation, soit la version 3 de la licence, soit (à votre option) n'importe quelle version ultérieure.
Ce programme est distribué dans l'espoir qu'il sera utile, mais sans aucune garantie; Sans même la garantie implicite de qualité marchande ou d'adéquation à un usage particulier. Voir la licence publique générale GNU pour plus de détails.
Vous devriez avoir reçu une copie de la licence publique générale GNU avec ce programme. Sinon, voir http://www.gnu.org/licenses/.
Le plugin binaire Ninja est publié sous la licence MIT.
Hail to Bruce Dang, Stalkr, @ Ivanlef0u, Damien Aumaître, Sébastien Renaud et Kévin Szkudlapski, @ M00dy , @Saidelike, Xavier Mehrenberger, Ben64, Raphaël Rigo, Jiss pour leur gentillesse, aide, commentaires et pensées. Ilfak Guilfanov, Igor Skochinsky et Arnaud Diederen pour leur aide avec les internes d'IDA et le soutien exceptionnel. Merci à Jordan Wiens and Vector 35. Enfin, merci également à tous les contributeurs et à tous ceux qui ont signalé des problèmes / bogues.