« 刻命館。 | Main | 車を点検に出す。 »

2006年09月21日(木)

Re birth

普通のプログラムは、どの言語で開発されて、どういうふうなソースコードから実行ファイルが作成されたかを完璧に推理するのは結構難しい。ところが、Javaは実行ファイルに相当するクラスファイルにメソッドやフィールドの名前、行番号といった情報が含まれており、完全にソースコードを復元できる。いろんなソフトを逆コンパイルしてそのアルゴリズムを盗み見てみたり。そういう行儀の悪いことをされないために、逆コンパイルがしにくくなるようなツールもあったりする。このツールを使うとメソッド名やフィールド名が全部oooOooとかoOoOOOoとかに置き換わって非常に読みづらくなる。で、今日あるソフトを戯れに逆コンパイルしてみたら、こんなコードが出てきた。

 if (str == null) {
; // 省略でなく、ホントに何も書いてないブロック
} else if (str.equals("abc") {

こう書けば1行で済む。気持ち悪いコードだ。

 if ("abc".equals(str)) {

大抵の市販ソフトが使用許諾でリバースエンジニアリングを禁じているのは、こういった悪さをされて汚いコードを暴露されるのを防ぐため、というのはよくある冗談だが、少しはそういう効果もあるのかもしれない。

Posted by awa at 24:22.38
Categories: 雑記