Como posso ofuscar (proteger) o JavaScript? [fechado]

quero fazer uma aplicação JavaScript que não seja de código aberto, e assim quero aprender a ofuscar o meu código JS? Isto é possível?

Author: Chuck Le Butt, 2008-10-11

24 answers

Ofuscação:

Tenta Compressor YUI. É uma ferramenta muito popular, construída, melhorada e mantida pela equipe Yahoo UI.

Também pode utilizar:

Dados Privados Do Texto:

Manter os valores das cordas privados é uma preocupação diferente, e ofuscar não será muito benéfico. Claro, embalando a sua fonte em um bagunça minificada, você tem uma versão leve deSegurança atéobscuridade . Na maioria das vezes, é o seu usuário que está visualizando a fonte, e os valores de string no cliente são destinados para seu uso, de modo que o tipo de valor de string privado não é muitas vezes necessário. Se realmente tivesses um valor que nunca quiseste que um utilizador visse, terias algumas opções. Primeiro, você pode fazer algum tipo de criptografia, que é descriptografada na carga de página. Isso provavelmente seria ... uma das opções mais seguras, mas também muito trabalho que pode ser desnecessário. Você provavelmente poderia codificar alguns valores de strings no base64, e isso seria mais fácil.. mas alguém que realmente queria esses valores de texto poderia facilmente descodificá-los. A encriptação é a única forma de impedir alguém de aceder aos seus dados, e a maioria das pessoas acha que isso é mais segurança do que precisa.

Sidenote:

A ofuscação em Javascript é conhecida por causar alguns erros. O obfuscators estão ficando um pouco melhor sobre isso, mas muitos equipamentos de decidir o que eles vêem o suficiente beneficiar - reduzir e gzipping, e a maior economia de ofuscação nem sempre vale a pena. Se está a tentar proteger a sua fonte, talvez decida que vale a pena, só para tornar o seu código mais difícil de ler. JSMin é uma boa alternativa.

 388
Author: keparo, 2016-08-06 23:01:07
Surpreende-me que ninguém tenha mencionado o compilador de Encerramento do Google. Ele não apenas minify/comprimir, ele analisa para encontrar e remover o código não utilizado, e reescreve para a minificação máxima. Ele também pode fazer verificação de tipo e avisará sobre erros de sintaxe.

A JQuery mudou recentemente da YUI compressor para o compilador de fecho e viu uma melhoria sólida"

 129
Author: Jason Hall, 2010-04-17 15:14:49
A ofuscação nunca pode funcionar. Para quem realmente quiser seguir o seu código, é apenas uma lomba. Pior, ele impede os usuários de corrigir bugs (e enviar as correções de volta para você), e torna mais difícil para você diagnosticar problemas no campo. É uma perda de tempo e dinheiro. Fale com um advogado sobre a lei da propriedade intelectual e quais são as suas opções legais. "código aberto" não significa "as pessoas podem ler a fonte". Em vez disso, o código aberto é um modelo de licenciamento particular que concede permissão para usar livremente e modificar o seu código. Se você não conceder tal licença, então as pessoas que copiam seu código estão em violação e (na maioria do mundo) você tem opções legais para pará-los. A única maneira de protegeres o teu código é não o enviares. Mova o importante servidor de código e tenha o seu código Javascript Público fazer chamadas Ajax para ele.

Veja a minha resposta completa sobre ofuscadores aqui.

 115
Author: Schwern, 2017-05-23 12:18:28

Você pode ofuscar a fonte de javascript o quanto quiser, mas será sempre reversível apenas em virtude de exigir todo o código fonte para realmente executar na máquina cliente... a melhor opção que eu posso pensar é ter todo o seu processamento feito com o código do lado do servidor, e todo o código cliente javascript faz é enviar pedidos de processamento para o próprio servidor. Caso contrário, qualquer um será sempre capaz de manter o controle de todas as operações que o código está fazendo.

Alguém mencionado base64 para manter as cordas seguras. Isto é uma péssima ideia. Base64 é imediatamente reconhecível pelos tipos de pessoas que gostariam de reverter o seu código. A primeira coisa que eles vão fazer é unencodê-lo e ver o que é.
 50
Author: Claudiu, 2012-01-11 09:50:19

Há uma série de ferramentas de ofuscação JavaScript que estão disponíveis livremente; no entanto, eu acho que é importante notar que é difícil ofuscar JavaScript ao ponto em que não pode ser de engenharia reversa.

Para isso, há várias opções que usei até certo ponto, horas extraordinárias:
 44
Author: Tom, 2008-10-11 18:26:52

O que eu faria:

Troll, o hacker!

