Pregunta

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 esto posible?

¿Fue útil?

Solución

Ofuscación :

Pruebe YUI Compressor . Es una herramienta muy popular, creada, mejorada y mantenida por el equipo de IU de Yahoo.

También puede usar:

Datos de cadena privada:

Mantener los valores de cadena privados es una preocupación diferente, y la ofuscación realmente no será de gran beneficio. Por supuesto, al empaquetar su fuente en un desastre confuso y minificado, tiene una versión ligera de seguridad a través de oscuridad . La mayoría de las veces, es su usuario quien está viendo la fuente, y los valores de cadena en el cliente están destinados a su uso, por lo que ese tipo de valor de cadena privada a menudo no es necesario.

Si realmente tuviera un valor que nunca quisiera 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. Esa sería probablemente una de las opciones más seguras, pero también una gran cantidad 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 decodificarlos fácilmente . El cifrado es la única forma de evitar que alguien acceda a sus datos, y la mayoría de las personas consideran que es más seguridad de la que necesitan.

Nota al margen :

La ofuscación en Javascript se sabe que causa algunos errores. Los ofuscadores están mejorando un poco al respecto, pero muchos equipos deciden que ven suficientes beneficios de minimización y gzipping , y los ahorros adicionales de la ofuscación no lo son siempre vale 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.

Otros consejos

Me sorprende que nadie haya mencionado el Compilador de cierre de Google. No solo minimiza / comprime, analiza para encontrar y eliminar el código no utilizado, y reescribe para una minificación máxima. También puede hacer verificaciones de tipo y advertirá sobre errores de sintaxis.

JQuery recientemente cambió de YUI Compresser a Closure Compiler, y vio un " mejora sólida "

La ofuscación nunca puede funcionar realmente. Para cualquiera que realmente quiera obtener su código, es solo un aumento de velocidad. Peor aún, evita que sus usuarios corrijan errores (y envíen las correcciones a usted), y le dificulta diagnosticar problemas en el campo. Es una pérdida de tiempo y dinero.

Hable con un abogado sobre las leyes de propiedad intelectual y cuáles son sus opciones legales. " Código abierto " no significa " ; la gente puede leer la fuente " ;. En cambio, 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 copian su código están en violación y (en la mayoría del mundo) tiene opciones legales para detenerlas.

La única forma en que realmente puede proteger su código es no enviarlo. Mueva el código importante del lado del servidor y haga que su código Javascript público haga llamadas Ajax.

Vea mi respuesta completa sobre ofuscadores aquí.

Puede ofuscar la fuente de JavaScript todo lo que quiera, pero siempre será de ingeniería inversa solo por requerir que todo el código fuente se ejecute realmente en la máquina cliente ... la mejor opción que puedo pensar es tener todo su procesamiento se realiza con el código del lado del servidor, y todo el código de cliente que hace JavaScript es enviar solicitudes de procesamiento al servidor mismo. De lo contrario, cualquiera siempre podrá realizar un seguimiento de todas las operaciones que realiza el código.

Alguien mencionó base64 para mantener las cadenas seguras. Esta es una idea terrible. Base64 es inmediatamente reconocible por los tipos de personas que desean realizar ingeniería inversa de su código. Lo primero que harán es desencriptarlo y ver qué es.

Hay varias 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 puede realizar ingeniería inversa.

Para ese fin, hay varias opciones que he usado hasta cierto punto en horas extras:

  • Compresor YUI . El compresor JavaScript de Yahoo! Hace un buen trabajo al condensar 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 con más frecuencia. 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 se ofusca, pero sí uglifica. &"; Su objetivo principal es minimizar el tamaño de su fuente para una carga más rápida en los navegadores.

  • Obfuscator de JavaScript gratuito . Esta es una herramienta basada en la web que intenta ofuscar su código al codificarlo. 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.

Lo que haría:

A. ¡Troll al hacker!

Esto será en la segunda parte mi LANZADOR de código secreto secreto falso / ofuscado. El que ves en el código fuente.

¿Qué significa este código?

  1. carga el código real
  2. establece un encabezado personalizado
  3. 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. Ofusca un poco el código

¿Qué es eso?

  1. ese es el mismo código que el anterior en base64
  2. este no es el código SECRETO de JavaScript

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

C Cree un archivo php difícil de mostrar con el código real dentro

¿Qué significa este código php?

  1. Comprueba el referente correcto (dominio / dir / código de su lanzador)
  2. Comprueba el encabezado personalizado
  3. Comprueba la variable POST personalizada

Si todo está bien, le mostrará el código correcto, más un código falso o prohibición de 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 controladores de eventos en el JavaScript SECRET probablemente sea accesible ... debe definirlos afuera con el código de inicio y apuntando a una función SECRET anidada.

SO ... ¿hay alguna manera fácil de obtener el código? <=>

No estoy seguro de si esto funciona, pero estoy usando Chrome y comprobé Elementos, Recursos, Red, Fuentes, Cronología, Perfiles, Auditorías, pero no encontré la línea anterior.

nota1: si abres la url Troll.php desde el elemento Inspeccionar - > network 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=';}; ?>

Pruebe JScrambler . Le di una vuelta recientemente y me impresionó. Proporciona un conjunto de plantillas para la ofuscación con configuraciones predefinidas para aquellos a quienes no les importan mucho los detalles y solo quieren hacerlo rápidamente. También puede crear ofuscación personalizada eligiendo las transformaciones / técnicas que desee.

El problema con los idiomas interpretados es que envía la fuente para que funcionen (a menos que tenga un compilador para bytecode, pero, de nuevo, es bastante trivial descompilar).

Entonces, si no desea sacrificar el rendimiento, solo puede actuar sobre nombres de variables y funciones, por ejemplo. reemplazándolos con a, b ... aa, ab ... o a101, a102, etc. Y, por supuesto, elimine la mayor cantidad de espacio / líneas nuevas que pueda (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 ...

Contrariamente a la mayoría de las otras respuestas que sugiero contra YUI Compressor; debe usar Google Closure .

No mucho porque comprime más, pero principalmente porque detectará errores de JavaScript como a = [1,2,3,]; que hacen que IE se vuelva loco.

Una aplicación basada en Javascript no 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 generalmente se realiza para reducir el tamaño del script, en lugar de " protect " eso. 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, pero la mayoría tiene la palabra " compresor " (o " minifier ") en su nombre por una razón ..

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 encriptadas. Embellezca it y cambie el nombre de las variables y usted obtendrá 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 funcione más difícil, dándole más tiempo para recuperar su acceso, entonces use compiladores javacript :

Debe usar el Compilador de cierre en la compilación avanzada, 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 escribe en su estilo de codificación .

Puedo recomendar Utilidad JavaScript de 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 ofuscar frente a minificar, no soy un gran admirador de lo primero. Hace que la depuración sea imposible (Error en la línea 1 ... & "; Espere, solo hay una línea &";) Y siempre toman tiempo para desempaquetar. Pero si necesitas ... bueno.

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 le tomará más tiempo a un Hacker volver a promulgar su código que en realidad si lo reescribiera desde cero. Reescribir y clonar es lo que realmente no puedes detener. ¡Después de todo, somos personas libres!

Dean Edward's Packer es un excelente ofuscador, aunque principalmente ofusca el código, no ningún 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

He estado usando Jasob durante años y es sin duda el mejor ofuscador que existe.
Tiene una interfaz de usuario avanzada, pero sigue siendo intuitiva 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 use la función sort para agruparlas todas y marque fuera de ellos como objetivos para la ofuscación.

Los usuarios aún pueden ver su fuente, pero es mucho más difícil descifrar cuando sus variables privadas se convierten de algo como _sUserPreferredNickName a a.

El motor registrará automáticamente el número de variables específicas y las priorizará para obtener la máxima compresión.

No trabajo para Jasob y no obtengo nada de promocionarlos, solo ofrezco algunos consejos amigables.
La desventaja es que no es gratis y es un poco caro, pero vale la pena cuando se compara con las alternativas: las opciones 'gratis' ni siquiera se acercan.

¿Has probado Bananascript ? Produce código altamente comprimido y completamente ilegible.

Estoy usando la utilidad Closure-Compiler para la ofuscación java-script. Minifica el código y tiene más opciones para la ofuscación. Esta utilidad está disponible en el código de Google en la siguiente URL:
Herramientas de cierre

Pero hoy en día escucho mucho de UglifyJS. Puedes 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 el nodo .js Eso & # 8217; s a la par con cierre

Pronto le daría la oportunidad a UglifyJS.

Tengo la impresión de que algunas empresas (por ejemplo: JackBe) ponen código JavaScript encriptado dentro de archivos * .gif, en lugar de archivos JS, como una medida adicional de ofuscación.

Como un ofuscador / compresor JavaScript / HTML / CSS también puede probar Patu Digua .

Pruebe esta herramienta Javascript Obfuscator

Lo utilicé en mi juego HTML5, no solo reduje su tamaño de 950 KB a 150, sino que también hizo que el código fuente de los compiladores de cierre ilegibles y los minificadores sean reversibles. Personalmente, no sé cómo revertir esta ofuscación.

Definitivamente deberías considerar echar un vistazo a Obfuscriptor .

Voy más allá de los típicos trucos de minificación de Javascript que hemos visto en otras herramientas como Compresor YUI o Cierre de Google .

El código ofuscado se parece más a cifrado. A diferencia de todo lo que he visto antes.

Este se minimiza pero no se ofusca. Si no desea utilizar la línea de comandos Java, puede pegar su javascript en un formulario web.

Si usa una biblioteca de JavaScript, considere Dojo Toolkit que es compatible (después de modificaciones menores) con la compilación de modo avanzado del compilador de cierre.

Dojo & # 8211 ; La única biblioteca de JavaScript Compatible con The Closure Compiler

El código compilado con el modo Closure Advanced es casi imposible de realizar ingeniería inversa, incluso pasando por un embellecedor, ya que la base de código completa (incluida la biblioteca) está ofuscada. También es 25% pequeño en promedio.

El código JavaScript que se minimiza (Compresor YUI, Uglify, etc.) es fácil de aplicar ingeniería inversa después de pasar por un embellecedor.

He usado esto en el pasado, y hace un buen trabajo. No es gratis, pero definitivamente deberías echar un vistazo.
JavaScript Obfuscator & amp; Codificador

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top