難読化 | Programming Place Plus 用語集

トップページ用語集

名称

解説

人間が理解することが難しくなるように、ソースコードの内容を、その意味を変えずに加工することです。

難読化することで、ソースコードの各部分の意味や目的を理解しづらくして、リバースエンジニアリングを行いづらくする意味があります。

ソースコードをネイティブコードに変換して公開・配布できる場合は、そもそもソースコードの状態に戻すことは難しいため、必要性はあまりありませんが、スクリプト言語のように(例外もあるが)、ソースコードの形式のままで公開・配布して実行する形式の場合には必要性もあります。たとえば、Webページに仕込まれ、Webブラウザで実行する JavaScript のソースコードは、Webブラウザの機能を使って簡単に閲覧できるため、あまり堂々と公開したくないソースコードを隠す意味があります(ただし、セキュリティ面での安全性を検証しづらくなるという理由から、歓迎されないこともある)。

当然、難読化しても、元の動作が維持されていなければならないので、実行結果や実行中の挙動から、元のソースコードを推測することはある程度は可能なままです。また、読みづらいだけであって、ソースコードが見えている以上、読めないわけではないので、解読を完全に防ぐ効果はなく、解読者に大きな労力を強いる程度の意味しかありません。

難読化のごく単純な手法は、通常ならソースコードの可読性の向上のために行われるべき各種の施策をあえて崩すことです。たとえば、インデントを統一する、わかりやすい名前を付ける、マジックナンバーを避ける、適宜コメントを入れて補足する、といったことが該当します。インデントを滅茶苦茶にして、理解不能な名前に置き換え、マジックナンバーをばらまき、コメントは一切残さないといった加工をすると、難読化になります。このような加工は、まずはまともなソースコードを書いてから、ツールを使って行います。ちなみに、難読化を目的とせずにこのようなソースコードが書かれたとすると、それはスパゲッティコードと呼ばれる、単純に品質の悪いソースコードということになります。


参考リンク

更新履歴


用語集のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る