Ret-Syncは、リバースエンジニアリングツールの同期の略です。これは、デバッグセッション(Windbg/gdb/lldb/ollydbg/ollydbg2/x64dbg)のデバッグセッションを同期するのに役立つ一連のプラグインです(IDA/Ghidra/バイナリニンジャ)。根底にあるアイデアは簡単です。両方の世界から最高のものを取ります(静的分析と動的分析)。
デバッガーとダイナミック分析は、次のことを提供します。
!peb 、 !drvobj 、! !addressなど)分解者と静的分析は、次のことを提供します。
主な機能:
Ret-Syncは、 Quarkslabでの滞在中に開発および維持されたQB-Syncのフォークです。
デバッガープラグイン:
ext_windbg/sync :windbg拡張ソースファイル、一度構築: sync.dllext_gdb/sync.py :gdbプラグインext_lldb/sync.py :lldbプラグインext_olly1 :ollydbg 1.10プラグインext_olly2 :ollydbg v2プラグインext_x64dbg :x64dbgプラグイン分解プラグイン:
ext_ida/SyncPlugin.pyext_ghidra/dist/ghidra_*_retsync.zipプラグインext_bn/retsync :バイナリニンジャプラグインおよびライブラリプラグイン:
ext_lib/sync.py :スタンドアロンPythonライブラリIDAとGDBプラグインには、有効なPythonセットアップが必要です。 Python 2(> = 2.7)とPython 3がサポートされています。
Windbg/ollydbg/ollydbg2/x64dbgデバッグの事前に構築されたバイナリは、 Azure DevOpsパイプラインを介して提案されています。
最後のビルドを選択し、 Relatedセクションでアーティファクトを確認します: 6 published 。

