難読化 【obfuscation】

概要

難読化(obfuscation)とは、プログラムコードの動作を変えずに、人間に読み取りにくくなるような改変、加工をうこと。実行環境ソースコードが持ち込まれるスクリプト言語でよくわれる。

コンピュータプログラムの多くは人間が理解しやすいプログラミング言語によってソースコードとして記述され、これを言語処理系がコンピュータで直に解釈できるオブジェクトコードに変換してから実行される。

多くのソフトウェアは変換後の機械語などで記述されたプログラムとして実行環境に提供されるため、これを開発時に書かれた元のソースコードに戻すことは原則としてできない(命令の流れやアルゴリズムなどを断片的に割り出すことはできる場合がある)。

しかし、Webブラウザに読み込んだWebページ上で実行されるJavaScriptプログラムなどは、ソースコード実行環境に持ち込んでから解釈と実行われるため、外部に公開したくないシステム上の詳細な仕様などの一部がソースコード上の記述として「筒抜け」になってしまう。

このような場合に、プログラムの動作の実質は変えず、動作に直接影響しない情報を削除したり、コードを人間が理解しにくい形に変換する処理を難読化という。コンピュータにとっては同じ挙動を指示しているため、実行すると元のソースコードとまったく同じように動作する。

簡単な手法としては、改行空行インデントなど「読みやすさ」のために挿入された要素を取り去る、変数名関数名などのラベル(要素の名前)をすべて自動生成した意味ない文字列で置き換える、文字列リテラル文字コードなど文字そのもの以外の方法で表記するといった方法がある。

また、元のコードと異なる動作を追加する手法もあり、無意味な条件式や計算命令、例外処理などを挿入する、重要箇所を一定の変換ルールでプログラムではない符号列に変換し、実行時動的復元してから実行するといった方法がある。これらは実質的な振る舞いは元のコードと同じになるが、元は存在しない処理が追加されるため、実行時間などは厳密には一致しなくなる。

難読化によって要素名などの情報は不可逆に失われ、他のシステムへの流用や動作の一部の改変、リバースエンジニアリングなどをいにくくする効果がある。しかし、コードう処理の内容は変わっておらず、完全に詳細を秘匿することはできない。コンピュータウイルスなどの中には対策ソフトによる検知を免れるために自身の難読化をうものもある。

(2020.10.31更新)

他の辞典による解説 (外部サイト)

この記事の著者 : (株)インセプト IT用語辞典 e-Words 編集部
1997年8月より「IT用語辞典 e-Words」を執筆・編集しています。累計公開記事数は1万ページ以上、累計サイト訪問者数は1億人以上です。学術論文や官公庁の資料などへも多数の記事が引用・参照されています。
ホーム画面への追加方法
1.ブラウザの 共有ボタンのアイコン 共有ボタンをタップ
2.メニューの「ホーム画面に追加」をタップ
閉じる