Isto será na segunda parte o meu falso E ofuscado lançador secreto de código javascript. O que você vê no código fonte. O que é este código?
  1. carrega o código real
  2. define um cabeçalho personalizado
  3. coloca uma variável personalizada

var ajax=function(a,b,d,c,e,f){
 e=new FormData();
 for(f in d){e.append(f,d[f]);};
 c=new XMLHttpRequest();
 c.open('POST',a);
 c.setRequestHeader("Troll1","lol");
 c.onload=b;
 c.send(e);
};
window.onload=function(){
 ajax('Troll.php',function(){
  (new Function(atob(this.response)))()
 },{'Troll2':'lol'});
}

B. ofusca o código um pouco

O que é isso?
    É o mesmo código. como em cima de base64
  1. Este não é o código secreto de javascript

(new Function(atob('dmFyIGFqYXg9ZnVuY3Rpb24oYSxiLGQsYyxlLGYpe2U9bmV3IEZvcm1EYXRhKCk7Zm9yKGYgaW4gZCl7ZS5hcHBlbmQoZixkW2ZdKTt9O2M9bmV3IFhNTEh0dHBSZXF1ZXN0KCk7Yy5vcGVuKCdQT1NUJyxhKTtjLnNldFJlcXVlc3RIZWFkZXIoIlRyb2xsMSIsImxvbCIpO2Mub25sb2FkPWI7Yy5zZW5kKGUpO307d2luZG93Lm9ubG9hZD1mdW5jdGlvbigpe2FqYXgoJ1Ryb2xsLnBocCcsZnVuY3Rpb24oKXsgKG5ldyBGdW5jdGlvbihhdG9iKHRoaXMucmVzcG9uc2UpKSkoKX0seydUcm9sbDInOidsb2wnfSk7fQ==')))()

C crie um ficheiro de php difícil de mostrar com o código real dentro

Qual é o código php?
  1. verifica o referrer direito (domínio/pasta/código do seu lançador)
  2. verificações do cabeçalho personalizado
  3. controlos da variável post personalizada

Se tudo estiver bem, irá mostrar-lhe o código certo. caso contrário, um código falso ou ban ip, feche. pagina.. como queiras.

<?php
$t1=apache_request_headers();
if(base64_encode($_SERVER['HTTP_REFERER'])=='aHR0cDovL2hlcmUuaXMvbXkvbGF1bmNoZXIuaHRtbA=='&&$_POST['Troll2']=='lol'&&$t1['Troll1']='lol'){
 echo 'ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSkuaW5uZXJUZXh0PSdBd2Vzb21lJzsNCg==';//here is the SECRET javascript code
}else{
 echo 'd2luZG93Lm9wZW4oJycsICdfc2VsZicsICcnKTt3aW5kb3cuY2xvc2UoKTs=';
};
?>

Base64 referrer = http://here.is/my/launcher.html

Javascript secreto = document.body.appendChild(document.createElement('div')).innerText='Awesome';

Falso = window.open('', '_self', '');window.close();

Agora .. se você definir os tratadores de eventos no javascript secreto, provavelmente é acessível.. você precisa defini-los lá fora com o código de lançamento e apontando para uma função secreta aninhada. Então..... há uma maneira fácil de obter o código? document.body.appendChild(document.createElement('div')).innerText='Awesome';

Não sei se isto funciona, mas estou a usar o cromo e verifiquei. Elementos, recursos, rede, fontes, linha do tempo, perfis, auditorias, mas não encontrei a linha acima.

Nota1: se abrires o Troll.url do php de inspeccionar o elemento - >rede no chrome, obtém o código falso.

Note2: todo o código é escrito para navegadores modernos. o polifill precisa de muito mais código.

Editar

