2008年11月4日火曜日

デコンパイル、リバースエンジニアリング

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
世の中、いろいろな人がいるものだ。


といっても,復元不可能とわかっている情報 (コメントやローカル変数名など)についてはスッパリあきらめて,復元可能な情報をいかに読みやすい形で表示するか (元通りでなくても読みやすければよい) という目標にすり替えます.

まさにそれなんだけど。今やろうとしている解析の対象のバイナリは、元の言語がCですらない。

解析としては、

  • 関数引数がわかる。

  • ループ変数がわかる。

  • 短絡評価を消すことができる


とかでもかなり大きい。fragmentをつなぎあわせるのが楽になるからだ。

すべてを解析したいわけではない(興味のあるのはアルゴリズムとかファイルフォーマットであるケースがほとんどのはず)ので、絞込みを効率化することも大事。
ジャンルによってはfloatがらみのコードが出てくる関数かどうかを判定するだけでも違う。普通はUIにはfloat演算は出てこないからだ(MacのQuartzは違うだろうが)。
ただ、GUIは普通、APIをCallするので、その周辺を捨てることはできる。逆にFile Formatはfileを読み書きするAPIから切り崩すことになる。

0 件のコメント: