BinWalkのインストールとコマンドパラメータ



Binwalk Installation



binwalkヘルプ出力を表示する( `-h、-help)

$ binwalk --help

ファームウェアをスキャンする

binwalk主な機能-これまでで最も人気のある機能でもあります。
Binwalkスキャンするファイルのリストを提供することで、さまざまな種類の埋め込みファイルとファイルシステムファームウェアイメージをスキャンできます。

$ binwalk firmware.bin DECIMAL HEX DESCRIPTION ------------------------------------------------------------------------------------------------------------------- 0 0x0 DLOB firmware header, boot partition: 'dev=/dev/mtdblock/2' 112 0x70 LZMA compressed data, properties: 0x5D, dictionary size: 33554432 bytes, uncompressed size: 3797616 bytes 1310832 0x140070 PackImg section delimiter tag, little endian size: 13644032 bytes big endian size: 3264512 bytes 1310864 0x140090 Squashfs filesystem, little endian, version 4.0, compression:lzma, size: 3264162 bytes, 1866 inodes, blocksize: 65536 bytes, created: Tue Apr 3 04:12:22 2012

ファイル抽出-e,--extract

この関数も一般的に使用される関数であり、多くのファイルがCTFで分解されます。Misc question使用可能binwalk使用よりも効率が向上winhexこのようなツール。
使用可能-eこのオプションは、ファームウェアイメージで見つかったファイルを抽出します。



$ binwalk -e firmware.bin

署名分析-B,--signature

ターゲットファイルで署名分析を実行します。これは、他の分析オプションが指定されていない場合のデフォルトです。
--entropy:などの他のパーサーで署名分析を使用する場合は、このオプションを使用します。

$ binwalk --signature firmware.bin DECIMAL HEX DESCRIPTION ------------------------------------------------------------------------------------------------------------------- 0 0x0 DLOB firmware header, boot partition: 'dev=/dev/mtdblock/2' 112 0x70 LZMA compressed data, properties: 0x5D, dictionary size: 33554432 bytes, uncompressed size: 3797616 bytes 1310832 0x140070 PackImg section delimiter tag, little endian size: 13644032 bytes big endian size: 3264512 bytes 1310864 0x140090 Squashfs filesystem, little endian, version 4.0, compression:lzma, size: 3264162 bytes, 1866 inodes, blocksize: 65536 bytes, created: Tue Apr 3 04:12:22 2012

エントロピー分析-E, --entropy

入力ファイルに対してエントロピー分析が実行され、生のエントロピーデータが印刷され、エントロピーマップが生成されます。
エントロピー分析は、–signature、-raw、または–opcodesと組み合わせて、ターゲットファイルをよりよく理解することができます。
署名スキャンで見逃される可能性のある興味深いデータ部分を識別するために使用されます。



$ binwalk -E firmware.bin DECIMAL HEXADECIMAL ENTROPY -------------------------------------------------------------------------------- 0 0x0 Rising entropy edge (0.983751) 1155072 0x11A000 Falling entropy edge (0.000000) 1181696 0x120800 Rising entropy edge (0.990546) 3780608 0x39B000 Falling entropy edge (0.000000)

–verboseオプションと組み合わせて使用​​すると、各ブロックに対して計算された生のエントロピーが出力されます。

$ binwalk -E --verbose firmware.bin DECIMAL HEX ENTROPY ANALYSIS -------------------------------------------------------------------------------- 0 0x0 0.964914 1024 0x400 0.978591 2048 0x800 0.973048 3072 0xC00 0.976195 4096 0x1000 0.976072 5120 0x1400 0.976734 6144 0x1800 0.976861 7168 0x1C00 0.972385 8192 0x2000 0.972518 ...

注意: 使用する場合python APIエントロピー分析を呼び出すには、グラフィック(–nplot)を無効にして、スクリプトが途中で終了しないようにする必要があります。

エントロピーグラフをPNGファイルとして保存し、表示しない(-J,--save

$ binwalk --save -E firmware.bin

検索文字列-R, --raw=

検索文字列には、エスケープされた8進数および/または16進数の値が含まれます。
カスタムの生のバイトシーケンスを検索する必要がある場合は、このオプションを使用できます。



$ binwalk -R 'x00x01x02x03x04' firmware.bin DECIMAL HEX DESCRIPTION ------------------------------------------------------------------------------------------------------------------- 377654 0x5C336 Raw string signature

さまざまなCPUアーキテクチャの一般的な実行可能オペコードを検索します(-A, --opcodes

binwalk指定したファイルでさまざまなCPUアーキテクチャに共通の実行可能オペコードを検索できます。 注意: 一部のオペコードシグネチャは短いため、誤検知が発生しやすくなります。
ファイル内で実行可能コードを見つける必要がある場合、実行可能ファイルのアーキテクチャを決定する必要がある場合は、このオプションを使用できます。

$ binwalk -A firmware.bin DECIMAL HEX DESCRIPTION ------------------------------------------------------------------------------------------------------------------- 268 0x10C MIPS instructions, function prologue 412 0x19C MIPS instructions, function prologue 636 0x27C MIPS instructions, function prologue 812 0x32C MIPS instructions, function epilogue 920 0x398 MIPS instructions, function epilogue 948 0x3B4 MIPS instructions, function prologue 1056 0x420 MIPS instructions, function epilogue 1080 0x438 MIPS instructions, function prologue 1356 0x54C MIPS instructions, function epilogue 1392 0x570 MIPS instructions, function prologue 1836 0x72C MIPS instructions, function epilogue 2012 0x7DC MIPS instructions, function prologue 2260 0x8D4 MIPS instructions, function epilogue 2512 0x9D0 MIPS instructions, function prologue 2552 0x9F8 MIPS instructions, function epilogue

署名されたカスタムマジック署名ファイルを検索します(-m, --magic=

デフォルトファイルの代わりに代替マジック署名ファイルをロードします。

$ binwalk -m ./foobar.mgc firmware.bin DECIMAL HEX DESCRIPTION ------------------------------------------------------------------------------------------------------------------- 268 0x10C Foobar 412 0x19C Foobar 636 0x27C Foobar

「スマート」署名マッチングを無効にします(-b, --dumb

スマートシグニチャマッチングにより、他の有効なシグニチャが失われる可能性があります(たとえば、jump-to-offsetキーワードを使用)。

$ binwalk -b firmware.bin

偽旗を含むすべてを無効な結果として表示する(-I, --invalid

Binwalkは、有効な結果を無効な結果として誤ってラベル付けし、使用できる大量のガベージ出力を生成します。

$ binwalk -I firmware.bin

署名除外フィルター(-x, --exclude=

フィルタによって一致する署名はフィルタリングされません。フィルタは小文字の正規表現であり、複数のフィルタを指定できます。指定されたフィルターに一致するマジックシグニチャーの最初の行はまったくロードされないため、このフィルターを使用すると、シグニチャーのスキャン時間を短縮できます。不要または興味のない結果を除外するために使用されます。

$ binwalk -x 'mach-o' -x '^hp' firmware.bin # exclude HP calculator and OSX mach-o signatures

署名フィルター-y, --include=

フィルタによって一致したシグニチャをフィルタリングします。フィルタは小文字の正規表現であり、複数のフィルタを指定できます。指定されたフィルターに一致するマジックシグニチャーが最初の行にのみロードされるため、このフィルターを使用すると、シグニチャーのスキャン時間を短縮できます。特定のシグニチャまたはシグニチャタイプのみを検索する場合に役立ちます。

$ binwalk -y 'filesystem' firmware.bin # only search for filesystem signatures

逆アセンブリコードのCPUアーキテクチャを特定します(-Y, --disasm

use capstone逆アセンブラは、ファイルに含まれている実行可能コードのCPUアーキテクチャを認識します。
このスキャンを使用して指定します--verbose分解された指示は個別に印刷されます。
通常は--opcodesよりも優れています。実行される単純な署名分析はより堅牢ですが、サポートされるアーキテクチャは少なくなります。

$ binwalk --disasm firmware.bin DECIMAL HEXADECIMAL DESCRIPTION -------------------------------------------------------------------------------- 428 0x1AC MIPS executable code, 32/64-bit, little endian, at least 750 valid instructions

逆アセンブル結果の連続命令の最小数を設定します(-T, --minsn

–disasm結果が有効になるように連続する命令の最小数を設定します。デフォルトは500命令です。

$ binwalk --minsn=1200 -Y firmware.bin DECIMAL HEXADECIMAL DESCRIPTION -------------------------------------------------------------------------------- 428 0x1AC MIPS executable code, 32/64-bit, little endian, at least 1250 valid instructions

分解結果は継続的に実行されます(-k, --continue

手順-disasmは最初の結果で停止しません:

$ binwalk --continue -Y firmware.bin DECIMAL HEXADECIMAL DESCRIPTION -------------------------------------------------------------------------------- 428 0x1AC MIPS executable code, 32/64-bit, little endian, at least 1250 valid instructions 1048576 0x100000 MIPS executable code, 32/64-bit, little endian, at least 1250 valid instructions ...

–entropy(-Q, --nngend)によって生成されたエントロピーマップの凡例を無視します

$ binwalk --entropy -Q firmware.bin

グラフィックエントロピープロットの禁止–エントロピースキャン(-N, --nplot

$ binwalk --entropy -N firmware.bin

立ち上がりエッジのエントロピートリガーレベルを設定します(-H, --high=

–entropyとともに使用した場合にのみ有効です。指定する値は0から1の間でなければなりません。

$ binwalk --entropy -H .9 firmware.bin

立ち下がりエッジのエントロピートリガーレベルを設定します(-L, --low=

–entropyとともに使用した場合にのみ有効です。指定する値は0から1の間でなければなりません。

$ binwalk --entropy -L .3 firmware.bin

16進数のバイトカラー出力(-W, --hexdump

緑-これらのバイトはすべてのファイルで同じです
赤-これらのバイトはすべてのファイルで異なります
青-これらのバイトは一部のファイルでのみ異なります
任意の数の任意のファイルを指定できます。その他の便利なオプションは、–block、-offset、-length、および–terseです。

$ binwalk -W --block = 8 --length = 64 firmware1.bin firmware2.bin firmware3.bin

注意: ほとんどのユーティリティをインストールするためにページ出力が必要な場合は、カラー出力のページ付けをより適切にサポートします。
–hexdump green行のバイト中にのみ表示されます:

$ binwalk -W --green firmware1.bin firmware2.bin firmware3.bin

–hexdump red行のバイト中にのみ表示されます:

$ binwalk -W --red firmware1.bin firmware2.bin firmware3.bin

–hexdump blue行のバイト中にのみ表示されます:

$ binwalk -W --blue firmware1.bin firmware2.bin firmware3.bin

署名スキャン中に識別されたファイルを抽出します(-D, --dd=

抽出-署名スキャン中に識別されたファイル。複数の-ddオプションを指定できます。
タイプは署名の説明に含まれています 小文字 文字列(正規表現をサポート)
extは、データディスクを保存するときに使用されるファイル拡張子です(デフォルトはnone)
cmdは、データをディスクに保存した後に実行されるオプションのコマンドです。
デフォルトでは、署名自体に代替ファイル名が指定されていない限り、ファイル名は検出された署名の16進オフセットです。
次の例は、–ddオプションを使用して、ファイル拡張子が「zip」の文字列「ziparchive」を含む署名を抽出し、「unzip」コマンドを実行する抽出ルールを指定する方法を示しています。また、PNG画像は「png」ファイル拡張子でそのまま抽出されます。
'%e'プレースホルダーが使用されることに注意してください。 unzipコマンドが実行されると、このプレースホルダーは抽出されたファイルへの相対パスに置き換えられます。

$ binwalk -D 'zip archive:zip:unzip %e' -D 'png image:png' firmware.bin

署名スキャン中に抽出されたファイルを再帰的にスキャンします(-M, --matryoshka

–extractまたは–ddを使用した場合にのみ有効です。

$ binwalk -e -M firmware.bin

データを抽出するための出力ディレクトリを設定します(-C, --directory=

デフォルト:現在の作業ディレクトリ
使用する場合、–extractまたは–ddオプションにのみ適用されます。

$ binwalk -e --directory = / tmp firmware.bin

制限–マトリョーシカ再帰の深さ(-d, --depth=

制限–マトリョーシカ再帰の深さ。デフォルトでは、深さは8に設定されています。
–matryoshkaオプションでのみ機能します。

$ binwalk -Me -d 5 firmware.bin

ターゲットファイルから分割されるデータのサイズを制限します(-j, --size=

デフォルトでは、サイズ制限はありません。
–extractまたは–ddを使用した場合にのみ有効です。
このオプションは、外部抽出ユーティリティによって抽出/解凍されるデータのサイズを制限しないことに注意してください。
ディスク容量が限られている大きなファイルからデータをスカルプトまたは抽出する場合に便利です。

$ binwalk -e --size=0x100000 firmware.bin

ゼロファイルと処理できないファイルをクリアします(-r, --rm

–extractまたは–ddを使用した場合にのみ有効です。
抽出中にターゲットファイルからコピーされた誤検知ファイルをクリアするために使用されます。

$ binwalk -e -r firmware.bin

データを書き込みますが、データを自動的に抽出/解凍しません(-z, --carve

–extractまたは–ddを使用した場合にのみ有効です。

$ binwalk -e --carve firmware.bin

暴力は、元の収縮圧縮データストリームを識別します(-X, --deflate

破損/変更/欠落したヘッダーを持つファイルからデータを回復するために使用されます。 –lzmaと組み合わせて使用​​できます。
このスキャンは遅くなる可能性があるため、–offsetや–lengthを使用してスキャン領域を制限すると便利です。

$ binwalk --deflate -o 0x100 -l 10000 firmware.bin

暴力は元のLZMA圧縮データストリームを識別します(-Z, --lzma

破損/変更/欠落したヘッダーを持つファイルからデータを回復するために使用されます。 –deflateと組み合わせて使用​​できます。
LZMA圧縮オプションの数が異なるため、このスキャンは非常に遅くなる可能性があるため、–offsetや–lengthを使用してスキャン領域を制限すると便利です。

$ binwalk --lzma -o 0x100 -l 10000 firmware.bin

圧縮ストリームを検索するための一般的な圧縮オプション(-P, --partial

–lzmaスキャンの速度を大幅に向上させることができます。

$ binwalk --partial -Z -o 0x100 -l 10000 firmware.bin

最初の結果までスキャンした後、停止します(-S, --stop

–lzmaおよび/または–deflateオプションと一緒に使用すると、最初の結果が表示された後、スキャンが停止します。

$ binwalk --stop -Z firmware.bin

ターゲットファイルで分析するバイト数を設定します(-l, --length=

$ binwalk --length=0x100 firmware.bin

開始オフセットを設定します(-o, --offset=

開始オフセットを設定して、ターゲットファイルの分析を開始します。負のオフセット(ファイルの終わりからの距離)を指定することもできます。

$ binwalk --offset=0x100 firmware.bin

すべてのプリントオフセットのベースアドレスを設定します(-O, --base=

この値は、すべての印刷結果の元のファイルオフセットに追加されます。

$ binwalk --base=0x80001000 firmware.bin

分析中に使用するブロックサイズを設定します(-K, --block=

分析中に使用されるブロックサイズ(バイト単位)を設定します。
を--entropyとともに使用すると、エントロピー分析中に分析される各ブロックのサイズが決まります。
–hexdumpと一緒に使用すると、16進出力の1行あたりに表示されるバイト数が設定されます。

$ binwalk --diff -K 8 firmware1.bin firmware2.bin

スキャンする前にnバイトを反転します(-g, --swap=

$ binwalk --swap=2 firmware.bin

スキャン結果は指定されたファイルに記録されます(-f, --log=

–csvが指定されていない限り、ログファイルに保存されるデータは端末に表示されるデータと同じになります。
–quietが指定されている場合でも、データはログファイルに保存されます。

$ binwalk --log=binwalk.log firmware.bin

ログデータはCSV形式で保存されます(-c, --csv

–castまたは–hexdumpとともに使用する場合、このオプションは無視されます。
–logオプションと組み合わせて使用​​した場合にのみ有効です。

$ binwalk --log=binwalk.log --csv firmware.bin

フォーマット出力はターミナルウィンドウ幅に適応します(-t, --term

出力を読みやすくします。

$ binwalk --term firmware.bin DECIMAL HEX DESCRIPTION ------------------------------------------------------------------------------------------------------- 0 0x0 DLOB firmware header, boot partition: 'dev=/dev/mtdblock/2' 112 0x70 LZMA compressed data, properties: 0x5D, dictionary size: 33554432 bytes, uncompressed size: 3805904 bytes 1310832 0x140070 PackImg section delimiter tag, little endian size: 15741184 bytes big endian size: 3272704 bytes 1310864 0x140090 Squashfs filesystem, little endian, version 4.0, compression:lzma, size: 3268870 bytes, 1860 inodes, blocksize: 65536 bytes, created: Mon Apr 22 04:56:42 2013

stdoutへの出力を無効にします(-q, --quiet

–logまたは–entropyなどの詳細スキャンとともに使用すると最も便利です。

$ binwalk --quiet -f binwalk.log firmware.bin

ターゲットファイルMD5とスキャンタイムスタンプを含む詳細出力を有効にします(-v, --verbose

2回指定した場合、–extractも指定した場合、外部抽出ユーティリティの出力が表示されます。

$ binwalk --verbose firmware.bin Scan Time: 2013-11-10 21:04:04 Signatures: 265 Target File: firmware.bin MD5 Checksum: 6b91cdff1b4f0134b24b7041e079dd3e DECIMAL HEX DESCRIPTION ------------------------------------------------------------------------------------------------------------------- 0 0x0 DLOB firmware header, boot partition: 'dev=/dev/mtdblock/2' 112 0x70 LZMA compressed data, properties: 0x5D, dictionary size: 33554432 bytes, uncompressed size: 3805904 bytes 1310832 0x140070 PackImg section delimiter tag, little endian size: 15741184 bytes big endian size: 3272704 bytes 1310864 0x140090 Squashfs filesystem, little endian, version 4.0, compression:lzma, size: 3268870 bytes, 1860 inodes, blocksize: 65536 bytes, created: Mon Apr 22 04:56:42 2013

指定された正規表現文字列(-a, --finclude=)と名前が一致するファイルをスキャンします

–matryoshkaおよび–extractと組み合わせると

$ binwalk -M -e --finclude='.bin$' firmware.bin

指定された正規表現文字列(-p, --fexclude=)と名前が一致するファイルをスキャンしないでください

–matryoshkaおよび–extractと組み合わせると

$ binwalk -M -e --fexclude='.pdf$' firmware_archive.zip

指定されたポート番号(-s, --status=)でステータスサーバーを有効にします

状態サーバーはローカルホストのみをリッスンし、現在のスキャン状態に関連する人間が読み取れるASCIIデータを出力します。 telnet、netcatなどを使用して接続できます。

$ binwalk --status=8080 firmware_archive.zip

総括する

binwalkには、IDAで動作するpython APIなどの多くの機能があり、フォレンジック、リバースファームウェア、CTFなどの効率を大幅に向上させることができる実用的なアプリケーションには多くのトリックがあります。もちろん、問題もたくさんありますので、子供靴も大歓迎です。issue
最初に始まった アンヘンネットワークスペースセキュリティがウータンについて語る 公開番号にご注意ください!

ブログオリジナルリンク