Lançador.html
<!doctype html><html><head><meta charset="utf-8"><title></title><script src="data:application/javascript;base64,KG5ldyBGdW5jdGlvbihhdG9iKCdkbUZ5SUdGcVlYZzlablZ1WTNScGIyNG9ZU3hpTEdRc1l5eGxMR1lwZTJVOWJtVjNJRVp2Y20xRVlYUmhLQ2s3Wm05eUtHWWdhVzRnWkNsN1pTNWhjSEJsYm1Rb1ppeGtXMlpkS1R0OU8yTTlibVYzSUZoTlRFaDBkSEJTWlhGMVpYTjBLQ2s3WXk1dmNHVnVLQ2RRVDFOVUp5eGhLVHRqTG5ObGRGSmxjWFZsYzNSSVpXRmtaWElvSWxSeWIyeHNNU0lzSW14dmJDSXBPMk11YjI1c2IyRmtQV0k3WXk1elpXNWtLR1VwTzMwN2QybHVaRzkzTG05dWJHOWhaRDFtZFc1amRHbHZiaWdwZTJGcVlYZ29KMVJ5YjJ4c0xuQm9jQ2NzWm5WdVkzUnBiMjRvS1hzZ0tHNWxkeUJHZFc1amRHbHZiaWhoZEc5aUtIUm9hWE11Y21WemNHOXVjMlVwS1Nrb0tYMHNleWRVY205c2JESW5PaWRzYjJ3bmZTazdmUT09JykpKSgp"></script></head><body></body></html>
Troll.php
<?php $t1=apache_request_headers();if(/*base64_encode($_SERVER['HTTP_REFERER'])=='PUT THE LAUNCHER REFERER HERE'&&*/$_POST['Troll2']=='lol'&&$t1['Troll1']='lol'){echo 'ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSkuaW5uZXJUZXh0PSdBd2Vzb21lJzsNCg==';}else{echo 'd2luZG93Lm9wZW4oJycsICdfc2VsZicsICcnKTt3aW5kb3cuY2xvc2UoKTs=';}; ?>
 22
Author: cocco, 2013-07-04 12:16:16

Tenta JScrambler . Dei-lhe uma volta recentemente e fiquei impressionado. Ele fornece um conjunto de modelos para ofuscação com configurações predefinidas para aqueles que não se importam muito com os detalhes e só querem fazê-lo rapidamente. Você também pode criar ofuscação personalizada, escolhendo quaisquer transformações / técnicas que você deseja.

 18
Author: Anthony, 2016-03-31 01:21:55

O problema com linguagens interpretadas, é que você envia a fonte para fazê-las funcionar (a menos que você tenha um compilador para bytecode, mas então novamente, é bastante trivial descompilar).

Então, se você não quer sacrificar o desempenho, você só pode agir em nomes de variáveis e funções, por exemplo. substituindo-os por a, B... aa, ab... ou A101, a102, etc. E, claro, remova o máximo de espaço / linhas novas que puder (isso é o que os chamados compressores JS fazem).
Cordas ofuscantes terão um desempenho atingido, se você tiver que encriptar e descriptografá-los em tempo real. Além disso, um depurador JS pode mostrar os valores finais...

 17
Author: PhiLho, 2008-10-11 18:23:36

Ao contrário da maioria das outras respostas que sugiro contra o Compressor YUI; você deve usar o encerramento do Google.

