レシピ

javascript-obfuscator を組み込む際によく直面する問題について、方針を示しながらエンドツーエンドで解説します。各レシピは個々のフラグを説明するのではなく、特定の目的を達成するためにオプションをどう組み合わせるかに焦点を当てています。

解決したい問題に合ったレシピを選んでください。レシピは今後も追加していく予定です。ここで扱われていない組み込みのシナリオに遭遇した場合は、ぜひお知らせください。記事として取り上げます。

このセクションの内容

ベストプラクティス

何を保護し、何をそのままにすべきか、そして難読化にできないことは何かを解説します。

バックエンドからバイトコード配列キーを取得する

読み込み時にバックエンドからキーを取得する非同期キーゲッターを使い、VM バイトコードの復号キーをクライアントに置かないようにします。

ホスト側でのテンプレート置換

reservedNames と reservedStrings を使って、サーバーでレンダリングした値を VM 難読化された JavaScript に埋め込みます。

LLM の解析から関数名を隠す

VM 難読化されたコードが意味のある関数名を LLM に漏らしてしまう理由と、IIFE でラップしてその漏洩をなくす方法です。

VM 実行時エラーの診断

「Invalid array length」のような VM 実行時エラーについて、対象指定やセルフディフェンディングの設定ミスと本当の不具合を切り分けるための手順チェックリストです。

識別子の衝突を避ける

VM 難読化した複数のファイルをバンドルするとパース時に「Identifier already declared」が発生しうる理由と、ランダムまたは 16 進数の識別子で解決する方法です。

eval と new Function を含むコードの VM 難読化

VM 難読化が直接 eval と Function コンストラクタの呼び出しをどう扱うか、何がバイトコード化され何がスキップされるか、難読化ツールが出力する警告、そして実行時の ReferenceError を診断する方法です。

VM 防御のテレメトリと応答

vmDefenseHook を使って VM の防御検知をバックエンドに報告し、vmDefenseReaction で検知カテゴリごとの応答を調整します。