難読化 (ソフトウェア)
ソフトウェアにおける難読化(英: obfuscation)とは、コンピュータプログラムの動作を変えずに、プログラムコードの内部的なサブルーチン(手続き)の内容・構造・データなどを、人間にとって読み取りにくくなるように改変・加工すること。難読化の対象はソースコードであったり、ソースコードから生成されるマシンコードまたはバイトコードなどの中間表現であったりすることもある。難読化されたコード(obfuscated code)は第三者によるプログラムの解読・解析が困難になる。
機械語は単なる数値の羅列であり、逆アセンブルすることは容易だが、解読には機械語やアセンブラの知識が必要となり、また元のソースコードを復元(逆コンパイル)することは完全にはできないため、コードの意図まで読み取れるとは限らない。
リフレクションのサポートなどの目的で、コンパイル時にシンボル情報をメタデータとして保存する言語や処理系の場合、逆コンパイルによって元のソースコードを復元しやすいため、特にプロプライエタリな商用ソフトウェアでは、難読化によってリバースエンジニアリングを阻止することが多い。通常、プログラミングの際はサブルーチンや変数といったコード上のシンボルには人間にとって分かりやすい名前を付けるが、それらの名前が分かるだけでも解析がかなり容易になるため、そういったシンボルの名前を難読化ツールによって意味のないものに置換するだけでも一定の効果が望める。