Ofuscador de JavaScript

A ofuscação aumenta o custo de leitura do seu código-fonte JavaScript, não de forma absoluta (nenhuma ofuscação de front-end é à prova de balas), mas o suficiente para desencorajar inspeções casuais e desacelerar a raspagem automatizada. Esta ferramenta aplica codificação de array de strings, mangling de identificadores, achatamento de fluxo de controle e injeção de código morto opcional, com cada opção selecionável dependendo de quão agressivo você deseja ser.

Como ofuscar JavaScript

  1. 1

    Cole o código-fonte

    Qualquer JS válido. Se depender de nomes de propriedades globais específicas de uma página host, defina-os como reservados.

  2. 2

    Escolha técnicas

    Codificação de strings (hex / base64), mangling de identificadores, achatamento de fluxo de controle, injeção de código morto, wrapper autodefensivo.

  3. 3

    Escolha o perfil de destino

    Navegador (seguro para ES5, sem APIs do Node), Node.js (permite `require`, `Buffer`), ou baixo (principalmente minificação).

  4. 4

    Ofuscar

    A ferramenta gera o código transformado com uma diferença de tamanho. Configurações agressivas podem fazer a saída ser 3-5x maior que a fonte.

Técnicas e o que elas custam

Técnica Aumenta o esforço do atacante Custo em tempo de execução Custo de tamanho
Renomeação de variáveis Baixo Negligível Menor (efeito colateral da minificação)
Codificação de array de strings Médio Pequeno (uma busca por string) +10-30%
Achatamento de fluxo de controle Alto Mensurável (~2-5%) +50-150%
Injeção de código morto Baixo (teatro de segurança) Pequeno +20-50%
Wrapper autodefensivo Médio Verificação única +5-10%
Proteção contra depuração Médio (detecta DevTools) Verificação única +5%
VM / virtualização (premium) Muito alto Grande (5-20x) +300-500%

O que a ofuscação não pode proteger

  • Segredos. Qualquer constante no seu código-fonte de front-end é legível dado tempo suficiente. Chaves de API, segredos de autenticação, lógica de preços, nunca confie na ofuscação para esconder isso. Mova-os para o lado do servidor.
  • Algoritmos com uma saída observável. Se o navegador pode executá-lo, um atacante com um depurador pode observar cada entrada e saída. A ofuscação desacelera isso; não o impede.
  • Raspagem automatizada em grande escala. A anti-raspagem depende da detecção comportamental (impressão digital, limites de taxa, CAPTCHA), não da ofuscação do código-fonte.

Quando a ofuscação vale a pena

  • Anti-tampering em SDKs embutidos (licenciamento, SDKs de anúncios, clientes de jogos).
  • Aumentar o custo para cópias de baixo esforço de uma implementação concorrente.
  • Dificultar a classificação automatizada de scripts para raspadores de amplo espectro.

Quando é contraproducente

  • Você já tem um empacotador. Webpack + Terser em modo de produção já minifica e modifica locais. Adicionar uma segunda passagem de ofuscação pouco traz e inflaciona o tamanho do pacote.
  • Você está otimizando para o primeiro carregamento / Core Web Vitals. A ofuscação agressiva triplica o pacote; isso prejudica FCP e LCP.
  • Você precisa depurar em produção. A ofuscação pesada torna as pilhas de Sentry quase inúteis sem um mapa de origem correspondente, e enviar o mapa de origem derrota a ofuscação.

Erros comuns

  • Tratar a ofuscação como equivalente à criptografia. Não é, é um obstáculo.
  • Enviar o mapa de origem junto com o pacote ofuscado para produção. Isso neutraliza completamente a ofuscação.
  • Ofuscar bibliotecas de terceiros que você já carregou de um CDN. Você recebe a penalidade de tamanho sem nenhum ganho.

Perguntas frequentes

Não. A ofuscação é um obstáculo, não uma fechadura. Um analista determinado com um depurador recuperará a lógica. Aumenta o custo o suficiente para desencorajar inspeções casuais e a maioria dos raspadores automatizados, mas não é segurança.

Se você acessar propriedades dinamicamente (obj["field_name"], Object.keys(obj)), ou depender de nomes de funções / classes específicas da página host, adicione-os à lista de reservados. Sem isso, a renomeação de propriedades pode quebrar integrações externas.

Mantenha o código-fonte original. O ofuscador é uma transformação unidirecional; você não pode recuperar exatamente o original a partir da saída ofuscada, apenas uma aproximação legível.

A ofuscação leve adiciona ~10-30%. O achatamento de fluxo de controle mais arrays de strings adicionam 50-150%. As configurações mais pesadas podem triplicar o tamanho. Verifique o contador de tamanho da saída antes de enviar.

Ferramentas relacionadas

Ferramenta disponível em outros idiomas