これを考えると、難読化にはいくつかの異なるタイプがあります。まず、ソースコードの難読化から始めましょう。これは時間の浪費です。それなしでは理解するのは難しいです!そこで、代わりに、配信パッケージの難読化、つまりコードがユーザーに配信される方法に焦点を当てましょう。
マイナー難読化
マイナーな難読化は、カジュアルなユーザーが指を突っ込んで物を簡単に壊すのを防ぐために存在します。それは決定的なハッカーを締め出しませんが、サポートするように求められているものがあなたが実際に提供したものであることを保証するのを助けるのに価値があります。この種のものに必要な保護のレベルは非常に低いです。配信パッケージが単にないために持って見て(専門家のツールなし)読み取りおよび編集可能な、それはかなり良い十分です。
Javascriptの縮小化はこの例ですが、そのように販売されていません。十分に決定された/永続的である場合に技術的に可能であるとしても、縮小されたJSファイルを読み、編集することを望んでいる人はいないでしょう。
同様に、Javaアプリケーションを配信する場合も同様です。コードを実行可能JARにパッケージ化するだけで、都市公園での「草の立入禁止」の丁寧な力がすべて備わっていても、大部分の愚かさを止めることができます。
C ++コードを配信する場合でも、実行可能ファイルから不要なシンボルを取り除くだけで、マイナー難読化と見なすことができます。重要なのは、ユーザーとして結果を読み取るのは面倒ですが、コンピューターとして実行するのに問題はないということです。
主な難読化
主な難読化は、決定的で知識豊富なユーザーを締め出すことです。また、完全に負けたゲームでもあります。コンピュータがそれを実行できるなら、人はそれをバラバラにして、それが何をするかを理解することができます。あなたが得ることができる最も近いのは、プログラムを継続的に復号化して、一度にそれが行うことを、別の時にそれを行う完全に異なるものに変換することです。そのようなものを作成することはかなり困難であり、それでも本当に優れたハッカーを締め出すことはできません(ただし、すべての自己変更コードを解読するのに必要な労力で、ハッカーの終わりまでに本当に完全にあなたと交差するでしょう)。
他のソリューションの観点から考える方がはるかに優れています。たとえば、制御するサーバーにコードの「宝石」を保持し、コードへのサービス呼び出しのみを許可することで、クライアントを本質的に無料のプレゼントとして、貴重なビットのフロントエンドにすることができます。または、より契約/法的手段を講じて、実行可能ファイルを正式にコード内をあちこちに持ち回らないことに同意する組織に引き渡すか、そうする場合は補償することもできます(そのため、ある種のNDAになります)。目的は、ハッカーがハッキングしないように強力なインセンティブを作成し、ユーザーが契約に拘束されないハッカーからコードを遠ざけることです。
ただし、コードがクラックされないことを想定してはなりません。仮想化を使用すると、実行のプログラム状態を検査および追跡できます。これを無効にしようとするもの(たとえば、外部のタイムソースへのクロック追跡)は、ハッカーよりも正当なユーザーに問題を引き起こす可能性が高くなります。(非常に断固とした情報の発行者でさえ、コードが相手の手に渡った後はシステムを安全に保つことができない方法については、DRMの歴史を参照してください。)実際に正当なユーザーを満足させることに集中する方がはるかに良いです。時折発生する亀裂による損失は、顧客を適切に満足させることによってもたらされる余分なお金に比べれば何もないでしょう。