Ghidraプラグインの事前に構築されたプラグインアーカイブは、 ext_ghidra/distで提供されています。
Ret-Syncは、同じホストのデバッガーと分解、モジュール名のマッチングというデバッガーと分解者の典型的なセットアップを備えたほとんどのユーザーのために、箱から出して作業する必要があります。
それでも、一部のシナリオでは、特定の構成を使用する場合があります。そのために、ユーザーのホームディレクトリにある.syncという名前のオプションのグローバル構成ファイルを拡張とプラグインをチェックします。有効な.INIファイルでなければなりません。
さらに、IDAおよびGhidraプラグインは、IDBまたはProject Directory( <project>.rep )の構成ファイルも探して、ローカル、IDB/プロジェクト、設定を許可します。ローカル構成ファイルが存在する場合、グローバル構成ファイルは無視されます。
これらの構成ファイルで宣言された値は、デフォルト値をオーバーライドします。 no .syncファイルはデフォルトで作成されていることに注意してください。
以下に、構成ファイルが便利/必要な3つの一般的なシナリオを詳しく説明します。
[INTERFACE]セクションは、ネットワーク関連設定をカスタマイズするために使用されます。 IDAを仮想マシン(または単に別のホスト)内で実行するデバッガー、一般的なリモートカーネルデバッグシナリオと同期したいとします。
2つの.syncファイルを作成するだけです。
[INTERFACE]
host=192.168.128.1
port=9234
Ret-Sync IDAプラグインに、ポート9234でインターフェイス192.168.128.1でリッスンするように指示します。言うまでもなく、このインターフェイスはリモートホストまたは仮想マシンから到達可能でなければなりません。
[INTERFACE]
host=192.168.128.1
port=9234
これは、このインターフェイスで聞くように以前に構成されたRet-Sync IDAプラグインに接続するようにRet-Syncデバッガープラグインを指示します。
注:ここで実際のIPを指定し、 0.0.0.0を使用しないでください。これは、変数がバインディングと接続の両方に複数のソースで使用されるため、 0.0.0.0を使用すると奇妙なエラーが発生するためです。
[ALIASES]
ntoskrnl_vuln.exe=ntkrnlmp.exe
[ALIASES]セクションは、分離装置(IDA/Ghidra)が使用する名前をカスタマイズして、モジュールをディスパッチャー/プログラムマネージャーに登録します。
デフォルトでは、分解プラグインは入力ファイルの名前を使用します。ただし、ファイルの名前を事前に変更した可能性があり、デバッガーで見られるように、実際のプロセスまたはロードされたモジュールの名前と一致しなくなりました。
ここでは、 ntoskrnl_vuln.exe (idb name)の代わりに、 ntkrnlmp.exe (本名)という名前と一致するようにディスパッチャーに伝えるだけです。
QTクリエーターのデバッグフロントエンドは、GDBコマンドの出力の記録方法を変更します。これは同期を妨げるため、一時的なファイルではなく同期に生のGDB出力を使用するオプションが存在します。 .sync構成ファイルの使用で
[GENERAL]
use_tmp_logging_file=false
ターゲットにQTデバッグフロントエンドを使用する場合。
/proc/<pid>/maps QEMUのシリアルまたは生のファームウェア上の埋め込みデバイスのデバッグなどのシナリオでは、GDBはPIDを認識せず、 /proc/<pid>/mapsにアクセスできません。
これらの場合、 [INIT]セクションを使用して、カスタムコンテキストをプラグインに渡します。これにより、PIDやメモリマッピングなどの一部のフィールドをオーバーライドできます。
.syncコンテンツ抽出物:
[INIT]
context = {
"pid": 200,
"mappings": [ [0x400000, 0x7A81158, 0x7681158, "asav941-200.qcow2|lina"] ]
}
マッピング内の各エントリは、 mem_base 、 mem_end 、 mem_size 、 mem_nameです。
埋め込みデバイスのデバッグやミニマリストのデバッグインターフェイスへの接続などのいくつかのシナリオでは、分解プラグインに実装された自動アドレスリベッシング機能をバイパスする方が便利かもしれません。
use_raw_addrオプションは現在、Ghidraでのみサポートされています。 .sync構成ファイルの使用:
[GENERAL]
use_raw_addr=true
IDA 7.xブランチが必要です。古いバージョン(6.9x)については、アーカイブリリースida6.9x参照してください。
IDAのインストールの場合、 Syncplugin.pyおよびretsyncフォルダーをext_idaからIDAプラグインディレクトリまでコピーします。たとえば
C:Program FilesIDA Pro 7.4plugins%APPDATA%Hex-RaysIDA Proplugins~/.idapro/pluginsAlt-Shift-S )または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
IDA拡張機能の問題をトラブルシューティングするには、ファイルretsync/rsconfig.pyで2つのオプションを使用できます。
LOG_LEVEL = logging.INFO
LOG_TO_FILE_ENABLE = False
LOG_LEVEL値をlogging.DEBUGに設定すると、プラグインがより冗長になります。
LOG_TO_FILE_ENABLE値をTrueに設定すると、 broker.pyおよびdispatcher.pyからの例外情報のログを専用ファイルにトリガーします。ログファイルはretsync.%s.err名前パターンを備えた%TMP%フォルダーで生成されます。
ext_ghidra/distフォルダーから事前に構築されたバージョンを使用するか、命令に従ってそれを構築します。各拡張機能は、プラグインのファイル名で指定されたGhidraのバージョンのみをサポートします。たとえば、 ghidra_9.1_PUBLIC_20191104_retsync.zipはGhidra 9.1 Public用です。
apt install gradle$GHIDRA_DIRインストールディレクトリに置き換えます) cd ext_ghidra
gradle -PGHIDRA_INSTALL_DIR= $GHIDRA_DIRFile - > Install Extensions... 、 +符号をクリックして、 ext_ghidra/dist/ghidra_*_retsync.zipを選択し、[OK]をクリックします。これにより、Zipからretsyncフォルダーが$GHIDRA_DIR/Extensions/Ghidra/に効果的に抽出されます。 [*] retsync init
[>] programOpened: tm.sys
imageBase: 0x1c0000000
Alt+s )/disable( Alt+Shift+s )/restart( Alt+r )同期を有効にします。 Windows > RetSyncPluginからもステータスウィンドウがあります。通常、それをサイドに落として、Ghidra Environment Windowsと統合したいと考えています。
バイナリ忍者サポートは実験的です。分析データベースをバックアップしてください。
Ret-Syncには、Python 3と同様に、少なくともBinary Ninjaバージョン2.2が必要です(Python 2はサポートされていません)。
Ret-Syncは、バイナリNinjaのプラグインマネージャーを通じてまだ分布していません。手動インストールが必要です。 ext_bnフォルダーのコンテンツをバイナリNinjaのプラグインフォルダーにコピーするだけで、次のようにしてください。
%APPDATA%Binary Ninjaplugins
バイナリ忍者を再起動した後、コンソールウィンドウに次の出力が存在する必要があります。
[sync] commands added
Loaded python3 plugin 'retsync'
事前に構築されたバイナリを使用するか、 ext_windbgで提供されるVisual Studio 2017ソリューションを使用します(https://docs.microsoft.com/en-us/visualstudio/releasenotes/vs2017-relnotesを参照)。
これによりx64releasesync.dllファイルが構築されます。
結果のsync.dllファイルを適切なWindBG拡張パスにコピーする必要があります。
Windbgの以前のバージョンの場合、これはこのようなものです( x86 / x64フレーバーに注意してください)。
C:Program Files (x86)Windows Kits10Debuggersx64winextsync.dll
拡張機能を保存するためのフォルダーはパスに基づいているようであるため、クエリの場所の1つを配置する必要があります。
一例は、ここにそれを置くことです:
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
たとえば、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
Windbgの現在のモジュールがIDAファイル名と一致する場合
[sync] idb is enabled with the idb client matching the module name.
注:次のエラーが発生した場合、上記の手順でファイルを適切なフォルダーにコピーしていないためです。
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.
以下のエラーは通常、windbgがx86 sync.dllの代わりに拡張の誤ったフレーバー、ex: x64をロードしようとしたことを意味します。
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.
WindBGプレビューは、同じディレクトリから両方のプラグイン( x86とx64 )をロードするため、 x86ファイルsync32.dll名前を変更できます。
0:000> .load sync32
ext_gdb/sync.py選択したディレクトリにコピーします gdb> source sync.py
[sync] configuration file loaded 192.168.52.1:9100
[sync] commands added
ただし、LLDBサポートは実験的です。
~/.lldbinitに追加することもできます) lldb> command script import sync
ただし、OllyDBG 1.10サポートは実験的です。
ただし、ollydbg2サポートは実験的です。
TestPlugin、https://github.com/x64dbg/testpluginに基づいています。ただし、X64DBGサポートは実験的です。
pluginsdk 」ディレクトリを「 ext_x64dbgx64dbg_sync 」に貼り付けます.d32または.dp64 )をコピーします。コマンドライン指向のデバッガー(主にWindBGおよびGDB)の場合、リバースエンジニアリングタスクを支援するために、一連のコマンドがRet-Syncによって公開されます。
以下のコマンドは汎用(WindBGおよびGDB)です! windbgでプレフィックスが必要です(例:gdbでsync 、 !sync )。
| デバッガーコマンド | 説明 |
|---|---|
synchelp | 簡単な説明で利用可能なコマンドのリストを表示します |
sync | 同期を開始します |
syncoff | 同期を停止します |
cmt [-a address] <string> | Current IPにResassemblerにコメントを追加します |
rcmt [-a address] | Current IPでReset Comment in Reset Commenter |
fcmt [-a address] <string> | 現在のIPが配置されている関数の関数コメントを追加します |
raddr <expression> | 式から評価されたリベースのアドレスでコメントを追加します |
rln <expression> | 指定されたアドレスの分解者からシンボルを取得します |
lbl [-a address] <string> | Assasemblerの現在のIPでラベル名を追加します |
cmd <string> | デバッガーでコマンドを実行し、その出力をCurrentIPのResassemblerのコメントとして追加します |
bc <||on|off|set 0xBBGGRR> | 分解者のパスの着色を有効/無効にします |
idblist | ディスパッチャーに接続されているすべてのIDBクライアントのリストを取得する |
syncmodauto <on|off> | モジュール名に基づいて、廃止自動スイッチを有効/無効にします |
idbn <n> | Active IDBをNTHクライアントに設定します |
jmpto <expression> | |
jmpraw <expression> | IDBが有効になっている場合、分離型のビューは結果のアドレスと同期されます。 |
translate <base> <addr> <mod> | モジュールの名前とオフセットに関するアドレスを再確認する |
Windbg固有のコマンド:
| デバッガーコマンド | 説明 |
|---|---|
curmod | 現在の命令オフセットのためのモジュールインフォメーションを表示(トラブルシューティング用) |
modlist | デバッガーマークアップ言語(DML)強化されたモジュールリストは、よりスムーズなアクティブなIDBスイッチングを対象としています |
idb <module name> | 指定されたモジュールをActive IDBとして設定します( lmのmodlist Enhancedバージョンを参照) |
modmap <base> <size> <name> | 合成(「偽造」)モジュール(ベースアドレスとサイズを使用して定義)がデバッガー内部リストに追加されます |
modunmap <base> | 以前にマップされた合成モジュールをベースアドレスで削除します |
modcheck <||md5> | 現在のモジュールが実際にIDBのファイルに一致するかどうかを確認するために使用します(例:モジュールが更新されました) |
bpcmds <||save|load|> | bpcmdsラッパー、保存、リロード.bpcmds (breakpointsコマンドリスト)出力 |
ks | デバッガーマークアップ言語(DML)は、 KVコマンドの出力を強化しました |
GDB固有のコマンド:
| デバッガーコマンド | 説明 |
|---|---|
bbt | 美しいバックトレース。 GDBのBTに似ていますが、分解者にシンボルを要求します |
patch | ライブコンテキストに基づいた分解のパッチバイト |
bx | GDB xに似ていますが、シンボルを使用します。シンボルは分解によって解決されます |
cc | 分解者のカーソルを続けます |
Overwrite idb name入力フィールドは、デフォルトのIDB名を変更することを目的としています。プラグインがディスパッチャーに登録するために使用される名前です。 IDB自動スイッチは、モジュール名の一致に基づいています。競合する名前( foo.exeやfoo.dllなど)の場合、これはマッチングを容易にするために使用できます。同期がアクティブ中に入力フィールドを変更する場合は、ディスパッチャーに再登録する必要があります。これは、「 Restart 」ボタンを使用するだけで実行できます。
リマインダーとして、 .sync構成ファイルを使用してデフォルトでエイリアスすることができます。
Ret-Syncは、これらのグローバルショートカットをIDAで定義します。
Alt-Shift-S - Ret-Syncプラグインを実行しますCtrl-Shift-Sグローバル同期を切り替えますCtrl-Hヘックス線の同期を切り替えますデバッグツールバーでは、グローバルとヘックスレイの同期を切り替える2つのボタンも利用できます。
Syncplugin.py 、デバッガーコマンドラッパーのホットキーも登録します。
F2カーソルアドレスでブレークポイントを設定しますF3カーソルアドレスでワンショットブレークポイントを設定しますCtrl-F2カーソルアドレスでハードウェアブレークポイントを設定しますCtrl-F3カーソルアドレスでワンショットハードウェアブレークポイントを設定しますAlt-F2翻訳(デバッガーのリベース)現在のカーソルアドレスAlt-F5 -goCtrl-Alt-F5 -run(gdbのみ)F10シングルステップF11シングルトレースこれらのコマンドは、現在のIDBがアクティブな場合にのみ使用できます。可能であれば、他のデバッガーのためにも実装されています。
Retsyncpluginが開いたら、Simple Drag'n'dropでコードブラウザーウィンドウに追加できます。

