Binary Ninjaの使い方
個人的にCTFでBinary Ninjaを使う機会が多いので、簡単な使い方をまとめておく。
Binary Ninjaとは
Binary Ninjaはリバースエンジニアリングツールです。他にGhidraやIDA Proなどがあります。 Binary Ninjaは有償ソフトウェアですが、機能制限があるものの無料で使うことも可能です。 あと学割で安く買えます。
インストール
無償版は以下のリンクから入手できます。
使い方(静的解析編)
Binary Ninjaを起動すると以下のような画面になる。

ここに解析したいファイルをドラッグアンドドロップするかFile -> Openを選択してファイルを開く。
左のSymbolsはGhidraでいうところのSymbol Tree、中心がLinearでGhidraでいうところのDecompilerになる。
Linearウィンドウの左上のPE▼Linear▼High Level IL▼をいじるとGraphやTriage Summaryなどが見れる。ここら辺は実際にいじってみたほうがわかりやすい。
また左端と右端にあるアイコンを押すとSymbolやCross Referencesを表示/非表示にできる。
Shiftを押しながらクリックすると複数まとめて表示できる。
よく使うショートカット
| ショートカット | 動作 |
|---|---|
| g | 指定したアドレスにジャンプ |
| n | 関数名やラベルの変更 |
| ; | コメントの追加 |
| Space | Linear/Graph表示の切り替え |
| i | Disassembly/High Level IL表示の切り替え |
| F5 | 疑似Cにデコンパイル |
| Tab | Disassemblyの表示 |
| Esc | 前の場所に戻る |
| Ctrl+z | 元に戻す |
| Ctrl+y | やり直し |
使い方(デバッグ編)
ツールバーのDebuggerからLaunchを選択 or 左端のDebuggerアイコンをクリックしデバッグを開始する or F6でデバッグを開始できる。

よく使うショートカット
| ショートカット | 動作 |
|---|---|
| F2 | ブレークポイント |
| F6 | デバッグ開始 |
| F7 | ステップオーバー(callがあった場合呼び出されている関数に移動) |
| F8 | ステップイン(callを1つの命令として実行) |
| F9 | 実行(ブレークポイントがなければ最後まで実行) |
| Ctrl+F9 | 現在の関数を抜けるまで実行 |
| g → rip | 現在の実行位置へ移動 |
リモートデバッグ
ツールバーのDebuggerからDebug Adapter Settingsを選択。 Working DirectoryをリモートデバッグするOSのパスに書き換える。

https://github.com/Vector35/debuggerからBinary Ninja用のDebug Serverをダウンロードする。 plugins/lldb/bin/lldb-serverを起動する。
1
lldb-server p --server --listen 0.0.0.0:31337
起動したらBinary Ninja側でツールバーのDebuggerからConnect to Debug Serverを選択。 PlatformをLinuxの場合はremote-linuxを選択。あとはHostのIPとPortを入力しAcceptを押す。
リモートデバッグはIOで結構バグりがちな気がするのでローカルデバッグが確実
便利なところ
- Debuggerウィンドウ(左端の虫アイコン)/Debugger Info(右下のアイコン)が見やすい
- 右クリックメニューにあるパッチが便利
- if文の条件を変えられる
- Graphが見やすい & 高級言語でもGraphが見れる(GhidraではAssemblyでしか見れない)