npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@alexwca/gecko-js

v1.0.1

Published

Ofuscador JavaScript para proteção de código: dificulta engenharia reversa e cópia de features.

Downloads

38

Readme

🦎 Gecko JS

O obfuscador JavaScript que se camufla perfeitamente no seu código

npm version License: MIT npm downloads

Gecko JS é um obfuscador JavaScript de código aberto projetado para proteger sua lógica de negócio no front-end. Assim como o gecko se camufla na natureza, seu código se torna praticamente invisível para engenharia reversa e cópia não autorizada.

Por que escolher Gecko JS?

  • 100% Gratuito - Sem planos Pro, sem banners, sem limitações
  • Proteção Multi-Camadas - Ofusca identificadores, strings, números e fluxo de controle
  • Fácil Integração - Use programaticamente ou como plugin Webpack
  • Focado em Performance - Ofuscação eficiente sem quebrar a execução
  • Altamente Configurável - Ajuste o nível de proteção conforme sua necessidade
  • Zero Dependências Pesadas - Leve e rápido

Quick Start

Instalação

npm install @alexwca/gecko-js

Uso Básico (Programático)

const { obfuscate } = require('@alexwca/gecko-js');

const codigo = `
  function calcularTotal(itens) {
    const taxa = 0.1;
    return itens.reduce((s, i) => s + i.preco, 0) * (1 + taxa);
  }
`;

const ofuscado = obfuscate(codigo, {
  compact: true,
  stringArray: true,
  rotateStringArray: true,
  numbersToExpressions: true,
  deadCodeInjection: true
});

console.log(ofuscado);
// Código completamente ofuscado e protegido!

Uso com Webpack

const GeckoObfuscatorPlugin = require('@alexwca/gecko-js/webpack');

module.exports = {
  plugins: [
    new GeckoObfuscatorPlugin(
      {
        compact: true,
        identifierNamesGenerator: 'hexadecimal',
        stringArray: true,
        rotateStringArray: true,
        numbersToExpressions: true,
        deadCodeInjection: true,
        controlFlowFlattening: false
      },
      ['runtime.*.js', 'polyfills.*.js', 'main.*.js'] // chunks específicos
    )
  ]
};

Dica: Se o segundo argumento for omitido ou [], todos os arquivos .js emitidos serão ofuscados automaticamente.

Recursos de Proteção

Gecko JS oferece múltiplas camadas de ofuscação para tornar seu código extremamente difícil de analisar:

Ofuscação de Identificadores

  • Renomeia variáveis, funções e parâmetros com nomes hexadecimal ou mangled
  • Torna o código ilegível mantendo a funcionalidade

Ofuscação de Strings

  • Armazena strings em arrays embaralhados
  • Decodifica em runtime usando XOR
  • Rotaciona a ordem do array para maior segurança

Ofuscação de Números

  • Converte números em expressões hexadecimais ou cálculos complexos
  • Dificulta a identificação de valores críticos

Injeção de Código Morto

  • Injeta blocos if(false){ ... } para confundir analisadores
  • Configurável a quantidade de blocos injetados

Control Flow Flattening

  • Achata o fluxo de controle usando switch/estado
  • Proteção extra (pode aumentar o tamanho do bundle)

Opções de Configuração

| Opção | Tipo | Padrão | Descrição | |-------|------|--------|-----------| | compact | boolean | true | Saída minificada em uma linha | | identifierNamesGenerator | string | 'hexadecimal' | 'hexadecimal' ou 'mangled' para nomes de variáveis/funções | | stringArray | boolean | true | Coloca strings em um array e decodifica em runtime (XOR) | | rotateStringArray | boolean | true | Embaralha a ordem do array de strings | | numbersToExpressions | boolean | true | Ofusca números (hex ou expressões). Apenas 30% dos números são ofuscados para manter performance | | deadCodeInjection | boolean | true | Injeta blocos if(false){ ... } para confundir análise | | deadCodeCount | number | 2 | Quantidade de blocos mortos injetados | | controlFlowFlattening | boolean | false | Achata o fluxo com switch/estado (proteção forte, aumenta tamanho) | | minStringLength | number | 3 | Tamanho mínimo de string para ofuscar (strings menores são ignoradas para performance) |

