解説ねえ智也、この論文のタイト…
TL;DR
本論文は、ストリップされたバイナリ関数から元のソースコードを復元する実用的なパイプラインを提案。Ghidraで抽出した文字列・定数・外部呼び出しなどのアンカーを用いてソースコードデータベースを検索し、候補をLLMで再ランキングする。高品質なデータベースでは命令カバレッジ95.2%を達成。
解説
ねえ智也くん、この論文のタイトル見てびっくりしたよ。バイナリ関数からソースコードを復元するって、まるで魔法みたいじゃない?
確かに面白いテーマだね。でも魔法じゃなくて、ちゃんとしたパイプラインなんだ。ストリップされたバイナリ、つまりデバッグ情報が削除された実行ファイルから元のソースを推測するんだよ。
ストリップって何?なんかおしゃれな響きだけど。
バイナリから関数名や変数名などのシンボル情報を削除することだよ。リバースエンジニアリングを難しくするためにやられるんだ。
なるほど。で、どうやって復元するの?
まずGhidraっていうリバースエンジニアリングツールでバイナリからアンカーを抽出するんだ。アンカーっていうのは、文字列リテラルや定数値、外部関数呼び出しみたいな、ソースコードの手がかりになる要素のこと。
ああ、それでソースコードデータベースを検索するんだね。
そう。アンカーを使って似たような関数をデータベースから探す。そして候補をLLMで再ランキングして、最も適切なソースコードを選ぶんだ。
LLMってChatGPTみたいなやつ?それでランキングするんだ。賢いね。でも、どれくらい正確なの?
高品質なデータベースを使った場合、命令カバレッジ95.2%を達成してる。つまり、復元されたコードが元のバイナリの命令の95%以上をカバーできてるってこと。
すごい!でも、データベースの質が悪いとどうなるの?
そこが課題だね。データベースが不完全だと精度が落ちる。あと、未知の関数や複雑な最適化が施されたバイナリだと難しい場合もある。
なるほどね。でも、セキュリティとかレガシーコードの解析に役立ちそうだね。
そう。マルウェア解析や、古いソースコードが失われたシステムの復元にも使える。実用的な価値は高いよ。
でもさ、もしこの技術が完璧になったら、プログラマーがバイナリを書くだけで自動でソースコードが生成されるようになる?それって楽だけど、仕事がなくなりそうで怖いなあ。
それはさすがに誇張しすぎだよ。あくまで復元であって、創造的な開発は人間にしかできないから。