online - ¿Cómo puedo ofuscar(proteger) JavaScript?
ofuscar codigo php (24)
Quiero crear una aplicación de JavaScript que no sea de código abierto, ¿y por lo tanto deseo aprender a ofuscar mi código JS? es posible?
¿Has probado Bananascript ? Produce código altamente comprimido y completamente ilegible.
Como un ofuscador / compresor de JavaScript / HTML / CSS también puedes probar Patu Digua .
Contrariamente a la mayoría de las otras respuestas, sugiero contra el compresor YUI; debe utilizar Google Closure .
No mucho porque comprime más, pero principalmente porque detectará errores de javascript como a = [1,2,3,];
lo que hace que IE se vuelva loco.
Dean Edward''s Packer es un excelente ofuscador, aunque principalmente confunde el código, no cualquier elemento de cadena que pueda tener dentro de su código.
Consulte: Herramienta de compresión de Javascript en línea y seleccione Packer (Dean Edwards) en el menú desplegable.
Definitivamente deberías considerar echarle un vistazo a Obfuscriptor .
Va más allá de los típicos trucos de Javascript que hemos visto en otras herramientas como YUI Compressor o Google Closure .
El código ofuscado se parece más a un cifrado. A diferencia de todo lo que he visto antes.
El problema con los lenguajes interpretados, es que envía la fuente para que funcionen (a menos que tenga un compilador para bytecode, pero nuevamente, es bastante trivial de descompilar).
Por lo tanto, si no desea sacrificar el rendimiento, solo puede actuar sobre nombres de funciones y variables, por ejemplo. reemplazándolos con a, b ... aa, ab ... o a101, a102, etc. Y, por supuesto, elimine tanto espacio / nuevas líneas como sea posible (eso es lo que hacen los llamados compresores JS).
Las cadenas ofuscadas tendrán un impacto en el rendimiento, si tiene que cifrarlas y descifrarlas en tiempo real. Además, un depurador JS puede mostrar los valores finales ...
Estoy usando la utilidad Closure-Compiler para la ofuscación de java-script. Minifica el código y tiene más opciones para ofuscación. Esta utilidad está disponible en el código de Google en la siguiente URL:
Herramientas de cierre
Pero hoy en día estoy escuchando mucho de UglifyJS. Puede encontrar varias comparaciones entre Closure Compiler y UglifyJS en las que Uglify parece ser un ganador.
UglifyJS: un nuevo compresor de JavaScript rápido para Node.js que está a la par con el cierre
Pronto daría la oportunidad de UglifyJS.
Hay una serie de herramientas de ofuscación de JavaScript que están disponibles gratuitamente; sin embargo, creo que es importante tener en cuenta que es difícil ofuscar JavaScript hasta el punto en que no se pueda realizar ingeniería inversa.
Para ello, hay varias opciones que he usado hasta cierto punto en las horas extraordinarias:
Compresor YUI . El compresor de JavaScript de Yahoo! Hace un buen trabajo condensando el código que mejorará su tiempo de carga. Hay un pequeño nivel de ofuscación que funciona relativamente bien. Esencialmente, Compressor cambiará los nombres de las funciones, eliminará los espacios en blanco y modificará las variables locales. Esto es lo que uso más a menudo. Esta es una herramienta de código abierto basada en Java.
JSMin es una herramienta escrita por Douglas Crockford que busca minimizar su fuente de JavaScript. En las propias palabras de Crockford, "JSMin no confunde, pero sí lo hace". Su objetivo principal es reducir el tamaño de su fuente para una carga más rápida en los navegadores.
Ofuscador de JavaScript gratis . Esta es una herramienta basada en la web que intenta ofuscar su código en realidad codificándolo. Creo que las compensaciones de su forma de codificación (u ofuscación) podrían tener el costo del tamaño del archivo; Sin embargo, eso es una cuestión de preferencia personal.
He estado usando Jasob durante años y es Jasob el mejor ofuscador que existe.
Tiene una interfaz de usuario avanzada, pero aún así es intuitivo y fácil de usar.
También manejará archivos HTML y CSS.
La mejor manera de usarlo es prefijar todas sus variables privadas con algo como un guión bajo, luego usar la función de sort
para agruparlas todas y marcarlas como objetivos para la ofuscación.
Los usuarios aún pueden ver su fuente, pero es mucho más difícil de descifrar cuando sus variables privadas se convierten de algo como _sUserPreferredNickName
a a
.
El motor contará automáticamente el número de variables objetivo y las priorizará para obtener la compresión máxima.
No trabajo para Jasob y no obtengo nada de su promoción, solo ofrezco un consejo amistoso.
El inconveniente es que no es gratis y es un poco caro, pero vale la pena cuando se compara con otras alternativas: las opciones ''gratuitas'' ni siquiera se acercan.
He usado esto en el pasado, y hace un buen trabajo. No es gratis, pero definitivamente deberías echarle un vistazo.
Ofuscador y codificador de JavaScript
La ofuscación nunca puede funcionar. Para cualquier persona que realmente quiera obtener su código, es solo un golpe de velocidad. Peor aún, evita que sus usuarios corrijan errores (y le envíen los arreglos) y hace que sea más difícil diagnosticar problemas en el campo. Es una pérdida de tiempo y dinero.
Hable con un abogado sobre la ley de propiedad intelectual y cuáles son sus opciones legales. "Fuente abierta" no significa "la gente puede leer la fuente". En su lugar, Open Source es un modelo de licencia particular que otorga permiso para usar y modificar libremente su código. Si no otorga dicha licencia, las personas que copien su código están en violación y (en la mayor parte del mundo) tiene opciones legales para detenerlos.
La única forma en que realmente puede proteger su código es no enviarlo. Mueva el código del lado del servidor importante y haga que su código público de Javascript le haga llamadas Ajax.
Me sorprende que nadie haya mencionado el compilador de cierre de Google. No solo minimiza / comprime, analiza para encontrar y eliminar el código que no se utiliza, y vuelve a escribir para obtener la máxima minimización. También puede realizar la comprobación de tipos y advertirá sobre los errores de sintaxis.
JQuery cambió recientemente de YUI Compresser a Closure Compiler, y vio una " mejora sólida "
No puede asegurar el código del lado del cliente: simplemente presione F12 en Google Chrome, pause la ejecución de javascript y obtendrá todas las cadenas, incluso las cifradas. Beautify y renombra las variables y obtendrás casi el código original.
Si está escribiendo javascript del lado del servidor (es decir, NodeJS) tiene miedo de que alguien piratee su servidor y quiera hacer que el pirata informático trabaje más, dándole más tiempo para recuperar su acceso, luego use compiladores javacript :
Debe usar Closure Compiler en Advanced Compilation, ya que es la única herramienta que cambia el nombre de todas sus variables, incluso si se usan en varios archivos / módulos. Pero solo tiene un problema: solo funciona si escribes en su developers.google.com/closure/compiler/docs/api-tutorial3 .
Prueba esta herramienta Javascript Obfuscator
Lo usé en mi juego de HTML5, no solo lo redujo de 950 KB a 150, sino que también hizo que el código fuente sea ilegible. Los compiladores de cierre y los minificadores son reversibles. Personalmente, no sé cómo revertir esta ofuscación.
Pruebe JScrambler . Le di una vuelta recientemente y me impresionó. Proporciona un conjunto de plantillas para ofuscación con configuraciones predefinidas para aquellos que no se preocupan mucho por los detalles y solo quieren hacerlo rápidamente. También puede crear ofuscación personalizada eligiendo las transformaciones / técnicas que desee.
Puede ofuscar la fuente javascript todo lo que desee, pero siempre será capaz de realizar ingeniería inversa solo por el hecho de requerir que todo el código fuente se ejecute en la máquina cliente ... la mejor opción que se me ocurre es tener todo el procesamiento realizado con el código del lado del servidor, y todo lo que hace el código de cliente javascript es enviar solicitudes para su procesamiento al propio servidor. De lo contrario, cualquier persona siempre podrá realizar un seguimiento de todas las operaciones que realiza el código.
Alguien mencionó base64 para mantener las cuerdas seguras. Esta es una idea terrible. Base64 es inmediatamente reconocible por los tipos de personas que querrían realizar ingeniería inversa de su código. Lo primero que harán es descifrarlo y ver qué es.
Puedo recomendar la utilidad de JavaScript por Patrick J. O''Neil. Puede ofuscar / compactar y comprimir y parece ser bastante bueno en esto. Dicho esto, nunca intenté integrarlo en un script de compilación de ningún tipo.
En cuanto a ofuscación vs. minimización, no soy un gran fanático de lo primero. Hace que la depuración sea imposible (error en la línea 1 ... "esperar, solo hay una línea") y siempre llevan tiempo desempaquetar. Pero si necesitas ... bueno.
Que haría yo:
A. Troll el hacker!
Esto será en la segunda parte de mi código falso / ofuscado de javascript secreto LANZADOR. El que ves en el código fuente.
¿Qué significa este código?
- carga el código real
- establece un encabezado personalizado
- publica una variable 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. ofuscar un poco el código
¿Que es eso?
- ese es el mismo código que el anterior en base64
- este no es el código SECRETO de javascript
(new Function(atob(''dmFyIGFqYXg9ZnVuY3Rpb24oYSxiLGQsYyxlLGYpe2U9bmV3IEZvcm1EYXRhKCk7Zm9yKGYgaW4gZCl7ZS5hcHBlbmQoZixkW2ZdKTt9O2M9bmV3IFhNTEh0dHBSZXF1ZXN0KCk7Yy5vcGVuKCdQT1NUJyxhKTtjLnNldFJlcXVlc3RIZWFkZXIoIlRyb2xsMSIsImxvbCIpO2Mub25sb2FkPWI7Yy5zZW5kKGUpO307d2luZG93Lm9ubG9hZD1mdW5jdGlvbigpe2FqYXgoJ1Ryb2xsLnBocCcsZnVuY3Rpb24oKXsgKG5ldyBGdW5jdGlvbihhdG9iKHRoaXMucmVzcG9uc2UpKSkoKX0seydUcm9sbDInOidsb2wnfSk7fQ=='')))()
C Crea un archivo php difícil de visualizar con el código real dentro
¿Qué hace este código php?
- Comprueba la referencia correcta (dominio / dir / código de su lanzador)
- Comprobaciones de la cabecera personalizada.
- Comprueba la variable POST personalizada
Si todo está bien, le mostrará el código correcto, o un código falso o ban ip, cierre la página ... lo que sea.
<?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
SECRET javascript = document.body.appendChild(document.createElement(''div'')).innerText=''Awesome'';
FAKE = window.open('''', ''_self'', '''');window.close();
Ahora ... si define los manejadores de eventos en el javascript SECRETO, es probable que esté accesible ... necesita definirlos afuera con el código de inicio y apuntando a una función SECRETA anidada.
Entonces ... ¿hay una manera fácil de obtener el código? document.body.appendChild(document.createElement(''div'')).innerText=''Awesome'';
No estoy seguro de si esto funciona, pero estoy usando Chrome y verifiqué Elementos, Recursos, Red, Fuentes, Cronología, Perfiles, Auditorías, pero no encontré la línea de arriba.
nota 1: si abres la url Troll.php desde Inspeccionar elemento-> red en Chrome, obtienes el código falso.
nota2: todo el código está escrito para navegadores modernos. Polyfill necesita mucho más código.
EDITAR
launcher.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='';}; ?>
Si usa una biblioteca de JavaScript, considere el kit de herramientas Dojo, que es compatible (después de modificaciones menores) con la compilación del modo avanzado del compilador Closure.
Dojo - La única biblioteca de JavaScript compatible con el compilador de cierre
El código compilado con el modo Closure Advanced es casi imposible de aplicar ingeniería inversa, incluso si se pasa por un embellecedor, ya que todo el código base (incluida la biblioteca) está ofuscado. También es un 25% pequeño en promedio.
El código JavaScript que está simplemente minimizado (compresor YUI, Uglify, etc.) es fácil de aplicar ingeniería inversa después de pasar por un embellecedor.
Tengo la impresión de que algunas empresas (por ejemplo, JackBe) colocan el código JavaScript encriptado dentro de los archivos * .gif, en lugar de los archivos JS, como medida adicional de ofuscación.
Una aplicación no basada en Javascript de código abierto es bastante tonta. Javascript es un lenguaje interpretado del lado del cliente. La ofuscación no es mucha protección.
La ofuscación JS se realiza generalmente para reducir el tamaño del script, en lugar de "protegerlo". Si se encuentra en una situación en la que no desea que su código sea público, Javascript no es el idioma correcto.
Hay muchas herramientas disponibles, pero la mayoría tiene la palabra "compresor" (o "minificador") en su nombre por una razón ...
Yo sugeriría primero minimizar con algo como YUI Compressor, y luego convertir todas las cadenas y números a Valores HEX usando algo como http://www.javascriptobfuscator.com/
Con esto, el código se volvería casi imposible de entender y creo que en esta Etapa un Hacker tardará más tiempo en volver a promulgar su código que en realidad si reescribiera desde cero. Reescribir y clonar es lo que realmente no puedes detener. ¡Después de todo somos personas libres!
Éste minimiza pero no confunde. Si no desea utilizar la línea de comandos de Java, puede pegar su javascript en un formulario web.
Ofuscación:
Prueba el compresor YUI . Es una herramienta muy popular, construida, mejorada y mantenida por el equipo de Yahoo UI.
También puede utilizar:
Datos de cadena privada:
Mantener los valores de las cadenas en privado es una preocupación diferente, y la ofuscación realmente no será de mucho beneficio. Por supuesto, al empaquetar su fuente en un lío minucioso y confuso, tiene una versión ligera de seguridad en la oscuridad . La mayoría de las veces, es su usuario el que está viendo la fuente, y los valores de cadena en el cliente están diseñados para su uso, por lo que ese tipo de valor de cadena privada no suele ser necesario.
Si realmente tuviera un valor que nunca quiso que un usuario viera, tendría un par de opciones. Primero, podría hacer algún tipo de cifrado, que se descifra al cargar la página. Probablemente esa sea una de las opciones más seguras, pero también un montón de trabajo que puede ser innecesario. Probablemente podría codificar en base64 algunos valores de cadena, y eso sería más fácil ... pero alguien que realmente quisiera esos valores de cadena podría descodificarlos fácilmente . El cifrado es la única forma de evitar realmente que alguien acceda a sus datos, y la mayoría de las personas consideran que es más seguro de lo que necesitan.
Nota al margen:
Se sabe que la ofuscación en Javascript causa algunos errores. Los ofuscadores se están poniendo un poco mejor al respecto, pero muchos atuendos deciden que obtienen suficientes beneficios al minimizarlos , y los ahorros adicionales de ofuscación no siempre merecen la pena . Si está tratando de proteger su fuente, tal vez decida que vale la pena, solo para hacer que su código sea más difícil de leer. JSMin es una buena alternativa.