Ret-Sync adalah singkatan dari sinkronisasi alat rekayasa balik. Ini adalah satu set plugin yang membantu menyinkronkan sesi debugging (WindBG/GDB/LLDB/OLLYDBG/OLLYDBG2/X64DBG) dengan disassembler (IDA/GHIDRA/BINARY NINJA). Gagasan yang mendasarinya sederhana: ambil yang terbaik dari kedua dunia (analisis statis dan dinamis).
Debuggers dan analisis dinamis memberi kita:
!peb , !drvobj , !address , dll. )Pembongkaran dan analisis statis memberi kita:
Fitur Utama:
Ret-Sync adalah garpu QB-Sync yang saya kembangkan dan pertahankan selama saya tinggal di Quarkslab.
Plugin Debugger:
ext_windbg/sync : File Sumber Ekstensi WindBG, Setelah Dibangun: sync.dllext_gdb/sync.py : plugin GDBext_lldb/sync.py : plugin lldbext_olly1 : plugin OllydBG 1.10ext_olly2 : Plugin OllydBg V2ext_x64dbg : plugin x64dbgPlugin Disassembler:
ext_ida/SyncPlugin.pyext_ghidra/dist/ghidra_*_retsync.zip : plugin ghidraext_bn/retsync : plugin ninja binerDan plugin perpustakaan:
ext_lib/sync.py : Perpustakaan Python mandiriPlugin IDA dan GDB memerlukan pengaturan Python yang valid. Python 2 (> = 2.7) dan Python 3 didukung.
Binari pra-dibangun untuk debugger windbg/ollydbg/ollydbg2/x64dbg diusulkan melalui pipa Azure DevOps :
Pilih build terakhir dan periksa artefak di bawah bagian Related : 6 published .

Arsip plugin yang sudah dibangun dari plugin Ghidra disediakan di ext_ghidra/dist .
Ret-Sync harus bekerja di luar kotak untuk sebagian besar pengguna dengan pengaturan khas: Debugger dan Disassembler pada host yang sama, pencocokan nama modul.
Namun, dalam beberapa skenario konfigurasi tertentu dapat digunakan. Untuk itu, ekstensi dan plugin memeriksa file konfigurasi global opsional bernama .sync di direktori home pengguna. Itu harus menjadi file .INI yang valid.
Selain itu, plugin IDA dan GHIDRA juga mencari file konfigurasi di IDB atau Project Directory ( <project>.rep ) terlebih dahulu untuk mengizinkan pengaturan lokal, per-IDB/proyek,. Jika ada file konfigurasi lokal, file konfigurasi global diabaikan.
Nilai yang dinyatakan dalam file konfigurasi ini mengganti nilai default. Harap dicatat, bahwa .sync dibuat secara default.
Di bawah ini kami detail, tiga skenario umum di mana file konfigurasi bermanfaat/dibutuhkan:
Bagian [INTERFACE] digunakan untuk menyesuaikan pengaturan terkait jaringan. Misalkan seseorang ingin menyinkronkan IDA dengan debugger yang berjalan di dalam mesin virtual (atau hanya host lain), skenario debugging kernel jarak jauh yang umum.
Cukup buat dua file .sync :
[INTERFACE]
host=192.168.128.1
port=9234
Ini memberi tahu plugin Ret-Sync IDA untuk mendengarkan di antarmuka 192.168.128.1 dengan port 9234 . Tak perlu dikatakan bahwa antarmuka ini harus dapat dijangkau dari host jarak jauh atau mesin virtual.
[INTERFACE]
host=192.168.128.1
port=9234
Ini memberi tahu plugin Ret-Sync Debugger untuk terhubung ke plugin Ret-Sync IDA yang dikonfigurasi sebelumnya untuk mendengarkan di antarmuka ini.
Catatan: Anda harus menentukan IP nyata di sini, dan tidak menggunakan 0.0.0.0 . Ini karena variabel digunakan oleh banyak sumber baik untuk mengikat dan menghubungkan, jadi menggunakan 0.0.0.0 akan menghasilkan kesalahan aneh.
[ALIASES]
ntoskrnl_vuln.exe=ntkrnlmp.exe
Bagian [ALIASES] digunakan untuk menyesuaikan nama yang digunakan oleh Disassembler (IDA/GHIDRA) untuk mendaftarkan modul ke Dispatcher/Program Manager -nya.
Secara default, plugin Disassembler menggunakan nama file input. Namun orang mungkin telah mengganti nama file sebelumnya dan tidak cocok lagi dengan nama proses yang sebenarnya atau modul yang dimuat seperti yang terlihat oleh debugger.
Di sini kami cukup memberi tahu kepada dispatcher untuk mencocokkan nama ntkrnlmp.exe (nama asli) alih -alih ntoskrnl_vuln.exe (nama IDB).
Frontend Debugging Pencipta QT mengubah cara output perintah GDB dicatat. Karena ini akan mengganggu sinkronisasi, ada opsi untuk menggunakan output GDB mentah untuk sinkronisasi alih -alih file sementara. Dalam penggunaan file konfigurasi .sync
[GENERAL]
use_tmp_logging_file=false
Jika Anda ingin menggunakan frontend Debugging QT untuk target.
/proc/<pid>/maps Dalam beberapa skenario, seperti debugging perangkat tertanam melalui firmware serial atau mentah di QEMU, GDB tidak mengetahui PID dan tidak dapat mengakses /proc/<pid>/maps .
Dalam kasus ini, bagian [INIT] digunakan untuk meneruskan konteks khusus ke plugin. Ini memungkinkan mengesampingkan beberapa bidang seperti pemetaan PID dan memori.
Ekstrak konten .sync :
[INIT]
context = {
"pid": 200,
"mappings": [ [0x400000, 0x7A81158, 0x7681158, "asav941-200.qcow2|lina"] ]
}
Setiap entri dalam pemetaan adalah: mem_base , mem_end , mem_size , mem_name .
Dalam beberapa skenario, seperti debugging perangkat tertanam atau menghubungkan ke antarmuka debug minimalis, mungkin lebih nyaman untuk memotong fitur rebasing alamat otomatis yang diimplementasikan dalam plugin Disassembler.
Opsi use_raw_addr saat ini hanya didukung untuk Ghidra. Di .Sync Konfigurasi Penggunaan File:
[GENERAL]
use_raw_addr=true
IDA 7.X diperlukan cabang. Untuk versi yang lebih lama (6.9x) Silakan lihat rilis yang diarsipkan ida6.9x .
Untuk instalasi IDA, salin folder Syncplugin.py dan retsync dari ext_ida ke IDA Plugins Directory, misalnya:
C:Program FilesIDA Pro 7.4plugins%APPDATA%Hex-RaysIDA Proplugins~/.idapro/pluginsAlt-Shift-S ) atau 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
Mengatasi masalah dengan IDA Extension Two Options tersedia di file retsync/rsconfig.py :
LOG_LEVEL = logging.INFO
LOG_TO_FILE_ENABLE = False
Mengatur nilai LOG_LEVEL ke logging.DEBUG membuat plugin lebih verbose.
Mengatur nilai LOG_TO_FILE_ENABLE untuk True pencatatan informasi pengecualian dari broker.py dan dispatcher.py ke dalam file khusus. File log dihasilkan dalam folder %TMP% dengan pola nama retsync.%s.err .
Baik menggunakan versi pra-dibangun dari folder ext_ghidra/dist atau ikuti instruksi untuk membangunnya. Setiap Extension Build hanya mendukung versi GHIDRA yang ditentukan dalam nama file plugin. Misalnya ghidra_9.1_PUBLIC_20191104_retsync.zip adalah untuk Ghidra 9.1 Publik.
apt install gradle$GHIDRA_DIR dengan direktori instalasi Anda) cd ext_ghidra
gradle -PGHIDRA_INSTALL_DIR= $GHIDRA_DIRFile -> Install Extensions... , klik pada tanda + dan pilih ext_ghidra/dist/ghidra_*_retsync.zip dan klik OK. Ini akan secara efektif mengekstrak folder retsync dari zip menjadi $GHIDRA_DIR/Extensions/Ghidra/ [*] retsync init
[>] programOpened: tm.sys
imageBase: 0x1c0000000
Alt+s )/nonaktifkan ( Alt+Shift+s )/restart ( Alt+r ) sinkronisasi. Jendela status juga tersedia dari Windows -> RetSyncPlugin . Anda biasanya ingin menjatuhkannya di samping untuk mengintegrasikannya dengan jendela lingkungan Ghidra.
Dukungan ninja biner adalah eksperimental, pastikan untuk membuat cadangan database analisis Anda.
Ret-Sync membutuhkan ninja biner versi 2.2 minimal serta Python 3 (Python 2 tidak didukung).
Ret-Sync belum didistribusikan melalui manajer plugin ninja biner; diperlukan instalasi manual. Cukup salin konten folder ext_bn ke folder plugin Ninja Biner, misalnya:
%APPDATA%Binary Ninjaplugins
Setelah memulai kembali ninja biner, output berikut harus ada di jendela konsol:
[sync] commands added
Loaded python3 plugin 'retsync'
Baik menggunakan biner pra-dibangun atau menggunakan solusi Visual Studio 2017 yang disediakan di ext_windbg , (lihat https://docs.microsoft.com/en-us/visualstudio/releasenotes/vs2017-relnotes jika diperlukan).
Ini akan membangun file x64releasesync.dll .
Anda perlu menyalin file sync.dll yang dihasilkan ke jalur ekstensi WindBG yang sesuai.
Untuk versi windbg sebelumnya ini adalah sesuatu seperti ini (hati -hati dengan rasa x86 / x64 ), misalnya
C:Program Files (x86)Windows Kits10Debuggersx64winextsync.dll
Folder untuk menyimpan ekstensi tampaknya didasarkan pada jalur, jadi Anda harus menempatkannya salah satu lokasi pertanyaan.
Salah satu contohnya adalah meletakkannya di sini:
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
Misalnya di jendela output 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
Jika modul WindBG saat ini cocok dengan nama file IDA
[sync] idb is enabled with the idb client matching the module name.
Catatan: Jika Anda mendapatkan kesalahan berikut, itu karena Anda belum menyalin file ke folder yang tepat di langkah -langkah di atas.
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.
Kesalahan di bawah ini biasanya berarti bahwa WindBG mencoba memuat rasa yang salah dari ekstensi, mis: x64 sebagai pengganti 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.
Saat pratinjau WindBG memuat kedua plugin ( x86 dan x64 ) dari direktori yang sama, orang dapat mengganti nama file x86 sync32.dll .
0:000> .load sync32
ext_gdb/sync.py ke direktori pilihan Anda gdb> source sync.py
[sync] configuration file loaded 192.168.52.1:9100
[sync] commands added
Namun, dukungan LLDB bersifat eksperimental:
~/.lldbinit ) lldb> command script import sync
Dukungan OllydBG 1.10 adalah eksperimental, namun:
Dukungan OllyDBG2 adalah eksperimental, namun:
Berdasarkan testplugin, https://github.com/x64dbg/testplugin. Namun, dukungan X64DBG adalah eksperimental:
pluginsdk " ke " ext_x64dbgx64dbg_sync ".d32 atau .dp64 ) dalam direktori plugin x64dBG.Untuk debuggers berorientasi baris perintah (terutama WindBG dan GDB), serangkaian perintah diekspos oleh ret-sync untuk membantu dalam tugas rekayasa balik.
Perintah di bawah ini generik (windbg dan gdb), harap dicatat bahwa a ! Diperlukan awalan pada windbg (misalnya: sync dalam GDB , !sync di WindBG).
| Perintah debugger | Keterangan |
|---|---|
synchelp | Tampilkan daftar perintah yang tersedia dengan penjelasan singkat |
sync | Mulai sinkronisasi |
syncoff | Hentikan sinkronisasi |
cmt [-a address] <string> | Tambahkan komentar di IP saat ini di Disassembler |
rcmt [-a address] | Setel ulang komentar di IP saat ini di Disassembler |
fcmt [-a address] <string> | Tambahkan komentar fungsi untuk fungsi di mana IP saat ini berada |
raddr <expression> | Tambahkan komentar dengan alamat yang disahkan kembali yang dievaluasi dari ekspresi |
rln <expression> | Dapatkan simbol dari Disassembler untuk alamat yang diberikan |
lbl [-a address] <string> | Tambahkan nama label di IP saat ini di Disassembler |
cmd <string> | Jalankan perintah di debugger dan tambahkan outputnya sebagai komentar di IP saat ini di Disassembler |
bc <||on|off|set 0xBBGGRR> | Mengaktifkan/menonaktifkan pewarnaan jalur di Disassembler |
idblist | Dapatkan daftar semua klien IDB yang terhubung ke Dispatcher |
syncmodauto <on|off> | Aktifkan/Nonaktifkan Disassembler Auto Switch Berdasarkan Nama Modul |
idbn <n> | Setel IDB aktif ke klien ke -n |
jmpto <expression> | |
jmpraw <expression> | Jika IDB diaktifkan maka pandangan Disassembler disinkronkan dengan alamat yang dihasilkan. |
translate <base> <addr> <mod> | Rebase alamat sehubungan dengan nama modul dan offsetnya |
Perintah spesifik windbg:
| Perintah debugger | Keterangan |
|---|---|
curmod | Infomasi modul tampilan untuk instruksi saat ini offset (untuk pemecahan masalah) |
modlist | Debugger Markup Language (DML) Daftar Modul yang Ditingkatkan dimaksudkan untuk switching IDB aktif yang lebih halus |
idb <module name> | Setel modul yang diberikan sebagai IDB aktif (lihat modlist Enhanced Version dari lm ) |
modmap <base> <size> <name> | Modul sintetis ("faked") (didefinisikan menggunakan alamat dan ukuran dasarnya) ditambahkan ke daftar internal debugger |
modunmap <base> | Hapus modul sintetis yang sebelumnya dipetakan di alamat dasar |
modcheck <||md5> | Gunakan untuk memeriksa apakah modul saat ini benar -benar cocok dengan file IDB (mis: modul telah diperbarui) |
bpcmds <||save|load|> | Pembungkus BPCMDS , Simpan, dan Muat Ulang .BPCMDS (Daftar Perintah Breakpoints) output ke IDB saat ini |
ks | Debugger Markup Language (DML) Peningkatan output dari perintah KV |
Perintah spesifik GDB:
| Perintah debugger | Keterangan |
|---|---|
bbt | Backtrace yang indah. Mirip dengan BT di GDB tetapi meminta simbol dari Disassembler |
patch | Patch byte di disassembler berdasarkan konteks langsung |
bx | Mirip dengan GDB X tetapi menggunakan simbol. Simbol akan diselesaikan dengan disassembler |
cc | Lanjutkan ke kursor di Disassembler |
Bidang input Overwrite idb name dimaksudkan untuk mengubah nama IDB default. Ini adalah nama yang digunakan oleh plugin untuk mendaftar dengan dispatcher. IDB Automatic Switch didasarkan pada pencocokan nama modul. Dalam hal nama yang bertentangan (seperti foo.exe dan foo.dll ), ini dapat digunakan untuk memudahkan pencocokan. Harap dicatat, jika Anda memodifikasi bidang input saat sinkronisasi aktif, Anda harus mendaftar ulang dengan operator; Ini dapat dilakukan hanya dengan menggunakan tombol " Restart ".
Sebagai pengingat dimungkinkan untuk alias secara default menggunakan file konfigurasi .sync .
Ret-sync mendefinisikan pintasan global ini di IDA:
Alt-Shift-S -Jalankan Plugin Ret-SyncCtrl-Shift-S -Toggle Global SyncingCtrl-H -Toggle Hex-Rays SyncingDua tombol juga tersedia di bilah alat debug untuk beralih global dan sinkronisasi sinar-hex.
Syncplugin.py juga mendaftarkan debugger command wrapper hotkeys.
F2 - Set Breakpoint di Alamat KursorF3 - Tetapkan breakpoint satu -shot di alamat kursorCtrl-F2 - Set Breakpoint Perangkat Keras di Alamat KursorCtrl-F3 -Tetapkan breakpoint perangkat keras satu-shot di alamat kursorAlt-F2 - Alamat Kursor Terjemahan (Rebase in Debugger)Alt-F5 - GOCtrl-Alt-F5 -RUN (hanya GDB)F10 - Langkah TunggalF11 - Jejak tunggalPerintah ini hanya tersedia saat IDB saat ini aktif. Jika memungkinkan mereka juga telah diterapkan untuk orang lain debugger.
Setelah retsyncplugin dibuka, Anda dapat menambahkannya ke jendela Codebrowser dengan drag'n'drop sederhana:

