Day042 - 生成AIで作るセキュリティツール100
Classic JS Obfuscator は、古典暗号(シーザー暗号)で暗号化されたJavaScriptスニペットを生成するWebツールです。 復号関数+eval
を同梱しているため、自己復号・自己実行可能な JavaScriptスニペットになります。
UIは2つのタブ構成になっており、現在はシーザー暗号版が実装済み、ビジュネル暗号版は未実装です。
👉 https://ipusiron.github.io/classic-js-obfuscator/
サンプルコードの難読化を開発者ツールで確認
- シーザー暗号による暗号化: ASCII可視範囲(32–126)でシフト暗号化
- 自己復号スニペット生成: 復号関数と暗号化済みペイロードを同梱したIIFE形式
- シフト量設定: 0〜94の範囲で暗号化強度を調整可能
- 出力コード:
<script>
タグでそのまま利用可能
- 比較モード: 元コードと暗号化後のコードを横並びで表示
- ダークモード/ライトモード: 目に優しいテーマ切り替え
- チュートリアル: 初心者向けのステップバイステップガイド
- ヘルプモーダル: 詳細な使い方とセキュリティ情報
- トースト通知: コピー成功など操作結果の非侵襲的な通知
- その場でテスト実行: 生成されたコードの動作確認
- ワンクリックコピー: クリップボードへの瞬時コピー
- ダウンロード機能:
.js
ファイルとしての保存 - レスポンシブデザイン: モバイル・デスクトップ両対応
- 入力バリデーション: リアルタイムでのエラーチェック
- 完全クライアントサイド: サーバーへのデータ送信なし
- 明確な警告表示: eval使用時の注意喚起
- 教育目的設計: セキュリティリスクの明示
- コード入力: 「元コード」欄に暗号化したいJavaScriptを入力
- シフト量設定: 0〜94の範囲でシーザー暗号のシフト量を指定(デフォルト値は3)
- 暗号化実行: 「難読化コードを生成」ボタンをクリック
- 結果活用: 生成されたコードを「コピー」「保存」「テスト実行」
- 比較モード: 「🔀 比較モード」ボタンで元コードと暗号化後のコードを横並び表示
- テーマ切り替え: ヘッダーの 🌙/☀️ ボタンでダークモード/ライトモード切り替え
- ヘルプ参照: 「📖 ヘルプ」ボタンで詳細な使い方とセキュリティ情報を表示
- チュートリアル: 「❓ チュートリアル」ボタンで6ステップのガイドツアー
ツールを開くと、入力欄にサンプルコードが自動的に表示されます。そのまま使って動作を確認できます:
// サンプル:ページに "Hello Obfuscation!" を表示 console.log("Hello Obfuscation!"); document.body.insertAdjacentHTML("beforeend", "<div style=\"...\">✅ 実行されました</div>");
実験手順:
- サンプルコードが入力欄に表示されていることを確認
- シフト量はデフォルトの「3」のまま
- 「難読化コードを生成」ボタンをクリック
- 出力欄に暗号化されたコードが表示される(文字化けしたような見た目)
- 「この場で実行(テスト)」ボタンをクリック
- ページ下部に「✅ 実行されました」と表示され、コンソールに「Hello Obfuscation!」が出力される
生成されるコードの例(シフト量3の場合):
(function(){ const d = function(t,s){...}; // 復号関数 const enc = "22#Vdpsoh=..."; // 暗号化されたペイロード const sft = 3; // シフト量 const dec = d(enc, sft); // 復号処理 eval(dec); // 実行 })();
- 本ツールは秘匿ではなく難読化(可読性低下)を目的とした教材です。
- 生成物は最終的に復号されて実行されるため、静的解析で元コードは再現可能です。
- 文字処理は ASCII 32–126 を対象とし、その他コードポイントはそのまま通します(日本語等は未シフト)。
本ツールは eval()
を使用してコードを実行する機能を含んでいますが、以下の理由により安全に公開可能です。
-
完全にクライアントサイドで動作
- サーバーへのデータ送信は一切行いません
- 他のユーザーに影響を与えることはありません
- ローカルストレージやCookieへの保存も行いません
-
Self-XSSのみ(他者への攻撃は不可能)
- ユーザーが自分で入力したコードを自分のブラウザで実行するだけです
- 悪意のあるコードを他者に実行させる仕組みはありません
- URLパラメーター等による外部からのコード注入もできません
-
明確な警告表示
- 実行機能の使用時には警告が表示されます
- ユーザーの意図的な操作(ボタンクリック)でのみ実行されます
教育・学習目的のツールとして、JavaScript難読化の仕組みを理解するための安全な環境を提供しています。
本ツールで使用されている技術の詳細解説と、セキュリティの観点からの考察については以下をご覧ください:
- シーザー暗号の実装詳細
- 自己復号スニペットの構造
- 攻撃者の悪用手法と対策
- 防御側の検知技術
- セキュリティ研究者への提言
- ✅ シーザー暗号による暗号化
- ✅ 比較モード(横並び表示)
- ✅ ダークモード/ライトモード切り替え
- ✅ チュートリアル機能
- ✅ ヘルプモーダル
- ✅ トースト通知
- ✅ 入力バリデーション
- ✅ レスポンシブデザイン
- ✅ コンソールログ強化
以下は、今後の拡張や改良のアイデアです。
-
複数暗号方式対応
Vigenère暗号、XOR暗号、RailFence暗号など古典暗号を追加して選択可能にする。 -
多段暗号化
「Caesar → Base64 → XOR」など複数方式を組み合わせて解析難度を上げる。 -
鍵の難読化
鍵をソースに直接埋め込まず、ランタイム生成や別ファイル・環境変数から取得する方式。 -
Unicode対応
日本語や絵文字を含むコードを安全に暗号化/復号できるようにする。 -
変数名・関数名の難読化
文字列リテラルだけでなく識別子も置換し、構造的な難読化を実現。 -
CLI版・Node.js対応
コマンドラインからコードファイルを暗号化し、復号実行するツールとして利用可能にする。
classic-js-obfuscator/ ├── index.html # メインのHTMLファイル(UIレイアウト) ├── script.js # Caesar暗号化/復号化ロジックとUI制御 ├── style.css # スタイルシート(ダークモード/ライトモード対応) ├── CLAUDE.md # Claude Code用のプロジェクト説明 ├── README.md # このファイル(機能説明・使い方) ├── SECURITY.md # 技術解説・セキュリティガイド ├── LICENSE # MITライセンス └── assets/ # 画像等のアセット └── screenshot.png
MIT License - 詳細は LICENSE をご覧ください。
本ツールは、「生成AIで作るセキュリティツール100」プロジェクトの一環として開発されました。
このプロジェクトでは、AIの支援を活用しながら、セキュリティに関連するさまざまなツールを100日間にわたり制作・公開していく取り組みを行っています。
プロジェクトの詳細や他のツールについては、以下のページをご覧ください。