Não muito porque comprime mais, mas principalmente porque vai apanhar erros de javascript como {[[0]} que fazem IE ir à loucura.

 17
Author: Andreas Bonini, 2010-10-06 20:24:08

Uma aplicação sem código aberto baseada em Javascript é bastante tola. Javascript é uma linguagem interpretada do lado do cliente.. Ofuscação não é muita protecção..

Ofuscação JS é geralmente feito para reduzir o tamanho do script, em vez de" protegê-lo". Se você está em uma situação em que você não quer que seu código seja público, Javascript não é a linguagem certa..

Há muitas ferramentas ao redor, mas a maioria tem a palavra "compressor" (ou "minifier") em seu nome para um razao..

 13
Author: dbr, 2008-10-12 05:44:51

Você não pode proteger o código do lado do cliente: basta carregar em F12 no Google Chrome, colocar em pausa a execução do javascript {[[3]} e obterá todos os textos, mesmo aqueles encriptados. embelezar aquilo e mudar o nome das variáveis e obterá quase o código original.

Se está a escrever o javascript do lado do servidor (isto é, NodeJS) tem medo de alguém a invadir o seu servidor e quer tornar o hacker mais difícil, dando-lhe mais tempo para obter o seu acesso de volta, então use javacript Compiladores:

Você precisa usar o compilador de fechamento na compilação avançada, pois é a única ferramenta que muda o nome de todas as suas variáveis, mesmo que essas sejam usadas em vários arquivos/módulos. Mas ele só tem um problema: ele só funciona se você escrever nele é estilo de codificação.

 11
Author: Gustavo Rodrigues, 2014-01-02 23:56:01

Posso recomendar utilitário JavaScript por Patrick J. O'Neil. Pode ofuscar / compactar e comprimir e parece ser muito bom nisso. Dito isto, nunca tentei integrá-lo num guião de construção.

Quanto a ofuscar vs. minifying, não sou grande fã do primeiro. Torna impossível a depuração (erro na linha 1... "espere, há apenas uma linha") e eles sempre levam tempo para desempacotar. Mas se for preciso... bem.
 11
Author: Tsvetomir Tsonev, 2014-04-23 12:32:32
O Packer do Dean Edward é um excelente ofuscador, embora, em primeiro lugar, ofusca o código, Não quaisquer elementos de cadeia que possa ter dentro do seu código.

Ver: Ferramenta De Compressão de Javascript 'Online' e seleccionar o Packer (Dean Edwards) da lista

 5
Author: smdrager, 2013-01-28 02:41:12
Eu sugeriria primeiro minify com algo como o Compressor YUI, e depois converter todas as cordas e números para valores HEX usando algo como http://www.javascriptobfuscator.com/ Com isto, o código seria quase impossível de entender e acho que, nesta fase, levará mais tempo para um Hacker reescrever o seu código do que se ele reescrevesse do zero. Reescrever e clonar é o que não se pode parar. Afinal, somos pessoas livres !
 4
Author: Dynamite Blitzer, 2011-04-15 23:27:39

Há anos que uso Jasob e é o melhor ofuscador lá fora.
Tem uma IU avançada, mas ainda é intuitiva e fácil de usar.
Ele também irá lidar com arquivos HTML e CSS.

A melhor maneira de O usar é prefixar todas as suas variáveis privadas com algo como um sublinhado, então use a funcionalidade sort para agrupá-las todas e verifique como alvos para ofuscação.

Os utilizadores ainda podem ver o seu fonte, mas é muito mais difícil de decifrar quando suas variáveis privadas são convertidas de algo como _sUserPreferredNickName Para a.

O motor irá automaticamente somar o número de variáveis-alvo e priorizá-las para obter a compressão máxima.

Não trabalho para a Jasob e não ganho nada em promovê-los, apenas a dar conselhos amigáveis.
A desvantagem é que não é livre e é um pouco caro, mas ainda vale a pena quando empilhado contra alternativas - o as opções "Grátis" nem chegam perto.
 4
Author: Matt, 2012-01-01 08:19:50
Já tentaste Bananascript? Produz um código altamente comprimido e completamente ilegível.
 4
Author: niutech, 2012-10-05 13:19:25

Estou a usar o Utilitário Closure-Compiler para a ofuscação de java-script. Ele minifica o código e tem mais opções para ofuscar. Este utilitário está disponível no código Google abaixo do URL:
Ferramentas de Fecho

Mas agora há dias que ouço muito de UglifyJS. Você pode encontrar várias comparações entre compilador de fechamento e UglifyJS em que Uglify parece ser um vencedor.
UglifyJS: Um Novo Compressor De JavaScript Rápido Para Nó.js que está a Par com Encerramento Em breve daria a oportunidade aos UglifyJS.
 4
Author: shaILU, 2013-01-28 02:45:36

Tenho a impressão de que algumas empresas (por exemplo, JackBe) colocaram o código JavaScript encriptado no interior *.arquivos gif, ao invés de arquivos JS, como uma medida adicional de ofuscação.

 3
Author: xgMz, 2009-01-24 01:12:38

Como um obfuscator/compressor JavaScript/HTML/CSS Você também pode tentar Patu Digua .

 3
Author: Adrian, 2010-04-17 15:07:00

Tente esta ferramenta Javascript Ofuscator

Usei - o no meu jogo HTML5, não só reduziu o seu tamanho de 950KB para 150, como também fez com que os compiladores de fechamento ilegíveis do código fonte e os minificadores fossem reversíveis, pessoalmente não sei como reverter esta ofuscação.

 3
Author: Jerczu, 2011-08-19 09:54:53

Você definitivamente deve considerar dar uma olhada em Ofuscriptor.

Eu vai além dos truques típicos de minifying Javascript que vimos de outras ferramentas como Yui Compressor ou Google Closure.

O código ofuscado parece mais encriptado. Ao contrário de tudo o que já vi antes.
 3
Author: Mike, 2012-03-25 21:06:11

Se você usar uma biblioteca de JavaScript, considere o Toolkit Dojo que é compatível (após pequenas modificações) com a compilação de modo avançado do compilador de fechamento.

Dojo - A Única Biblioteca De JavaScript Compatível com o compilador de encerramento

O código compilado com o modo avançado de encerramento é quase impossível de ser revertido, mesmo passando por um lindo, já que a base de códigosinteira (incluindo a Biblioteca) é ofuscada. É também 25% pequeno em Media.

Código JavaScript que é meramente minificado (Compressor YUI, Uglify etc.) é fácil fazer engenharia reversa depois de passar por uma linda.

 2
Author: Stephen Chung, 2013-01-28 02:41:27
Já usei isto no passado e faz um bom trabalho. Não é de graça, mas devias dar uma vista de olhos.
Codificador E Ofuscador De JavaScript
 2
Author: Henry, 2013-01-28 02:44:15