Jika Anda ingin melihat beberapa modul, file harus terbuka di penampil codebrowser yang sama, cukup seret yang tambahan yang tambahan di jendela Codebrowser untuk mendapatkan hasilnya seperti di atas.
Ret-Sync mendefinisikan pintasan global ini di Ghidra:
Alt-S - Aktifkan SinkronisasiAlt-Shift-S -Nonaktifkan SinkronisasiAlt-R - Restart SyncingAlt-Shift-R -Muat Ulang KonfigurasiIkatan atas perintah debugger juga diimplementasikan. Mereka mirip dengan yang dari ekstensi Ida (kecuali perintah "go").
F2 - Set Breakpoint di Alamat KursorCtrl-F2 - Set Breakpoint Perangkat Keras di Alamat KursorAlt-F3 -Tetapkan breakpoint satu tembakan di alamat kursorCtrl-F3 -Tetapkan breakpoint perangkat keras satu-shot di alamat kursorAlt-F2 - Alamat Kursor Terjemahan (Rebase in Debugger)F5 - goAlt-F5 - RUN (hanya GDB)F10 - Langkah TunggalF11 - Jejak tunggal Ret-Sync mendefinisikan pintasan global ini di biner ninja:
Alt-S - Aktifkan SinkronisasiAlt-Shift-S -Nonaktifkan SinkronisasiIkatan atas perintah debugger juga diimplementasikan. Mereka mirip dengan yang dari ekstensi Ida.
F2 - Set Breakpoint di Alamat KursorCtrl-F2 - Set Breakpoint Perangkat Keras di Alamat KursorAlt-F3 -Tetapkan breakpoint satu tembakan di alamat kursorCtrl-F3 -Tetapkan breakpoint perangkat keras satu-shot di alamat kursorAlt-F2 - Alamat Kursor Terjemahan (Rebase in Debugger)Alt-F5 - GOF10 - Langkah TunggalF11 - Jejak tunggal [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
Catatan: Memanggil perintah ini tanpa argumen mengatur ulang komentar fungsi.
[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
Dalam contoh ini, klien IDB aktif saat ini akan diatur ke:
[0] target.exe.
Alt-F2 ), rebase alamat sehubungan dengan nama dan offset modulnya. ! cmt , ! rcmt dan ! fcmt perintah mendukung opsi alamat opsional: -a atau --address . Alamat harus disahkan sebagai nilai heksadesimal. Parsing perintah didasarkan pada modul argparse Python. Untuk menghentikan penggunaan parsing garis -- .
[WinDbg]
0:000:x86> !cmt -a 0x430DB2 comment
Alamat harus berupa alamat instruksi yang valid.
Sinkronisasi dengan 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".
Gunakan perintah, tanpa "!" awalan
(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 untuk mengatur breakpoint satu-shot dan F5 untuk melanjutkan. Ini berguna jika Anda lebih suka melakukannya dari 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 )/nonaktifkan ( Alt+u ) sinkronisasi. Ctrl+s )/Disable ( Ctrl+u ) sinkronisasi.Karena status beta API OllydBG2, hanya fitur -fitur berikut yang telah diimplementasikan:
F7 ; F8 untuk melangkah]CTRL+; ]CTRL+: ] Gunakan menu atau perintah Plugins Enable (" !sync" ) atau nonaktifkan (" !syncoff ").
Gunakan perintah
[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
Catatan: Menggunakan perintah ! Translate dari disassembler (IDA/GHIDRA, Alt-F2 Shortcut), akan membuat jendela Disassembler untuk "melompat" ke alamat spesifik (setara dengan menjalankan Disasm di baris perintah x64dBG).
Seseorang mungkin ingin menggunakan fitur inti ret-sinkron (sinkronisasi posisi dengan disassembler, resolusi simbol) meskipun lingkungan debugging penuh tidak tersedia atau dengan alat khusus. Untuk itu, perpustakaan Python minimalis telah diekstraksi.
Contoh di bawah ini menggambarkan penggunaan Perpustakaan Python dengan skrip yang berjalan melalui output dari alat penebangan/penelusuran berbasis acara.
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 ()Meskipun awalnya berfokus pada analisis dinamis (debuggers), adalah mungkin untuk memperluas set plugin dan berintegrasi dengan alat lain.
Sumber Daya Lain:
Dengan GDB:
Dengan windbg:
g '). Ini dapat menyebabkan perlambatan besar jika ada terlalu banyak peristiwa ini. Perbaikan terbatas telah diimplementasikan, solusi terbaik masih harus disinkronkan sementara.Dengan Ghidra:
Dengan Ida:
Konflik:
.sync global untuk menentukan port yang berbeda. [INTERFACE]
host=127.0.0.1
port=9234
Ret-Sync adalah perangkat lunak gratis: Anda dapat mendistribusikannya kembali dan/atau memodifikasinya berdasarkan ketentuan lisensi publik umum GNU seperti yang diterbitkan oleh Free Software Foundation, baik versi 3 lisensi, atau (di opsi Anda) versi selanjutnya.
Program ini didistribusikan dengan harapan akan bermanfaat, tetapi tanpa jaminan apa pun; bahkan tanpa jaminan tersirat dari dapat diperjualbelikan atau kebugaran untuk tujuan tertentu. Lihat Lisensi Publik Umum GNU untuk lebih jelasnya.
Anda seharusnya menerima salinan Lisensi Publik Umum GNU bersama dengan program ini. Jika tidak, lihat http://www.gnu.org/licenses/.
Plugin ninja biner dilepaskan di bawah lisensi MIT.
Hail to Bruce Dang, Stalkr, @Ivanlef0u, Damien Aumaître, Sébastien Renaud dan Kévin Szkudlapski, @ M00dy , @Saidelike, Xavier Mehrenberger, Ben64, Raphaël Rigo, Jiss atas kebaikan, bantuan, dan pemikiran mereka. Ilfak Guilfanov, Igor Skochinsky dan Arnaud Diederen atas bantuan mereka dengan internal Ida dan dukungan luar biasa. Terima kasih kepada Jordan Wiens dan Vector 35. Akhirnya, terima kasih juga untuk semua kontributor dan semua orang yang melaporkan masalah/bug.