Mitraは、単一のバイナリデータ内に複数のファイル形式(Polyglot)を共存させるための高度なツールです。本記事では、実行環境の構築から、PNG画像とDICOM医用画像データを統合したハイブリッドファイルの生成手順について解説します。
環境構築とセットアップ
ツールの導入にはPython 3.6以上の実行環境が必要です。追加の外部ライブラリ依存はなく、標準ライブラリのみで動作します。
まず、リポジトリをソースコード管理システムから取得します。以下のコマンドを実行してローカル環境にコピーしてください。
git clone https://gitcode.net/mirrors/mitra mitra_project
cd mitra_project
実行アーキテクチャと基本的な操作
処理のエントリーポイントはmitra.pyスクリプトです。基本的な構文は、入力となる2つのファイルパスを指定して実行します。ツールは内部のパーサーを用いてファイル構造を解析し、互換性のあるバイナリ構造を合成します。
python3 mitra.py [オプション] <ターゲットファイルA> <ターゲットファイルB>
実践:PNG/DICOMポリグロットの生成
ここでは、一般的な画像形式であるPNGと、医療用標準フォーマットであるDICOMを組み合わせたファイルを作成します。リポジトリ内のinputディレクトリに含まれるサンプルデータを利用します。
ターミナルで以下のコマンドを実行してください。これにより、PNGのシグネチャとDICOMのメタデータを含む統合ファイルが生成されます。
# リポジトリ内のサンプルを使用した実行例
python3 mitra.py input/demo_png.png input/demo_dicom.dcm
処理が完了すると、outディレクトリ内に結果が出力されます。ファイル名にはオフセット値やハッシュ値が含まれ、生成されたファイルの拡張子は複数の形式を示すように命名されます(例: .png.dcm)。
生成モードと対応フォーマットの概要
MitraのPARSERSモジュールは、画像、圧縮、実行ファイルなど幅広いフォーマットに対応しています。サポートされている主な形式には以下が含まれます。
- 画像系: PNG, JPG, BMP, GIF
- ドキュメント系: PDF, PostScript
- アーカイブ系: ZIP, GZIP
- 実行・特殊形式: ELF, PE, DICOM, WebAssembly
また、ファイルを統合するロジックとして以下の4つのアルゴリズムが実装されています。
- Stack Mode: 単純なデータの連結を行います。
- Parasite Mode: ホストとなるファイルのデータ領域内に別ファイルを埋め込みます。
- Zipper Mode: 2つのファイルのバイト列を交互に配置(インターリーブ)して統合します。
- Cavity Mode: ファイル内の未使用領域(空洞)を利用してデータを埋め込みます。
トラブルシューティングと高度なオプション
生成プロセスではファイルサイズや形式の解析結果に依存するエラーが発生する可能性があります。これらに対処するためのオプションをいくつか紹介します。
- タイプ強制指定 (-f): ツールがファイル形式を特定できない場合に、手動で形式を指定して処理を強行します。
- パディング調整 (-pad): 領域が不足する場合の埋め込みサイズを調整します。
- 重複・順序制御:
-reverseフラグで入力ファイルの優先順位を入れ替えたり、-overlapでデータ領域を重複させてファイルサイズを圧縮したりできます。
生成されたバイナリが正しく機能するか検証するには、異なるビューア(画像ビューアとDICOMビューア)で同じファイルを開いてみてください。それぞれのフォーマットとして正しく認識されれば、ポリグロットの生成は成功しています。