
IDAとVS Codeを連携させ、IDAPythonスクリプトの実行とデバッグを容易にする統合ツール。
IDACode は、Visual Studio Code を離れることなく、IDA 環境で Python スクリプトを実行およびデバッグすることを容易にします。VS Code 拡張機能は マーケットプレイス から入手できます。
IDACode はまだ非常に初期段階であり、バグが発生する可能性があります。問題が発生した場合は、新しい Issue を開いてください。
debugpy を使用するため、出力ウィンドウが VS Code の出力パネルと自然に同期されます。IDACode は Windows および macOS で、IDA 8.4/9.0 および Python 3.12 でテストされています(古い Python バージョンではデバッグに問題があります)。
IDA プラグインの依存関係をセットアップするには、以下を実行します:
# make sure to use the correct Python version
# IDACode supports the latest debugpy as of version 3.0.0, make sure to upgrade!
python -m pip install --user debugpy tornado
このリポジトリをクローンするか、ここ からリリースパッケージをダウンロードしてください。ida.zip はこのリポジトリの ida フォルダの内容を反映しています。すべてのファイルを IDA のプラグインディレクトリにコピーしてください。
次のステップは、環境に合わせて設定を構成することです(オプション)。idacode_utils/settings.py を適宜編集してください:
HOST: これはホストアドレスです。リモートロケーションからアクセス可能にしたい場合を除き、常に 127.0.0.1 です。このプラグインは認証を使用しないことに注意してください。PORT: IDA がリッスンするポートです。これは IDA と VS Code 間の WebSocket 通信に使用されます。DEBUG_PORT: 着信デバッグセッションのためにリッスンするポートです。LOGGING: デバッガがファイルにログを出力するかどうかを決定します。これは IDACode で問題が発生した場合に特に便利です。何か見つけた場合は新しい Issue を提出してください。ファイルは常に一時ディレクトリ(例:Windows: %TEMP%)に配置されます。ファイル名は debugpy.*.log です。プラグインメニューの IDACode をクリックしてプラグインを起動できます。
VS Code 拡張機能は マーケットプレイス から入手できます。拡張機能の設定については、拡張機能の README を参照してください。
プラグインメニューの IDACode をクリックしてください。次のテキストが表示されます:
IDACode listening on 127.0.0.1:7065
バージョン 0.2.0 以降、IDACode はデフォルトで有効な「保存時に実行」をサポートしています。現在のドキュメントを保存すると(例:Ctrl+S)、VS Code は自動的に IDA 内でスクリプトを実行します。この動作は設定で無効にできます。Ctrl+Shift+P で VS Code 拡張機能開発コンソールを開き、「idacode」と入力すると、以下のコマンド一覧が表示されます。VS Code の「実行」や「デバッグ」機能は使用しないでください。代わりに IDA に「HTTP misformed」というメッセージが表示されます。
以下の 4 つのコマンドが利用可能です:

スクリプトを配置したいフォルダを開いたら(VS Code が要求したときにフォルダを必ず指定してください)、IDA に接続する準備が整います。Connect to IDA または Connect and attach a debugger to IDA を実行することで接続できます。デバッグセッションは IDA を再起動するまで永続的であることに注意してください。デバッガが起動した後はワークスペースフォルダを変更できません。
ワークスペースフォルダがメインスクリプトが置かれているフォルダであることを確認してください。
接続が完了すると、Execute script in IDA を選択できるようになります。
IDACode は VS Code のリモートデバッガを使用して IDA に接続します。すべての VS Code 機能がサポートされています。ただし、Python の組み込み機能である breakpoint を使用してスクリプトのエントリポイントを指定する必要があります。この命令はデバッガに実行を一時停止するよう指示します。デバッガが存在しない場合、関数は単に無視されます。IDACode は dbg というヘルパーパッケージをインポートします。これは breakpoint のオーバーロードである bp を実装しています。この関数はログ出力と条件をサポートしています:
name = idc.get_segm_name(segment)
dbg.bp(name==".text", f"found {name} at {segment}")
また、breakpoint() 呼び出しはファイルの末尾に決して配置しないでください。コード内の 次の 命令でブレークするため、常に他のコード行の前に置く必要があります。また、dbg パッケージを使用する場合は、通常の IDA スクリプトとして実行する前に、すべての参照を削除するか、変数 __idacode__ を条件として使用する必要があることに注意してください。
また、デバッガをアタッチすると新しいデバッガインスタンスが作成されることに注意してください。ほとんどの場合、これは望ましい動作ではありません。デバッガから切断した場合は、VS Code のリモートデバッガを使用して再接続してください。
