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?
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.
A JQuery mudou recentemente da YUI compressor para o compilador de fecho e viu uma melhoria sólida"
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 é.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:JSMin é uma ferramenta escrita por Douglas Crockford que procura minifificar a sua fonte JavaScript. Nas próprias palavras de Crockford, " JSMin não ofusca, mas faz uglify."O seu principal objectivo é minificar o tamanho da sua fonte para um carregamento mais rápido em navegador.
Free JavaScript Obfuscator . Esta é uma ferramenta baseada na web que tenta ofuscar o seu código, codificando-o. Eu penso que os trade-offs de sua forma de codificação (ou ofuscação) poderiam vir ao custo de filesize; entretanto, essa é uma questão de preferência pessoal.
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?- carrega o código real
- define um cabeçalho personalizado
- 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
- 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?- verifica o referrer direito (domínio/pasta/código do seu lançador)
- verificações do cabeçalho personalizado
- 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();
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=';}; ?>
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.
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...
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.
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..
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.
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.Ver: Ferramenta De Compressão de Javascript 'Online' e seleccionar o Packer (Dean Edwards) da lista
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.
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
UglifyJS: Um Novo Compressor De JavaScript Rápido Para Nó.js que está a Par com Encerramento Em breve daria a oportunidade aos UglifyJS.
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.
Como um obfuscator/compressor JavaScript/HTML/CSS Você também pode tentar Patu Digua .
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.
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.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.
Codificador E Ofuscador De JavaScript