バイナリファイルを視覚化!解析効率を劇的に上げる方法
Visual Analysis of Binary Files
Visual Analysis of Binary Files
バイナリファイルの中身を人間が読み解くのは至難の業ですが、視覚的に解析することでパターンや構造を直感的に把握できるようになります。この手法を活用すれば、リバースエンジニアリングやセキュリティ分析のスピードが飛躍的に向上します。
なかなか面白いね。HDDがカタカタ鳴る音を聞いていた頃や、大昔にコンピュータ内の電磁波干渉(EM interference)の音を聞けていた頃のことをふと思い出したよ。カウボーイビバップのエピソードで、メカニックがレンチをエンジンカウリングに当てて振動を確認するシーンがあったけど(実際のエンジンでもやるのかな?)、エンタープライズD号のコンピュータ音や点滅するインジケーター(blinkenlights)もそうだし、結局これらも「データを人間が知覚できる形に変換する」という点では同じだよね。実用的な価値がすぐにあるかは分からないけど、こういうの結構好きだな。
見た目はかっこいいけど、クラスタリングの仕組みとか、なぜ広い範囲に均一な色が割り当てられるのか(例えばPDFの例での青色とか)がいまいち分からない。
懐かしい!93年にMS-DOS向けで似たような(もっと単純な)ツールを書いてたよ。バイナリファイルを調査して抽出するためのGFVっていうやつで、今でもHornetアーカイブのどこかでダウンロードできるはず(https://www.hornet.org/cgi-bin/ha_search.cgi?opt_s=5:Iguana )。ストライド(幅)を指定して1/nバイトを表示できるようにしてたから、ゲームファイルや実行中のメモリダンプからテクスチャを見つけるのが比較的楽だったな。
その均一さっていうのは、ファイルが空間的に非効率で、圧縮した方がいいってことを示唆しているのかな?
C言語を学んでた時に自分でもバイナリビジュアライザを作ったことがあるよ。forループでファイル内のバイト値を基にピクセルをセットしてテクスチャを生成するやつだった。モノクロ(ビット単位)とグレースケール(バイト単位)の2モードがあったんだけど、面白いことにバッファオーバーフローを起こして、自分のプログラムが自分自身のメモリを可視化しちゃったんだよね。あと、テラリアのクローン(2Dマインクラフトみたいなやつ)を作ろうとしてた時にも似たようなミスがあって、地形の描画がマウス座標をブーリアンか何かとして解釈しちゃったことがあった。C言語って楽しいよね!
私もClickHouseの中にビジュアライザを組み込んでバイナリを分析できるようにしたよ:https://play.clickhouse.com/binary?user=binary どのコードが場所を取りすぎているか、どの依存関係が大きすぎるか、あるいはどのテンプレートインスタンス化が肥大化しているかを確認できるんだ。
数日前の議論で、他にも可視化ツールのリンクがいくつか上がっていたよ:https://news.ycombinator.com/item?id=49423878
全く同じものじゃないけど、https://runhexed.com を使えばオンラインでバイナリの可視化ができるよ。