Javascriptの難読化が陳腐化した件について

Javascriptの難読化は意味がない件について
Javascriptの難読化は意味がない件について

Javascriptにおける難読化(Obfuscation)は、ソースコードの保護手段として用いられてきた技術というか手法である。

変数名や関数名を無意味な記号に置き換え、処理の流れを複雑にし、第三者による理解や再利用を妨げることが目的だった。

しかし現在、その意義はもはや陳腐化してしまった。

なぜなら、ChatGPTのような大規模言語モデル(LLM)により、難読化されたコードであっても容易に解読・再構築が可能となったためである。

難読化コードはAIによって即座に読み解かれる例

たとえば次のようなコードを難読化する。

(function(x) {
  x.alert('Hello!');
})(window);

難読化には以下のようなサイトがあるので、これを利用する。

JavaScript Obfuscator Tool

function _0x562f(_0x45ba1c,_0x5d5e71){var _0x15f1cf=_0x15f1();return _0x562f=function(_0x562fda,_0x4a9385){_0x562fda=_0x562fda-0x161;var _0x518658=_0x15f1cf[_0x562fda];return _0x518658;},_0x562f(_0x45ba1c,_0x5d5e71);}(function(_0x35f5dd,_0x46cdc0){var _0x1d275c=_0x562f,_0x5aea5b=_0x35f5dd();while(!![]){try{var _0x4a7e18=parseInt(_0x1d275c(0x168))/0x1+-parseInt(_0x1d275c(0x16b))/0x2*(-parseInt(_0x1d275c(0x169))/0x3)+-parseInt(_0x1d275c(0x165))/0x4*(parseInt(_0x1d275c(0x16a))/0x5)+-parseInt(_0x1d275c(0x162))/0x6+parseInt(_0x1d275c(0x166))/0x7*(-parseInt(_0x1d275c(0x167))/0x8)+-parseInt(_0x1d275c(0x164))/0x9+parseInt(_0x1d275c(0x161))/0xa;if(_0x4a7e18===_0x46cdc0)break;else _0x5aea5b['push'](_0x5aea5b['shift']());}catch(_0x3b3e84){_0x5aea5b['push'](_0x5aea5b['shift']());}}}(_0x15f1,0xf1dc2),function(_0x1efbc0){var _0x3d1c60=_0x562f;_0x1efbc0[_0x3d1c60(0x163)]('Hello!');}(window));function _0x15f1(){var _0x3f9a5f=['1635389dPNSph','40IqoAmU','631079oAfxaV','79650pVCXpf','45sisUCF','18EKJeZZ','31090940UQiXgB','2827008PdAJpz','alert','10356165OuDPIu','88212IfhkLG'];_0x15f1=function(){return _0x3f9a5f;};return _0x15f1();}

このコードは一見して意味不明であるが、ChatGPTに解析を依頼すれば、即座に次のような元の形に戻される。

window.alert('Hello!');

文字列のエスケープや非論理的な変数命名などは、ChatGPTにとって何ら障害ではなく、コードの目的・構造・挙動がすべて可視化されてしまう。

さらに、コードが何をしているのか、ChatGPTが懇切丁寧に教えてくれるのである。

セキュリティ対策としての効果は皆無

Javascriptの難読化は、主に転用を防止するためにコードの保護ことだろう。

元々Javascriptはクライアントサイドで実行される言語であり、ソースコードを完全に秘匿することは不可能である。

難読化はあくまで可読性を下げるだけの措置にすぎず、今やその障壁すらChatGPTにより無力化されている。

なのでコードをどうしても秘匿したい場合は、フロントはトリガーにとどめ、ロジックや出力はサーバーで完結させるしかないだろう。

申し込む
注目する
guest

0 Comments
最も古い
最新 高評価
インラインフィードバック
すべてのコメントを見る