
SentinelNav: 依存関係ゼロ、ピュアPythonのバイナリ可視化とフォレンジックツール。
SentinelNav は、依存関係が一切不要な純粋な Python 製のバイナリ可視化・フォレンジックツールです。バイナリデータをインタラクティブなスペクトルマップに変換し、アナリストがファイル構造、エントロピーの異常、コードセクション、潜在的な暗号ブロブを視覚的に特定できるようにします。
マルチプロセッシングによる高速なファイルスキャンと、ローカルな Web ベースのフロントエンドによるインタラクティブな探索、16 進数インスペクション、アーキテクチャフィンガープリンティングを組み合わせています。

SentinelNav は Python 標準ライブラリのみに依存しているため、外部パッケージのインストールは不要です。
sentinelnav.py として保存します。python3 sentinelnav.py
http://localhost:8000 を開きます。pip install なしで、標準の Python 3 インストールで動作します。0x0A)に基づいてファイルを分割します。concurrent.futures.ProcessPoolExecutor を使用して、スキャン中にすべての CPU コアを利用します。SentinelNav は、クライアント・サーバーインターフェースを備えたプロデューサー・コンシューマーアーキテクチャに従っています。
Processor は CPU コア数に基づいてワーカーのプールを生成します。sqlite3 データベースがバイナリファイルの構造化インデックスを作成します。http.server.ThreadingMixIn を実装しています。/data: チャンクデータ(カラー + エントロピー)の JSON ページを返します。/read: インスペクターパネル用の特定の 16 進数ダンプ。/search: 物理ファイル内の 16 進数列をスキャンします。/download: 生のバイナリブロブを抽出するか、BMP 可視化を生成します。このツールは、特定の RGB アルゴリズムを使用してバイナリデータタイプを表現します。
| 色 | コンポーネント | 意味 |
|---|---|---|
| 赤 | 高ビット | バイト 0x80 - 0xFF。コンパイル済み機械語コード、圧縮データ、暗号化ブロブ、画像データを示します。 |
| 緑 | ASCII | バイト 0x20 - 0x7E。プレーンテキスト、ソースコード、JSON、XML、ログを示します。 |
| 青 | 制御 | バイト 0x00 - 0x1F。ヌルパディング、ヘッダー、プロトコル制御文字を示します。 |
よく見られるパターン:
ライブラリをインストールする必要はありません。ファイルをダウンロードするだけです。
# スクリプトをクローンまたはダウンロード
wget https://raw.githubusercontent.com/smolfiddle/SentinelNav/main/sentinelnav.py
インタラクティブに実行することも、コマンドライン引数を使用することもできます。
引数なしで実行するとウィザードが起動します:
python3 sentinelnav.py
自動化やパワーユーザー向けに、フラグを使用してウィザードをスキップできます。
python3 sentinelnav.py <対象ファイル> [オプション]
| 引数 | 説明 | デフォルト |
|---|---|---|
--mode | スキャンモード: fixed または sentinel。 | fixed |
--size | 固定モードのブロックサイズ(バイト)、またはセンチネルモードの最大バッファサイズ。 | 1024 |
--hex | センチネルモードの区切りバイト(例:改行の場合は 0A)。 | 00 |
--port | Web サーバーのポート番号。 | 8000 |
--window | 異常検出計算のスライディングウィンドウサイズ。 | 5 |
例: ファームウェアイメージを 256 バイトの解像度でポート 8080 でスキャンする:
python3 sentinelnav.py firmware.bin --size 256 --port 8080
Web インターフェースが読み込まれると、以下の操作が使用できます。
| キー | アクション |
|---|---|
| W / A / S / D | 選択カーソルを移動(上/左/下/右)。 |
| 左矢印 | 前のページ。 |
| 右矢印 | 次のページ。 |
| Shift + WASD | ブロックの範囲を選択(複数選択)。 |
| Shift + クリック | 前のアンカーからクリックしたブロックまでの範囲を選択。 |