
FileInsight-plugins: McAfee FileInsight バイナリエディタのマルウェア解析用デコードツールボックス
FileInsight-plugins は McAfee FileInsight バイナリエディタ用のプラグイン集です。
暗号の復号、圧縮の展開、XOR された文字列の検索、YARA ルールでのスキャン、コードのエミュレーション、逆アセンブル等、多数の機能を追加できます。
マルウェア解析に関する様々なデコード作業に便利です。(例:文書ファイル型のマルウェアからマルウェアの実行ファイルやダミーの文書ファイルを抽出する)
FileInsight のインストーラをお探しの方は https://downloadcenter.trellix.com/products/mcafee-avert/fileinsight.msi からダウンロードできます。
スクリーンショット
AES decrypt プラグインのダイアログ

YARA scan プラグインの実行結果

Parse file structure プラグインで ELF ファイルの構造をパースした結果

Emulate code プラグインで ARM64 の Linux 用のシェルコードをエミュレートした結果

Disassemble プラグインで x86 の Linux 用のシェルコードを逆アセンブルした結果

Bitmap view プラグインで Windows の実行ファイルを可視化した結果

Byte histogram プラグインで表示した Excel ファイル中の値の出現頻度のグラフ

Entropy graph プラグインで表示した Windows の実行ファイルのエントロピーのグラフ

講演
Black Hat USA 2021 Arsenal
CODE BLUE 2019 Bluebox
使用例
インストール方法
以下のコマンドを実行してください。最新のリリース版の FileInsight-plugins と FileInsight、Python 3.12.x (x64) を含む必要なものがインストールされます。
powershell -exec bypass -command "IEX((New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/nmantani/FileInsight-plugins/master/install.ps1'))"
プロキシサーバを使用している場合は (例えば IPアドレス: 10.0.0.1 ポート番号: 8080) 以下のコマンドを実行してください。
curl -x http://10.0.0.1:8080 -Lo install.ps1 https://raw.githubusercontent.com/nmantani/FileInsight-plugins/master/install.ps1
powershell -exec bypass .\install.ps1
手動でインストールが必要な Python モジュールが数個あります。プラグインが表示するインストール手順に従ってください。
使い方
Plugins タブにある "Operations" をクリックして、プラグインを選択してください。
右クリックのメニューからプラグインを使用することもできます。

いくつかのプラグインは使用時に設定のダイアログを表示します。

アップデート方法
FileInsight-plugins を最新のリリース版にアップデートしたい場合はプラグインのメニューの
Check for update をクリックしてください。新しいバージョンがある場合はインストール用の
PowerShell スクリプト(https://raw.githubusercontent.com/nmantani/FileInsight-plugins/master/install.ps1)
が実行されます。既存のファイルは上書きされます。

以下のコマンドを実行してアップデートすることもできます(Check for update メニューはこのコマンドを実行しています)。
powershell -exec bypass -command "& ([scriptblock]::Create((New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/nmantani/FileInsight-plugins/master/install.ps1'))) -update"
HTTP プロキシをお使いの場合は install.ps1 をダウンロードして、ファイル中の $PROXY_HOST と
$PROXY_PORT の変数を編集してから以下のコマンドを実行してください
powershell -exec bypass .\install.ps1 -update
FileInsight-plugins を最新のスナップショットに更新したい場合は "-snapshot" オプションを追加してください。
powershell -exec bypass -command "& ([scriptblock]::Create((New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/nmantani/FileInsight-plugins/master/install.ps1'))) -update -snapshot"
カスタマイズ
Send to (CLI) プラグインと Send to (GUI) プラグインはファイルをあなたのお好みのプログラムで開くことができます。
Send to プラグインのメニューで Customize menu をクリックしてください。

"plugins\Operations\Misc\send_to_cli.json" (Send to (CLI) プラグイン) または"plugins\Operations\Misc\send_to.json" (Send to (GUI) プラグイン) がデフォルトのテキストエディタで開かれます。編集して保存してください。

カスタマイズした内容がメニューに反映されます。

プラグインの一覧 (155個)
Basic operations
- Copy to new file
選択範囲を(選択していない場合は全体を)新しいファイルとして開きます。
- Switch file tabs
ファイルのタブをリストボックスを使って切り替えます。
- Bookmark
選択範囲を指定したコメントと色でブックマークします。
- Cut binary to clipboard
選択範囲のバイナリデータをクリップボードに切り取ります(16進テキストとして)。
- Copy binary to clipboard
選択範囲のバイナリデータをクリップボードにコピーします(16進テキストとして)。
- Paste binary from clipboard
クリップボードからバイナリデータをペーストします(16進テキストから変換)。
- Delete before
現在のカーソル位置より前を全て削除します。
- Delete after
現在のカーソル位置より後を全て削除します。
- Fill
選択範囲を指定した16進数のパターンで埋めます。
- Invert
選択範囲のビットを反転します。
- Reverse order
選択範囲のバイト列の順序を逆に並べ替えます。
- Change endianness
選択範囲のエンディアンを変換します。
- Swap nibbles
選択範囲内のニブルの組を入れ替えます。
- Swap two bytes
選択範囲内のバイトの組を入れ替えます。
- To upper case
選択範囲内の小文字を大文字にします。
- To lower case
選択範囲内の大文字を小文字にします。
- Swap case
選択範囲内の大文字と小文字を入れ替えます。
Compression operations
Compress
- aPLib
選択範囲を aPLib 圧縮ライブラリで圧縮します。
- Brotli
選択範囲を Brotli アルゴリズムで圧縮します。
- Bzip2
選択範囲を bzip2 アルゴリズムで圧縮します。
- Gzip
選択範囲を gzip 形式で圧縮します。
- LZ4
選択範囲を LZ4 アルゴリズムで圧縮します。
- LZF
選択範囲を LZF アルゴリズムで圧縮します。
- LZFSE
選択範囲を LZFSE アルゴリズムで圧縮します。
- lzip
選択範囲を lzip 形式で圧縮します。
- LZJB
選択範囲を LZJB アルゴリズムで圧縮します。
- LZMA
選択範囲を LZMA アルゴリズムで圧縮します。
- LZNT1
選択範囲を LZNT1 アルゴリズムで圧縮します。
- LZO
選択範囲を LZO アルゴリズムで圧縮します。
- LZRW1/KH
選択範囲を LZRW1/KH アルゴリズムで圧縮します。
- PPMd
選択範囲を PPMd アルゴリズムで圧縮します。
- QuickLZ
選択範囲を QuickLZ 圧縮ライブラリで圧縮します。
- Raw deflate
選択範囲をヘッダとチェックサムを付けずに Deflate アルゴリズムで圧縮します。(PHP言語の gzdeflate() と同等)
- Snappy
選択範囲を Snappy 圧縮ライブラリで圧縮します。
- XZ
選択範囲を XZ 形式で圧縮します。
- zlib (deflate)
選択範囲を zlib (Deflate アルゴリズム) で圧縮します。
- Zstandard
選択範囲を Zstandard アルゴリズムで圧縮します。
Decompress
- aPLib
選択範囲を aPLib 圧縮ライブラリで展開します。
- Brotli
選択範囲を Brotli アルゴリズムで展開します。
- Bzip2
選択範囲を bzip2 アルゴリズムで展開します。
- Gzip
gzip 形式で圧縮された選択範囲を展開します。
- LZ4
選択範囲を LZ4 アルゴリズムで展開します。
- LZF
選択範囲を LZF アルゴリズムで展開します。
- LZFSE
選択範囲を LZFSE アルゴリズムで展開します。
- lzip
選択範囲を lzip 形式として展開します。
- LZJB
選択範囲を LZJB アルゴリズムで展開します。
- LZMA
選択範囲を LZMA アルゴリズムで展開します。
- LZNT1
選択範囲を LZNT1 アルゴリズムで展開します。
- LZO
選択範囲を LZO アルゴリズムで展開します。
- LZRW1/KH
選択範囲を LZRW1/KH アルゴリズムで展開します。
- PPMd
選択範囲を PPMd アルゴリズムで展開します。
- QuickLZ
選択範囲を QuickLZ 圧縮ライブラリで展開します。
- Raw inflate
ヘッダとチェックサムを付けずに Deflate 圧縮された選択範囲を展開します。(PHP言語の gzinflate() と同等)
- Snappy
選択範囲を Snappy 圧縮ライブラリで圧縮します。
- XZ
選択範囲を XZ 形式として展開します。
- zlib (inflate)
選択範囲を zlib (Deflate アルゴリズム) で展開します。
- Zstandard
選択範囲を Zstandard アルゴリズムで展開します。
Crypto operations
Decrypt
- AES
選択範囲を AES で復号します。
- Blowfish
選択範囲を Blowfish で復号します。
- CAST-128
選択範囲を CAST-128 で復号します。
- Camellia
選択範囲を Camellia で復号します。
- ChaCha20
選択範囲を ChaCha20 で復号します。
- DES
選択範囲を DES で復号します。
- RC2
選択範囲を RC2 で復号します。
- RC4
選択範囲を RC4 で復号します。
- RC5
選択範囲を RC5 で復号します。
- RC6
選択範囲を RC6 で復号します。
- Salsa20
選択範囲を Salsa20 で復号します。
- TEA
選択範囲を TEA (Tiny Encryption Algorithm) で復号します。
- Triple DES
選択範囲を Triple DES で復号します。
- XTEA
選択範囲を XTEA (eXtended Tiny Encryption Algorithm) で復号します。
- XXTEA
選択範囲を XXTEA (Corrected Block Tiny Encryption Algorithm) で復号します。
Encrypt
- AES
選択範囲を AES で暗号化します。
- Blowfish
選択範囲を Blowfish で暗号化します。
- CAST-128
選択範囲を CAST-128 で暗号化します。
- Camellia
選択範囲を Camellia で暗号化します。
- ChaCha20
選択範囲を ChaCha20 で暗号化します。
- DES
選択範囲を DES で暗号化します。
- RC2
選択範囲を RC2 で暗号化します。
- RC4
選択範囲を RC4 で暗号化します。
- RC5
選択範囲を RC5 で暗号化します。
- RC6
選択範囲を RC6 で暗号化します。
- Salsa20
選択範囲を Salsa20 で暗号化します。
- TEA
選択範囲を TEA (Tiny Encryption Algorithm) で暗号化します。
- Triple DES
選択範囲を Triple DES で暗号化します。
- XTEA
選択範囲を XTEA (eXtended Tiny Encryption Algorithm) で暗号化します。
- XXTEA
選択範囲を XXTEA (Corrected Block Tiny Encryption Algorithm) で暗号化します。
Encoding operations
Decode
- Hex text to binary data
選択範囲の16進数のテキストをバイナリデータに変換します。
- Decimal text to binary data
選択範囲の10進数のテキストをバイナリデータに変換します。
- Octal text to binary data
選択範囲の8進数のテキストをバイナリデータに変換します。
- Binary text to binary data
選択範囲の2進数のテキストをバイナリデータに変換します。
- Custom base16 decode
選択範囲をカスタムbase16テーブルを使ってデコードします。
- Custom base32 decode
選択範囲をカスタムbase32テーブルを使ってデコードします。
- Custom base58 decode
選択範囲をカスタムbase58テーブルを使ってデコードします。
- Custom base62 decode
選択範囲をカスタムbase62テーブルを使ってデコードします。
- Custom base64 decode
選択範囲をカスタムbase64テーブルを使ってデコードします。
- Custom base85 decode
選択範囲をカスタムbase85テーブルを使ってデコードします。
- Custom base91 decode
選択範囲をカスタムbase91テーブルを使ってデコードします。
- Custom base92 decode
選択範囲をカスタムbase92テーブルを使ってデコードします。
- gob decode
選択範囲を gob (Go言語用のシリアライズフォーマット) でシリアライズされたデータとして Python の記法にデコードします。
- MessagePack decode
選択範囲を MessagePack でシリアライズされたデータとして JSON にデコードします。
- Protobuf decode
選択範囲を Protocol Buffers でシリアライズされたデータとして .proto ファイル無しで JSON にデコードします。
- From quoted printable
選択範囲を quoted printable としてデコードします。
- Unicode unescape
選択範囲の Unicode エスケープシーケンスを文字列に戻します。
- URL decode
選択範囲を URL に使われているパーセントでエンコードされたテキストとしてデコードします。
Encode
- Binary data to hex text
選択範囲のバイナリデータを16進数のテキストに変換します。
- Binary data to decimal text
選択範囲のバイナリデータを10進数のテキストに変換します。
- Binary data to octal text
選択範囲のバイナリデータを8進数のテキストに変換します。
- Binary data to binary text
選択範囲のバイナリデータを2進数のテキストに変換します。
- Custom base16 encode
選択範囲をカスタムbase16テーブルを使ってエンコードします。
- Custom base32 encode
選択範囲をカスタムbase32テーブルを使ってエンコードします。
- Custom base58 encode
選択範囲をカスタムbase58テーブルを使ってエンコードします。
- Custom base62 encode
選択範囲をカスタムbase62テーブルを使ってエンコードします。
- Custom base64 encode
選択範囲をカスタムbase64テーブルを使ってエンコードします。
- Custom base85 encode
選択範囲をカスタムbase85テーブルを使ってエンコードします。
- Custom base91 encode
選択範囲をカスタムbase91テーブルを使ってエンデコードします。
- Custom base92 encode
選択範囲をカスタムbase92テーブルを使ってエンデコードします。
- MessagePack encode
選択範囲の JSON を MessagePack でシリアライズされたデータとしてエンコードします。
- ROT13
選択範囲のアルファベットの文字列を指定した数だけローテートします。(デフォルト: 13)
- To quoted printable
選択範囲を quoted printable としてエンコードします。
- Unicode escape
選択範囲の Unicode 文字列をエスケープします。
- URL encode
選択範囲を URL に使われているパーセントでエンコードされたテキストとしてエンコードします。
Misc operations
- Emulate code
選択範囲を(選択していない場合は全体を) 実行ファイルまたはシェルコードとしてエミュレートします。
- File comparison
2つのファイルの内容を比較します。
- Hash values
選択範囲の(選択していない場合は全体の) CRC32, MD5, SHA1, SHA256, ssdeep, TLSH, imphash, impfuzzy, exphash, Rich PE header hash, authentihash, icon MD5, icon dhash, gimphash, telfhash の値を計算します。
- Send to (CLI)
選択範囲を(選択していない場合は全体を)別の CLI プログラムで開いて結果を取得します。
- Send to (GUI)
選択範囲を(選択していない場合は全体を)別の GUI プログラムで開きます。
Parsing operations
- Binwalk scan
選択範囲を(選択していない場合は全体を)スキャンして埋め込まれたファイルを探します。
- Disassemble
選択範囲を(選択していない場合は全体を)逆アセンブルします。
- Extract VBA macro
選択範囲から(選択していない場合は全体から) Microsoft Office VBA マクロを抽出します。
- File type
選択範囲の(選択していない場合は全体の)ファイルの種類を判別します。
- Find PE file
選択範囲から(選択していない場合は全体から) PE ヘッダ情報に基づいて PE ファイルを探します。
- Parse file structure
選択範囲を(選択していない場合は全体を) のファイル構造を Kaitai Struct でパースします。
対応フォーマット: Gzip, RAR, ZIP, ELF, Mach-O, PE, MBR パーティションテーブル, BMP, GIF, JPEG, PNG, Windows ショートカット
- Show metadata
選択範囲の(選択していない場合は全体の)ファイルのメタデータを ExifTool を使って表示します。
- Strings
選択範囲から(選択していない場合は全体から)文字列を抽出します。
- String type
選択範囲から(選択していない場合は全体から) lemmeknow を使って API キーや暗号資産のウォレットのアドレス等の文字列の種類を判別します。
Search operations
- Regex extraction
選択範囲から(選択していない場合は全体から) 正規表現で検索してマッチした領域を1つに連結された領域として抽出します。
- Regex search
選択範囲から(選択していない場合は全体から) 正規表現で検索してマッチした領域をブックマークします。
- Replace
選択範囲から(選択していない場合は全体から) 正規表現で検索してマッチした領域を指定したデータで置換します。
- XOR hex search
選択範囲から(選択していない場合は全体から) XOR またはビットローテートされているバイト列を検索します。
- XOR text search
選択範囲から(選択していない場合は全体から) XOR またはビットローテートされている文字列を検索します。
- YARA scan
選択範囲を(選択していない場合は全体を) YARA でスキャンします。
Visualization operations
- Bitmap view
ファイル全体をビットマップとして可視化します。
- Byte histogram
選択範囲の(選択していない場合は全体の)値の出現頻度のグラフを出力します。
- Entropy graph
選択範囲の(選択していない場合は全体の)エントロピーのグラフを出力します。
XOR operations
- Simple XOR
指定された XOR キーで XOR します。
- Decremental XOR
選択範囲を XOR キーの値を減らしながら XOR します。
- Incremental XOR
選択範囲を XOR キーの値を増やしながら XOR します。
- Null-preserving XOR
選択範囲をヌルバイトと XOR キー自体をスキップしながら XOR します。
- XOR with another file
選択範囲を別のファイルの内容をキーにして XOR します。
- XOR with next byte
選択範囲を次のバイトを XOR のキーにしながら XOR します。
- XOR with next byte (reverse)
"XOR with next byte" プラグインの逆の操作を行います。
- Guess multibyte XOR keys
0x00 と XOR することによって現れているキーの値に基づいて選択範囲から(選択していない場合は全体から)複数バイトの XOR キーを推測します。
- Visual encrypt
選択範囲をマルウェアの Zeus で使われている visual encrypt アルゴリズムでエンコードします。
- Visual decrypt
選択範囲をマルウェアの Zeus で使われている visual decrypt アルゴリズムでデコードします。
作者
萬谷 暢崇 (X: @nmantani)
ライセンス
The BSD 2-Clause License (http://opensource.org/licenses/bsd-license.php)