Exemplos de Uso

Exemplo 1: Proteção Básica

const { obfuscate } = require('@alexwca/gecko-js');

const codigo = `
  const API_KEY = 'sk-1234567890';
  function authenticate(key) {
    return key === API_KEY;
  }
`;

const protegido = obfuscate(codigo, {
  compact: true,
  stringArray: true,
  numbersToExpressions: true
});

Exemplo 2: Proteção Máxima

const { obfuscate } = require('@alexwca/gecko-js');

const codigo = `
  // Sua lógica de negócio crítica aqui
`;

const ultraProtegido = obfuscate(codigo, {
  compact: true,
  identifierNamesGenerator: 'hexadecimal',
  stringArray: true,
  rotateStringArray: true,
  numbersToExpressions: true,
  deadCodeInjection: true,
  deadCodeCount: 5,
  controlFlowFlattening: true // Aviso: Aumenta o tamanho do bundle
});

Exemplo 3: Webpack com Filtros

const GeckoObfuscatorPlugin = require('@alexwca/gecko-js/webpack');

module.exports = {
  plugins: [
    new GeckoObfuscatorPlugin(
      { /* opções */ },
      [
        'main.*.js',      // Apenas o bundle principal
        'vendor.*.js',    // E o vendor
        '!*.min.js'       // Mas não os já minificados
      ]
    )
  ]
};

Desenvolvimento

Build do Projeto

git clone https://github.com/alexwca/gecko-js.git
cd gecko-js
npm install
npm run build

Testar Localmente

Para testar em outro projeto sem publicar no npm:

# No diretório gecko-js
npm link

# No seu projeto
npm link @alexwca/gecko-js

Ou instale diretamente do caminho:

npm install /caminho/absoluto/para/gecko-js

Limitações e Considerações

Realidade sobre Proteção de Código Front-end

  • Código no navegador nunca é 100% indetectável: Qualquer pessoa com acesso ao bundle pode inspecioná-lo. O objetivo do Gecko JS é tornar a análise extremamente difícil e demorada, não impossível.

Performance

Gecko JS foi projetado para manter segurança sem impactar significativamente a performance:

  • Overhead de runtime: ~3-8% com configurações padrão
  • Tamanho do bundle: +10-20% com configurações padrão
  • String decoder: Utiliza array join para decodificação eficiente
  • Numbers to expressions: Apenas 30% dos números são ofuscados para manter performance
  • Dead code: 2 blocos injetados por padrão
  • Strings curtas: Strings menores que 3 caracteres não são ofuscadas (configurável via minStringLength)
  • Control flow flattening: Desativado por padrão. Use apenas em trechos críticos que precisam de proteção extra (pode aumentar o bundle em 50-200% e reduzir performance em 20-40%)

Compatibilidade

  • Propriedades obrigatórias de APIs (ex.: nomes de métodos chamados por bibliotecas externas) não são renomeadas automaticamente.
  • O obfuscator foca em identificadores (variáveis, parâmetros, funções) e em strings/números.

Contribuindo

Contribuições são bem-vindas! Sinta-se à vontade para:

  • Reportar bugs
  • Sugerir novas features
  • Melhorar a documentação
  • Enviar pull requests

Licença

MIT License - veja o arquivo LICENSE para mais detalhes.

Agradecimentos

Gecko JS foi criado para a comunidade de desenvolvedores que precisam proteger seu código sem depender de serviços pagos ou planos Pro. Esperamos que seja útil para você!


Feito com Gecko por desenvolvedores, para desenvolvedores

Dê uma estrela | npm | Issues