難読化 (ソフトウェア)
おおよそ2つのいずれかの目的のため、プログラマのコーディング、専用アプリケーション、または開発ツールの補助機能によって、ソースコードや実行コードに対して故意にロジックやデータなどの難読化、曖昧化が施される。
コードの目的を隠蔽したり(難解さに基づくセキュリティ(英語版)を参照)、改竄(タンパリング)やリバースエンジニアリングを阻止したりするため。
コードを解読する者の腕試しのためのパズルや娯楽として。
コード難読化はハードウェアの曖昧化(英語版)とは本質的に異なっており、後者は電子回路の配置、構造を機能隠蔽を目的として改変することを意味する。
いくつかのプログラミング言語は、他の言語に比べ、その構造や性質により、難読化が容易なものもある。C言語、C++、Perlはその一例である。
一般に、ソフトウェアの実行にソースコードが必要となるスクリプト言語は解析が容易だが、コンパイラによって機械語を生成する言語は、そのコード変換過程の不可逆性により解析が難しい。