CAPE (Configuration And Payload Extraction) の処理と結果のサブセットを提供する、スタンドアロン VM 上で capemon を実行するための Python GUI。

インターフェース
- 上部のタブ: Start、続いて結果ビューごとに1つずつ(Info、Behavior、Signatures、Payloads、
Yara、Configs、Strings、Debugger、JS Log、Network)。
- Start タブは、ターゲット選択、パッケージオプション、モニターおよびログのフラグを
カードにまとめています。アクション(Launch、Kill、レポート、Zip Results)はウィンドウの
下部に固定されるため、スクロールして見失うことはありません。
- ダークテーマとライトテーマは、右下のステータスバーまたは設定から切り替えられます。
選択内容は
cfg.ini に書き込まれ、次回実行時に復元されます。
- Signatures より先に Payloads と Configs を処理します。シグネチャは実行時に
結果に含まれているものしか参照できず、いくつかは payload、config、yara データを読み取ります。
先にパスを実行すると、失敗するのではなく、気付かないうちに過少報告となります。Signatures
ボタンはそれらのタブが実行されるまで無効のままで、ツールチップに未実行のものが表示されます。

UI の開発
-
tools/uidev/ は実際のパネルをオフスクリーンで構築し、PNG に書き出します。そのため、
レイアウトの変更を解析を起動せずにスモークテストし、スクリーンショットを撮ることができます。
詳細は tools/uidev/README.md を参照してください。
-
同じスクリプトが、プルリクエストごとに CI の Windows ランナー上で実行され、レンダリング結果を
アーティファクトとしてアップロードします。
-
マルウェアを実行するのに適した Windows 10 VM を作成します。
-
VM に Python をインストールします。64 ビットの Python バージョン 3.11、3.12、3.12 でテスト済みです。Python を PATH に追加してください。
-
Microsoft Visual C++ 再頒布可能パッケージを両方ダウンロードしてインストールします:
-
CAPEsolo をインストールします。
-
VM のスナップショットを取得します。
クイックスタート
- 管理者権限のコマンドウィンドウを開きます。
- capesolo と入力して実行します。
あるいは、CAPEsolo.exe へのショートカットを作成します。
これは python.exe ファイルと同じ場所の Scripts サブディレクトリにあります。
- 詳細設定で「管理者として実行」をチェックします。
- アイコンファイルは、site-packages 内の CAPEsolo インストールフォルダにあります。
解析結果は C:\Users\Public\CAPEsolo\analysis にあります。
- C:\Users\Public\CAPEsolo\cfg.ini で設定できます。
- ここの設定は python-path\site-packages\CAPEsolo\cfg.ini のパッケージ既定値を上書きし、
パッケージ版のコピーを上書きする
pip install --upgrade CAPEsolo を実行しても保持されます。
- 変更したいキーだけを含めてください。残りはパッケージの既定値にフォールバックします。
コミュニティシグネチャ
- CAPEsolo は自身のシグネチャのみを同梱しています。CAPEv2 / CAPESandbox のコミュニティシグネチャは、
未変更のまま C:\Users\Public\CAPEsolo\signatures(cfg.ini の隣)に置きます。Update(下記)は
https://github.com/CAPESandbox/community からその
community サブフォルダを埋めることができます。
または自分でファイルをそこにコピーすることもできます。
- サブフォルダはスキャンされます。
deprecated と linux はスキップされます。追加または編集された
ファイルは、再起動なしで次回のシグネチャパス時に反映されます。
- そこにあるシグネチャは、同名の同梱シグネチャを置き換えます。
community の外にある自分自身の
シグネチャも、その中にある同名のものより優先されます。
- CAPEsolo が持たない CAPEv2 モジュールを必要とするシグネチャはスキップされ、解析ログに不足している
モジュール名が記録されます。CAPEsolo が生成しない結果セクション(例えば Suricata)を読み取るものは
読み込まれますが、決してマッチしません。
- それらのシグネチャが CAPEv2 のルート配下で探すオプションのデータファイル(
extra/msft-public-ips.csv、
data/dga.bloom)は、C:\Users\Public\CAPEsolo から読み取られます。
YARA ルール
- CAPEsolo は自身の CAPE ルールを同梱しています。独自のルールは C:\Users\Public\CAPEsolo\yara に、コミュニティルールはその
community サブフォルダに置きます。どちらも CAPE ルールと一緒にスキャンされます。同名のファイルが 2 つある場合の優先順位は、Desktop\custom が最優先、次にあなたのフォルダ、次に community、最後に同梱ルールです。
pip install --upgrade CAPEsolo を実行すると、同梱ルールが元に戻ります。
更新(Start タブ)
- 何をダウンロードするかを尋ねます:
- YARA rules - CAPEsolo(デフォルトでチェック済み)と CAPEv2 は、チェックされたものから同梱ルール(CAPE ルールと、ゲスト内で capemon が使用するモニタールール)を再構築します。両方にファイルがある場合は CAPEsolo のものが使用されます。
- YARA rules - Community は
yara\community を CAPESandbox/community の data/yara/CAPE で置き換えます。
- Signatures - Community は
signatures\community を CAPESandbox/community の modules/signatures/windows と all で置き換えます。
- あなた自身のファイルと、Debugger タブで保存したルールは決して変更されません。すべてのダウンロードが完了してから置き換えが行われるため、更新に失敗しても元の内容が保持されます。
- 同じ選択肢は
capesolo --update_yara capesolo,capev2,community(値を省略すると capesolo)、capesolo --update_signatures、および MCP ツール capesolo_update_yara としても利用できます。
レポート(Start タブ)
- Reports は、分析を 1 回通して JSON および/または HTML レポート(デフォルトでは両方チェック済み)を生成します。それぞれがデスクトップと分析ディレクトリに書き出されます。
各分析後に VM を元に戻してください。
JSON レポートの表示(スタンドアロン)
tools/report_viewer.py は、CAPEsolo の report.json 用の自己完結型トリアージビューアで、Python さえあれば任意のホストで動作します - CAPEsolo のインストールも pip 依存関係も不要です(標準ライブラリの tkinter)。
python tools/report_viewer.py [path\to\report.json | path\to\bundle.zip]
- Zip Results の結果バンドルはそのまま開けます:レポートは zip から直接読み出されるため、完全なバンドルのペイロードバイトがトリアージを行うマシンに書き出されることはありません。
- 引数なしの場合は
%USERPROFILE%\Desktop\report.json(CAPEsolo が書き出す場所)を開きます。別のレポートやバンドルを選ぶには File > Open を使用してください。
- トリアージタブ:Overview(判定カード - ファイルハッシュ、検出、上位シグネチャ、設定、件数、およびキャプチャ中に失われたものがあるかどうか)、Capture(実行が保存したものと保存しなかったもの)、Signatures(重大度順にソートされ、色分けされ、プロセスごとの証拠付き)、Processes(プロセスごとのメタデータ付きプロセスツリー)、Network(DNS/HTTP/Hosts/Domains/Flows)、Payloads(yara ヒットと文字列付き)、Yara(スキャンされたすべてのファイルにわたるすべてのルールヒット、メタデータ、マッチした文字列とオフセット付き)、および IOCs(集約され、Copy / Export CSV / Export text 付き)。
- 検索ボックス(上部バー)は、シグネチャ、ネットワーク、ペイロード、設定、IOC、文字列にわたって値を検索し、該当するタブにジャンプします。
- Raw JSON タブは、トリアージタブで表示されないもののために完全なツリーを保持します。
- 大きなレポートを処理します:ファイルはプログレスバー付きで読み込まれ、生のツリーは遅延読み込み(展開時に子を読み込み)され、詳細ペインはサイズ制限されるため、数百 MB/GB のレポートでも応答性が保たれます。(GB 単位のレポートを解析するには依然として数 GB の RAM が必要です - これは Python の JSON に固有のものです。)
- ダークテーマとライトテーマがあり、CAPEsolo GUI のパレットに合わせています。デフォルトでは Windows の「アプリモード」設定に従います(それ以外ではダーク)。右上のボタンでセッション中だけ切り替えられ、
--theme dark|light で強制できます。メニューバーとネイティブの Open/エラーダイアログは Windows が描画するためライトのままです - tkinter ではこれらをテーマ化できません。
- tkinter が必要です - 標準の Windows/macOS Python には同梱されています。Linux では
python3-tk をインストールしてください。
AI分析(任意)
- ビューアは読み込んだレポートに対してClaudeを実行できます。証拠タブごとのスペシャリスト、Overviewに対するリードアナリストの判定、そしてインタラクティブな質問ループです。これはオプトインかつ任意です。ビューアには依然として必須の依存関係はなく、上記のすべてのタブはこれなしで動作します。
- 1つのパッケージとキーで有効化できます:
pip install anthropic
set ANTHROPIC_API_KEY=sk-ant-...(または--api-keyを渡すか、AI > Settingsで入力)
- パッケージまたはキーがない場合、AIペインはその旨を表示し、それ以外は何も変わりません。
- 使用方法は3通りあります:
- GUI - AIタブには証拠タブごとのスペシャリスト(Signatures、Processes、Behavior、Network、JS Log、Payloads、Configs、Yara、Static、IOCs、Capture)に加えてAskペインがあります。「Analyze all」はすべてのスペシャリストを実行し、その後Overviewに判定カードを書き込みます。トップバーの「Analyze tab」は、現在読んでいるタブのスペシャリストを実行します。
- ワンショット -
python report_viewer.py bundle.zip --ask "is this a loader or the final stage?"
- インタラクティブ -
python report_viewer.py bundle.zip --chat、またはヘッドレスで所見を出力するには--analyze all / --analyze Network。
- オプション:
--model(デフォルトは$ANTHROPIC_MODELまたはclaude-opus-5)、--effort(low..max)、データ送信の確認をスキップする--yes。ディスクには何も書き込まれません。キーとモデルは環境またはそのセッション内にのみ存在します。
- 送信されるもの:ファイル名とハッシュ、シグネチャのテキスト、プロセス/レジストリのアクティビティ、ネットワークエンドポイント、設定フィールド、ペイロードの文字列 - 上限付きの選択であり、省略されたものはモデルに宣言され、ペインに表示されます。サンプルとペイロードのバイト列は決して送信されません(そもそもレポートバンドルには含まれていません)。セッションごとに1回確認を求められます。
- コスト:フル実行は約11回の呼び出しです。ケースダイジェストは1回だけ送信されキャッシュされるため、後続のスペシャリストは入力価格の約10分の1で再読み込みします。「Analyze all」は開始前にトークン数とドル見積もりを表示し、ステータス行は終了後に実際の消費額を報告します。
- 回答はレポートに基づいており、証拠が結論を裏付けない場合はその旨を述べます。マルウェアのコンテンツがモデルの安全分類器に引っかかることがあります。リクエストにはサーバー側のフォールバックが組み込まれており、拒否は空のペインではなく拒否として表示されます。
結果を別のマシンへ持ち出す
- StartパネルのZip Resultsは、書き出すアーカイブを尋ねます:
- レポートバンドル(
Desktop\capesolo_report_<timestamp>.zip) - report.json、capture.json、analysis.log、files.json。サンプルもペイロードのバイト列も含まないため、ワークステーションへのコピーは安全です。tools/report_viewer.pyで直接開けます(下記参照)。ビューアは何も展開せずにzipからレポートを読み取ります。
- フルバンドル(
Desktop\capesolo_analysis_<timestamp>.zip) - 分析ディレクトリ全体で、クリーンなVMへの復元用です。生きたマルウェアを含むため、それに応じて扱ってください。
- まだ
report.jsonがない場合、Zip Resultsは先に生成することを提案します。レポートとHTMLレポートはDesktopだけでなく分析ディレクトリにも書き込まれるようになり、これによりどちらのバンドルも自己完結します。
何がキャプチャされたかを把握する
- すべての分析は結果の隣に
capture.jsonを書き込みます:ResultServerからの転送数、files.json内のどのアーティファクトがディスク上に欠けているか、どれが部分的にしか届かなかったか、またはupload_max_sizeで切り詰められたか、アナライザがアップロードしなかったファイル(大きすぎるか空)、そして適用されていた上限です。
- 失われたものはすべてログに記録され、実行終了時にステータスバーに表示され、
report.jsonのcaptureの下に引き継がれ、tools/report_viewer.pyのCaptureタブにレンダリングされます。部分的にしか保存されなかったペイロードは、完全なものとして提示されるのではなく、Payloadsリストでフラグが立てられます。