いくつかのモジュールを表示する場合は、同じコードブラウザービューアーでファイルを開く必要があります。コードブラウザーウィンドウに追加のモジュールをドラッグして、上記の結果を取得します。
Ret-Syncは、 Ghidraでこれらのグローバルショートカットを定義しています。
Alt-S同期を有効にしますAlt-Shift-S同期を無効にしますAlt-R再起動同期Alt-Shift-Rリロード構成デバッガーコマンド上のバインディングも実装されています。それらは、IDAの拡張機能(「go」コマンドを除く)のものに似ています。
F2カーソルアドレスでブレークポイントを設定しますCtrl-F2カーソルアドレスでハードウェアブレークポイントを設定しますAlt-F3カーソルアドレスでワンショットブレークポイントを設定しますCtrl-F3カーソルアドレスでワンショットハードウェアブレークポイントを設定しますAlt-F2翻訳(デバッガーのリベース)現在のカーソルアドレスF5 -goAlt-F5 -run(gdbのみ)F10シングルステップF11シングルトレースRet-Syncは、これらのグローバルショートカットをバイナリニンジャで定義します。
Alt-S同期を有効にしますAlt-Shift-S同期を無効にしますデバッガーコマンド上のバインディングも実装されています。それらはIDAの拡張機能のものに似ています。
F2カーソルアドレスでブレークポイントを設定しますCtrl-F2カーソルアドレスでハードウェアブレークポイントを設定しますAlt-F3カーソルアドレスでワンショットブレークポイントを設定しますCtrl-F3カーソルアドレスでワンショットハードウェアブレークポイントを設定しますAlt-F2翻訳(デバッガーのリベース)現在のカーソルアドレスAlt-F5 -goF10シングルステップF11シングルトレース [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
注:引数なしでこのコマンドを呼び出して、関数のコメントをリセットします。
[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
この例では、現在のアクティブなIDBクライアントは次のように設定されていました。
[0] target.exe.
Alt-F2ショートカット)から使用することを意図して、モジュールの名前とオフセットに関してアドレスを再確認します。 !cmt 、 !rcmt 、および!fcmtコマンドは、オプションのアドレスオプションをサポートしています: -aまたは--address 。アドレスは、六分位の値として渡す必要があります。コマンド解析は、Pythonのargparseモジュールに基づいています。使用の解析を停止する-- 。
[WinDbg]
0:000:x86> !cmt -a 0x430DB2 comment
アドレスは有効な命令のアドレスでなければなりません。
ホストと同期:
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".
「!」なしでコマンドを使用しますプレフィックス
(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を使用してワンショットブレークポイントを設定し、 F5を継続するための代替手段です。これは、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 )/disable( Alt+u )同期を有効にします。 Ctrl+s )/disable( Ctrl+u )同期を有効にします。OllydBG2 APIのベータステータスのため、次の機能のみが実装されています。
F7を使用します。ステッピング用F8 ]CTRL+; ]CTRL+: ] プラグインメニューまたはコマンドを使用する( " !sync" )またはdisable( " !syncoff ")同期を使用します。
コマンドを使用します
[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
注:分離装置(IDA/Ghidra、 Alt-F2ショートカット)からの!翻訳コマンドを使用すると、分解ウィンドウを特定のアドレスに「ジャンプ」します(x64dbgコマンドラインでの障害の実行に相当)。
完全なデバッグ環境が利用できないか、カスタムツールを使用しても、 Ret-Sync Core機能(分解者との位置同期、シンボル解像度)を使用することをお勧めします。そのために、ミニマリストのPythonライブラリが抽出されました。
以下の例は、イベントベースのロギング/トレースツールの出力を通過するスクリプトを使用したPythonライブラリの使用を示しています。
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 ()最初は動的分析(デバッガー)に焦点を当てていましたが、プラグインセットを拡張して他のツールと統合することが可能です。
その他のリソース:
GDBで:
Windbgで:
g Breakpointが遭遇した場合でも通知されます。これらのイベントが多すぎる場合、これは大きなスローダウンを引き起こす可能性があります。限られた修正が実装されていますが、最良の解決策はまだ一時的に同期することです。Ghidraで:
IDAで:
対立:
.sync構成ファイルを使用して、別のポートを定義することです。 [INTERFACE]
host=127.0.0.1
port=9234
ret-syncはフリーソフトウェアです。フリーソフトウェア財団、ライセンスのバージョン3、または(オプションで)後のバージョンのいずれかで公開されているGNU General Publicライセンスの条件に基づいて、再配布したり、変更したりできます。
このプログラムは、それが有用であることを期待して配布されますが、保証はありません。商品性や特定の目的に対するフィットネスの暗黙の保証さえありません。詳細については、GNU一般公開ライセンスを参照してください。
このプログラムとともに、GNU一般公開ライセンスのコピーを受け取る必要があります。そうでない場合は、http://www.gnu.org/licenses/を参照してください。
バイナリニンジャプラグインは、MITライセンスの下でリリースされます。
ブルース・ダン、スタルクル、 @ivanlef0u、damienaumaître、sébastienrenaudandkévinszkudlapski、 @ m00dy 、 @saidelike、xavier mehrenberger、ben64、raphaëlrigo、for siss for siss for fored、feed and and heed and Ilfak Guilfanov、Igor Skochinsky、およびArnaud Diederenは、IDAの内部と卓越したサポートを支援してくれました。 Jordan Wiens and Vector 35に感謝します。最後に、すべての貢献者と問題/バグを報告してくれたすべての人にも感謝します。