piapia123
ja

JavaScript eval 圧縮コードの展開と再圧縮

エンコード

処理はすべてブラウザ内で完結します。データは送信されません

入力
ファイルをここにドロップすると読み込めます
出力

Dean Edwards の packer —— いわゆる `eval(function(p,a,c,k,e,d){…})` を扱います。ソース内で繰り返し現れる語(`function`、`document`、`length` など)を短い名前に置き換え、圧縮後の本文を1つの文字列として持ち、対応表を末尾に付けます。⚠️ 暗号化ではありません:鍵はなく、表はそのコードの中にあり、展開に追加情報は一切不要です。この形式は広く流通しており、多くのサイトが「軽い難読化」として使っていますが、実は最も容易に復元できるものの一つです。

機能

  • 展開:`eval(function(p,a,c,k,e,d){…})` を読めるソースに戻します
  • 圧縮:同じ形式を逆に生成。基数は 2〜62 で変更できます
  • ⚠️ すべて文字列処理で、JavaScript は一切実行しません
  • 本文に含まれる引用符・エスケープ・改行も正しく解析します
  • 大きいインデックスから置換するため、単語表が10個を超えても衝突しません
  • この形式でない場合は、期待される形を示します(単なる解析エラーではありません)

使い方

  1. `eval(function(p,a,c,k,e,d){…})` 全体を(先頭の `eval(` を含めて)入力欄に貼り付けます
  2. Ctrl/⌘ + Enter か「実行」を押します
  3. 結果が復元されたソースコードです
  4. 逆に圧縮する場合は方向を切り替えます

よくある質問

スクリプトは実行されますか?
実行されません。 ここでの展開は純粋な文字列処理です:パラメータを解析し、短い名前を元の語に置換するだけで、`eval` はどこにもありません。世の中の多くのツールは手軽さからそのコードを評価しますが、それは他人のスクリプトをあなたのブラウザ内で実行することに等しく、圧縮されたコードこそ盲目的に走らせるべきではないものです。本実装は出所不明のコードにも安全に使えます。
出力されたコードはそのまま実行できますか?
通常は可能です。出てくるのは語を置換し直しただけの元のソースで、構造は変わっていないため、コンソールや HTML に貼れば動きます。ただし2点注意してください:元がすでに圧縮(minify)されていた場合、展開しても読みやすくはなりません —— それにはフォーマッタが必要です。また、復元されたコードはあなたが精査していない第三者のコードのままです。読めるようにすることと安全であることは別です。
圧縮結果は原版と完全に同じになりますか?
1バイト単位では一致しません。 原版の packer はソースを走査して語の頻度を数え、独自の規則で短い名前を割り当てます。本ツールの実装は簡略版(識別子を抽出し、出現回数で並べ、使える最短のインデックスを割り当てる)です。形式は互換で、ブラウザはそのまま実行でき、本ツールも展開できますが、割り当て結果は異なる場合があります。原版の出力が必要なら原版スクリプトを使ってください。

関連ツール