概要
タイトルの通りです。Binja 5.2からTTDが強化されました。なんとFreeでも使えます。
TTDは通常のデバッグと違い、事前に取得したDebug Traceの再生をするものです。
- 過去に戻れる
- Trace再生時ホストへの影響はない
- マルウェアの動的解析のように実行前のスナップショットに戻る...などの手間がない
なぜBinjaか?
- Ghidraでも一応TTDは試したが動作が不安定
- BinjaはDecompilerを見ながらデバッグできる
- IDAはidbとの連携が悪く、ttd trace単体をIDAで開いて解析になる
こちらドキュメントになります
setup

Debugger → Install WinDbg/TTDを選択
使い方
Traceの取得

Debugger → Record TTD Traceを選択
ASLRを切ることを推奨。
ランサムとかのTraceはTraceファイルのサイズが大きくなりすぎるので必要に応じてtaskkill推奨
トレースを取得したら左のDebugger Icon → DBGENG_TTDを選択しDebug開始。Trace Pathに.runファイルを指定。

ASLRを切り忘れるとImageBaseがこうなります(n敗)。
TTDを開始するとTTD Memory, TTD Calls, TTD Eventsが右のメニューが追加されます。
基本的なショートカット
- F4 現在のカーソル位置まで実行
- F7 step into
- F8 step over
- F9 Resume
- Ctrl + F9 Step Return
上記ショートカットにShiftを付けると戻れる
- G 指定した関数・アドレス・レジスタに移動
- Shift + G 指定したTTD Positionに移動
TTD Memory
指定した領域のread, write, execを探せる。
このbool値どこでセットされたの?ってときなどに使えます。
TTD Calls
API呼び出しを探せる。ランタイムリンクで呼び出されたものも探せるので便利。
現在のTTD Position次第で検知できない場合もあるので注意。
TTD Events
DLLの呼び出し、例外処理の発生、Threadの作成が見られる。
TTD Analysis
どこが実際に実行されたか分析してくれる機能

Debugger → TTD Analysisを選択

例えばmain関数が140001000から14000141bまでの場合Start AddressとEnd Addressに値をセットしRun Analysis

Render Layers → TTD Coverageをオンにする

実行した箇所は赤くハイライトされる。

CFGでもハイライト可能(ハイライト薄いのでもう少し強くしてほしい)
TTD Analysisは広いアドレス範囲で実行するとメモリを滅茶苦茶使うので注意。関数単位での範囲指定を推奨。
Debug Console

下部にConsoleがありここでttdコマンドを動かせる。図はrsp付近にある値を出力したもの
その他
- 右クリックメニューにAdd Cross Reference Toがあるので関節呼び出し
call raxを見つけたら追加してあげるといいかも
課金勢
BinjaのAPIにTTDがあります。



