Foro Black Hat SEO

Versión completa: Como ofuscar a tope un código JavaScript gratis
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hace casi 2 años os puse un par de herramienta que ayudan a la tarea de desofuscar código JavaScript.
http://foroblackhat.com/hilo-desofuscar-...zyTtHWLTCJ
Tengo que decir que a día de hoy, se encuentran cada vez más códigos javascript que se vuelve una tarea complicada la desofuscación. Han evolucionado mucho el mundo de la ofuscación de JavaScript, de manera que ya se hace irrenocible, os voy a dejar los 2 pasos que sigo yo para dejar un código javascript bien ofuscado y gratis Sonrisa

Os pongo un ejemplo que vais a ir viendo como se va ofuscando:
Código:
function hola(msg)
{
    alert(msg);
}
hola("Bienvenido a ForoBlackhat");

Ahora lo voy a pasar por la primera herramienta que es:
http://www.danstools.com/javascript-obfuscate/index.php

El código que me devuelve ofuscado es:
Código:
eval(function(p,a,c,k,e,d){e=function(c){return c};if(!''.replace(/^/,String)){while(c--){d[c]=k[c]||c}k=[function(e){return d[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}('2 1(0){3(0)}1("6 4 5");',7,7,'msg|hola|function|alert|a|ForoBlackhat|Bienvenido'.split('|'),0,{}))

Este código es super facil recuperar al original simplemente usando jsbeautifier.org nos lo devuelve, probarlo Sonrisa

Y la segunda herramienta que uso como entrada el código resultante de la primera,
https://javascriptobfuscator.com/Javascr...cator.aspx
el código queda:

Código:
var _0xd4d7=["\x32\x20\x31\x28\x30\x29\x7B\x33\x28\x30\x29\x7D\x31\x28\x22\x36\x20\x34\x20\x35\x22\x29\x3B","\x7C","\x73\x70\x6C\x69\x74","\x6D\x73\x67\x7C\x68\x6F\x6C\x61\x7C\x66\x75\x6E\x63\x74\x69\x6F\x6E\x7C\x61\x6C\x65\x72\x74\x7C\x61\x7C\x46\x6F\x72\x6F\x42\x6C\x61\x63\x6B\x68\x61\x74\x7C\x42\x69\x65\x6E\x76\x65\x6E\x69\x64\x6F","\x72\x65\x70\x6C\x61\x63\x65","","\x5C\x77\x2B","\x5C\x62","\x67"];eval(function(_0xfb97x1,_0xfb97x2,_0xfb97x3,_0xfb97x4,_0xfb97x5,_0xfb97x6){_0xfb97x5=function(_0xfb97x3){return _0xfb97x3};if(!_0xd4d7[5][_0xd4d7[4]](/^/,String)){while(_0xfb97x3--){_0xfb97x6[_0xfb97x3]=_0xfb97x4[_0xfb97x3]||_0xfb97x3};_0xfb97x4=[function(_0xfb97x5){return _0xfb97x6[_0xfb97x5]}];_0xfb97x5=function(){return _0xd4d7[6]};_0xfb97x3=1};while(_0xfb97x3--){if(_0xfb97x4[_0xfb97x3]){_0xfb97x1=_0xfb97x1[_0xd4d7[4]]( new RegExp(_0xd4d7[7]+_0xfb97x5(_0xfb97x3)+_0xd4d7[7],_0xd4d7[8]),_0xfb97x4[_0xfb97x3])}};return _0xfb97x1}(_0xd4d7[0],7,7,_0xd4d7[3][_0xd4d7[2]](_0xd4d7[1]),0,{}))

Ya sólo con ver ese código quita las ganas de tratar de desofucar Sonrisa. Se puede securizar aún más y seguramente haya desofuscadores más potentes que puedas lograr algo, pero ya con estas dos herramientas podemos asegurar nuestros códigos javascript
Osea que ofuscas en 2 pasos: uno con la primera herramienta y luego ofuscas el resultado obtenido, ahora ya con la segunda herramienta...
Buen aporte.
Hola Sauron. Soy nuevo en este foro. Ando investigando técnicas de ofuscación y desofuscación de código Javascript y al leer tu publicación me registré para poder comentar. Como bien dices de seguro hay muchos ofuscadores más potentes y son los que yo ando buscando ya que el ofuscador que mencionaste ya no me parece tan eficiente debido a que encontré la manera de obtener el código casi 100% original.
Para mostrar lo que digo, tomaré como ejemplo el mismo código ofuscado que pusiste en tu publicación:

Código:
var _0x3d47=["\x32\x20\x31\x28\x30\x29\x7B\x33\x28\x30\x29\x7D\x31\x28\x22\x36\x20\x34\x20\x35\x22\x29\x3B","\x7C","\x73\x70\x6C\x69\x74","\x6D\x73\x67\x7C\x68\x6F\x6C\x61\x7C\x66\x75\x6E\x63\x74\x69\x6F\x6E\x7C\x61\x6C\x65\x72\x74\x7C\x61\x7C\x46\x6F\x72\x6F\x42\x6C\x61\x63\x6B\x68\x61\x74\x7C\x42\x69\x65\x6E\x76\x65\x6E\x69\x64\x6F","\x72\x65\x70\x6C\x61\x63\x65","","\x5C\x77\x2B","\x5C\x62","\x67"];eval(function(_0x7f21x1,_0x7f21x2,_0x7f21x3,_0x7f21x4,_0x7f21x5,_0x7f21x6){_0x7f21x5= function(_0x7f21x3){return _0x7f21x3};if(!_0x3d47[5][_0x3d47[4]](/^/,String)){while(_0x7f21x3--){_0x7f21x6[_0x7f21x3]= _0x7f21x4[_0x7f21x3]|| _0x7f21x3};_0x7f21x4= [function(_0x7f21x5){return _0x7f21x6[_0x7f21x5]}];_0x7f21x5= function(){return _0x3d47[6]};_0x7f21x3= 1};while(_0x7f21x3--){if(_0x7f21x4[_0x7f21x3]){_0x7f21x1= _0x7f21x1[_0x3d47[4]]( new RegExp(_0x3d47[7]+ _0x7f21x5(_0x7f21x3)+ _0x3d47[7],_0x3d47[8]),_0x7f21x4[_0x7f21x3])}};return _0x7f21x1}(_0x3d47[0],7,7,_0x3d47[3][_0x3d47[2]](_0x3d47[1]),0,{}))

Si tomamos este código y lo pegamos en la consola del navegador así como se muestra:
[Imagen: 8O0PFGw.jpg]

Luego borramos la palabra eval así:
[Imagen: 3iBCWUg.jpg]

Y pulsamos enter, obtenemos el código original desofuscado:
[Imagen: d4AIDeR.jpg]

Sonrisa
@TheoXT muy bueno, desde la consola nunca lo había hecho jejeje Sonrisa. El tema es que es imposible ocultar el código JS al final el navegador tiene que interpretarlo si o si. Pero bueno ya la mayoría de usuarios que vean el código JS ofuscado seguramente pasen de él Sonrisa
Una buena forma adicional es usar uglify cuando se comprime y ofusca el código. Básicamente, lo que hace, es cambiar los nombres de las variables y funciones. Dando como resultado un código ilegible para quién intente hacer una desofuscación. Vamos, el tío no tendrá ni puñetera idea que está viendo. Gran sonrisa
Vengo a este foro a aportar un poco más. Existe esta página gratuita que ofrece un método de ofuscación un poco más avanzado que las anteriores. Espero que les sirva:
https://javascriptobfuscator.herokuapp.com/