Como empacotar e desempacotar JavaScript

Empacotar reescreve o JavaScript dentro do invólucro eval(function(p,a,c,k,e,d){…}(…)) do clássico empacotador Base62: cada palavra vira um índice em um dicionário de palavras únicas ordenadas, e a carga mantém o texto original com aspas, barras invertidas e quebras de linha escapadas. Desempacotar avalia essa carga nesta página e mostra o JavaScript que ela devolve.

Isto é ofuscação, não criptografia, e desempacotar executa o código que você cola: use apenas scripts confiáveis. Os dois botões trabalham só com o texto da caixa, nada é enviado e a página não faz nenhuma requisição ao empacotar ou desempacotar.

  1. Cole o JavaScript na caixa acima, ou uma carga empacotada eval(function(p,a,c,k,e,d){…}) se quiser lê-la de volta.
  2. Pressione Empacotar JavaScript. A caixa de resultado mostra o invólucro em uma única linha, com a carga empacotada e o dicionário de palavras na lista de argumentos.
  3. Leve o invólucro com o botão Copiar, ou pressione Limpar para esvaziar as duas caixas.
  4. Para o caminho inverso, cole uma carga empacotada e pressione Desempacotar. A página a avalia e imprime o código devolvido.
  5. Se a entrada não tiver eval, não puder ser avaliada ou não devolver texto, a caixa mostra um aviso com o motivo em vez de um resultado vazio.

O que cada botão faz

O invólucro que o empacotador escreve

Cada palavra (letras, dígitos, sublinhado e $) é trocada por um índice em base 62 (0-9, depois a-z, depois A-Z) e as palavras únicas entram no dicionário que viaja com a carga. A carga é uma string entre aspas simples, então aspas, barras invertidas e quebras de linha são escapadas em vez de apagadas: um comentário // continua sendo comentário e uma instrução sem ponto e vírgula mantém sua quebra de linha.

O resultado é JavaScript comum: colado em uma página, ele executa, e qualquer desempacotador que avalie o invólucro devolve o código original. Nesta versão a ida e volta foi verificada byte a byte com aspas escapadas, expressões regulares com barras invertidas, template literals, comentários de bloco, arquivos sem ponto e vírgula, texto CJK, identificadores com $, texto JSON e dicionários com mais de 60 palavras.

Ler uma carga de volta

Desempacotar aceita qualquer carga que seja avaliada como texto, inclusive as geradas por este mesmo invólucro em outro site. A caixa de resultado é somente leitura e tem realce de sintaxe, e o botão de copiar copia o texto.

Desempacotar avalia a entrada dentro desta página — é exatamente para isso que serve o invólucro eval() — então desempacote apenas código confiável. Se a carga lançar erro ou devolver algo que não é texto JavaScript, aparece um aviso em vez de uma caixa vazia.

Tamanhos e tempos medidos

Empacotar reduz o código a uma linha e costuma diminuir código repetitivo: 2,7 KB de funções viraram 1,8 KB, 16,7 KB viraram 11 KB e 85 KB viraram 55 KB, com empacotamento entre 1 e 5 ms e desempacotamento entre 0,3 e 3 ms no Chrome.

Como o invólucro é reversível por natureza, trate o resultado como ofuscação contra leitura casual, não como proteção de um segredo: qualquer pessoa pode colá-lo aqui ou em outro desempacotador e recuperar o código.

Ferramentas recentes: