難読化の目標

難読化の目標は、混乱を引き起こすことです。人間は、混乱が生じると、多面的な知的概念を理解する能力が低下します。これは、フォワード (実行可能) ロジックの変更について言及しているのではありません。そのロジックを理解不能にするだけです。適切に記述された難読化ツールを判読可能なプログラム命令に対して適用すると、その出力を人間が解釈できなくなるという副次的な効果が得られるだけでなく、逆コンパイラも機能しなくなります。フォワード (実行可能) ロジックは保持されたまま、リバース エンジニアリングの意味が決定的ではなくなっています。その結果、命令を C# や VB のような "プログラミング言語" にリバース エンジニアリングしようとすると、変換があいまいなために失敗します。厳重な難読化を行うと、逆コンパイルの可能性が無数になり、そのうちのいくつかを再コンパイルすると、間違ったロジックが生成されることになります。計算機械である逆コンパイラには、どれが正しい意味に再コンパイルされるかを認識する手段はありません。人間は、ロジックを追うのが非常にたいへんな逆コンパイル アルゴリズムを自動化するため、逆コンパイラを記述し、使用します。逆コンパイラを混乱させる難読化プログラムは、同じことを行おうとする逆コンパイラよりも能力が劣る人間に対して、効果があると言えます。

初歩的な難読化プログラムは、基本的にはコード内で見つかった識別子の名前を読み取ることができない名前に変更します。これらは、ハッシュ技法を使用するか、あるいは文字セットを判読できない文字または印刷できない文字に数学的に補正します。一見効果的ですが、これらは元に戻せる技法なので、これ自体では、ほとんど保護していないと言えます。PreEmptive の難読化ツールは、"混乱を引き起こす" 巧妙な方法を追加することにより、この初歩的な名前の変更方法を進化させています。この方法によって、他人の知的財産をリバース エンジニアリングすることがほぼ不可能になります (また、確かに努力する価値はありません)。

© 2002-2007 PreEmptive Solutions. All rights reserved.