JMiur [E]

Cuando un script está "ofuscado" no significa que esté enojado y haga cosas raras sólo para molestarnos, significa que está encriptado. De vez en cuando vemos esas cosas en códigos que nos dicen que utilicemos y no hay ningún problema, funcionan bien hasta que uno quiere hacer algún pequeño cambio en cuyo caso, simplemente resulta imposible.

¿Para qué se hace eso? Por dos razones: reducir su tamaño e impedir que se copie; ambas razones son ... digamos que discutibles por no decir absurdas.

Básicamente, minimizar un script es quitar espacios innecesarios, tabulaciones, comentarios y saltos de línea además de optimizar variables, funciones, etc, para que la cantidad de caracteres sea menor y de tal modo, se cargue más rápido. Eso es razonable cuando se trata de librerías o frameworks sofisticadas de gran volumen, cosas que uno ni siquiera se atrevería a mirar pero, si son scripts "normales", es bastante ridículo ya que sólo hará que su edición sea más difícil y la "ganancia" es prácticamente nula.

La cantidad de líneas de código que tenga un script no tiene relación con su velocidad. Puede poseer cuatro líneas y ser lenta o cien y ser rápida; lo que importa, no es su extensión sino qué procesos ejecuta y cómo los ejecuta.

Ofuscar scripts para impedir que se copien o se modifiquen es una tontera. Como cualquier cosa que carga el navegador, una vez que está allí, es editable, copiable y usable; sólo hay que saber cómo. No es un tema de copyrights o piraterías, es un tema absolutamente técnico, exento de interpretaciones morales.

Los scripts son cargados por el navegador, ya sea que estén en la misma página o en archivos externos; para que funcionen, deben ser accesibles, si son accesibles, pueden ser leídos y por lo tanto, copiados o modificados; ofuscarlos, sólo agrega un paso extra a esa tarea.


Hay muchos compresores/encriptadores, Google tiene el suyo Closure Compiler, Yahoo tiene el YUI compressor, incluso hay algunos online como JavaScript Obfuscator o /Packer/ que es de los más utilizados.

Por ejemplo, si quiero que esto se "ofusque":
function SINO(cual) {
   var elElemento=document.getElementById(cual);
   if(elElemento.style.display == 'block') {
      elElemento.style.display = 'none';
   } else {
      elElemento.style.display = 'block';
   }
}
marco la opción Base62 encode y Shrink variables y me dará como resultado este jeroglífico:
eval(function(p,a,c,k,e,r){e=function(c){return c.toString(a)};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('3 4(a){5 b=6.7(a);8(b.0.1==\'2\'){b.0.1=\'9\'}c{b.0.1=\'2\'}}',13,13,'style|display|block|function|SINO|var|document|getElementById|if|none|||else'.split('|'),0,{}))
Es obvio que esto tiene su proceso inverso así que puedo usar esas mismas herramientas para "desofuscar", no es nada del otro mundo.

Minimizar u ofuscar scripts tiene un problema extra, a veces, el resultado obtenido no funcionará porque son herramientas automáticas y es posible que determinadas cosas sean malinterpretadas.

Una alternativa extra la ofrece jsbeautifier que es una herramienta online donde podemos copiar y pegar cualquier código JavaScript y formatearlo con distintas opciones, agregando tabulaciones, llaves que falten, etc. Del mismo modo, basta poner cualquier script minimizado o encriptado y hacer click en el botón Beatify javascript superior para que lo haga legible y por lo tanto, editable.

Sólo hay una forma segura de evitar que alguien copie algo: NO PUBLICARLO en la web.

14 comentarios:

Daniel Fernández  

Sorprendente la herramienta que ofrece jsbeautifier, como unos scripts raros que tenía lo pasa a algo sencillo. Gracias por compartirlo!

Responder
CUENTAGOTAS  

Sin duda alguna Jorge, si uno está en la red es por que quiere ser notado y cuando se es notado se es copiado, emulado, malinterpretado, etc, etc, etc.

Responder
cass  

"Sólo hay una forma segura de evitar que alguien copie algo: NO PUBLICARLO en la web."
Eso es así, incluso si es un sistema que estas vendiendo, un trabajo por encargo, no le veo la gracia a estar ofuscando el código.

saludos!

Responder
oloman  

El mensaje final creo que todavía no queda claro para algunos, pero aunque no nos guste, es así.

Responder
Adalberto  

Muy útil. Hoy quería editar un slider y ni el css ni las variables javascript encontraba, gracias a tu entrada me entero de esto de la encriptación y cómo solucionarlo. La entrada me cayó como caída del cielo.

Responder
JUANSI  

JMiur: La imagen GIF que quiero instalar es "ANIMADA". Se suceden una fotografía tras otra. Revisé que pasaba en picassa, y tienes razón... allí se ve animada. El problema es al ponerla en un gadget, pues no se ve animada. Se ve solo la primera imagen, como si fuera una simple fotografía. ¿Que puedo hacer?

P.D.= Escribo con negrita por que estoy experimentando a ver que cosas me acomodan. Antes escribía con mayúsculas, pero termina aburriendo
(aquí en tu mismo blog descubrí que las letras de los coments podían ser en negrita. Antes no me había dado cuenta). Eso. Te dejo un gran abraZOO ;)

P.D.2= ¿Este coment debí haberlo hecho en la misma entrada donde hice el anterior referente al tema? ¿o es más facil que lo veas si comento así, en la ultima entrada?

Responder
Nico  

He utilizado alguna vez el jsbeautifier, solo por curiosidad, pero solo pasaba a molestar :-)

No, la seguridad no existe en la red, porque tampoco existe en la vida real, y ambas son la misma cosa. Lo único que se puede hacer es lograr jorobar un poco, y alimentar más las ganas de saltear o descifrar tal o cual cosa. Es como darle palomitas de maiz a un geek.

Si usamos librerías muy grandes no viene mal comprimirlas, porque librerías como jQuery, ni nos vamos a detener en leerlas, ni nos interesa saber como funcionan internamente. Solamente las usamos y hasta cierto punto. O mejor, a veces ni las usamos.

¿De quién es algo que todo el mundo puede acceder y ver, copiar, guardar, y volver a modificarlo y usarlo?

Responder
La hormiguita  

Gracias, interesante el tema, y me encanto como está escrito... clarísimo. Hace cuanto que no usaba la palabra ofuscado!!!!!... vamos a desempolvara y activarla.

Responder
JMiur  

Daniel Fernández:
Para eso esla herramienta; incluso, es muy útil cuando el formato de los scripts es poco claro.

CUENTAGOTAS:
No hay duda que es así :D

cass:
Eso es así siempre. No hay por qué quejarse, es una parte esencial de la web. La "privacidad" es absolutamente relativa.

oloman:
Tratar de evitarlo es como tratar de evitar que el viento nos despeine :D

Perfecto, Adalberto :D

JUANSI:
No sé cuál es la imagen así que no puedo decirte donde está el error. Si en Picasa la ves animada, se vera animada donde la insertes.
PD: Las negritas son muy molestas e inútiles; como toda herramienta, tienen su función: destacar algo.
Sí, la lógica es continuar la conversación donde se inició.

Nico:
Usted no molesta ... demasiado :D

Es tal cual, ciertas "prohibiciones" sólo alimentan las ganas de transgredirlas.

¿De quién es algo que todo el mundo puede acceder y ver, copiar, guardar, y volver a modificarlo y usarlo? ... mio no :D

La hormiguita:
Me gusta es idea de desempolvar palabras :D

Responder
MiHawk  

Genial que hicieras esto Miur, ahora si aprendi mucho mas sobre scripts. A por cierto soy el que te envio un mensaje gmail sobre este problema, y mil gracias por ayudarme. ;)

Responder
JMiur  

Pués a usted se debe este post, MiHawk :-D

Responder
Ark  

Yo un script no creo que lo "ofuscara".

Pero los post si pudiera, los ofuscaría todos, es agotador intentar crear siempre contenido própio, y que la gente te lo copy pastee sin citarte si quiera.

Aunque es posible que muchos de los autores de scripts y códigos que uso en mi plantilla piensen lo mismo, de mí.

Responder
NOTIPAK  

UNA PREGUNTA...

OFUSCAR EL CODIGO SCRIP, ¿AFECTA EL TIEMPO DE CARGA DE LAS WEBS?

JMiur  

El tiempo de carga depende del tamaño del archivo, del lugar donde está alojado y de lo que haga el script.

Responder

¿Quiere dejar un comentario?

recuerde que los comentarios están siendo moderados y serán publicados a la brevedad ...

Todos los archivos y demos alojados en Fileden han sido redireccionados y deberían estar funcionando correctamente.
De todos modos, también puede accederse a ellos a través de SkyDrive

Nota: sólo los miembros de este blog pueden publicar comentarios.

Si le gusta ir a lo seguro utilice este botón para abrir los comentarios en una ventana modal en esta misma pagina.

Si añora tiempos idos, use este enlace para agregar un comentario al viejo estilo ...

 
CERRAR