Swift

Ofuscar codigo java

¿Qué es ofuscar el código?


La técnica de ofuscación de código consiste en tomar un código JavaScript, por ejemplo, y hacerlo más complicado de interpretar para el ojo y/o mente humana. Muchas veces de esta forma se oculta la verdadera funcionalidad del código. Como no podemos evitar el robo de un script (ya que estos están completamente visibles en el código fuente de los sitios web), lo que sí podemos hacer es tratar de confundir al “ladrón”… eso es justamente lo que hace la ofuscación de código.
El código ofuscado no se destruye ni cambia su funcionalidad, los ofuscadores (programas para ofuscar código) simplemente toman el código, lo “ensucian”, eliminan espacios, suprimen los comentarios y devuelven un resultado pŕacticamente imposible de entender por un humano convencional. Normalmente el código ofuscado es una sola línea que contiene todo el script.
Entre las ventajas de ofuscar código se pueden mencionar:
  1. Dificultar la lectura: como mencioné más arriba, el proceso de ofuscación dificulta el entendimiento del código y es casi imposible leerlo cuando se encuentra ofuscado.
  2. Reducir el tamaño de los scripts: cuando un script se ofusca normalmente el tamaño del archivo se reduce considerablemente, y como resultado de esto las páginas cargan mucho más rápido. Librerías como jQuery y plugins utilizan esta técnica, y a sus versiones ofuscadas les llaman minified.
En Internet todo lo que desarrollemos del lado del cliente está expuesto a plagio y en tres palabras se puede resumir: no podemos evitarlo.

Ofuscadores de código JavaScript

En línea hay muchísimas herramientas para ofuscar código JavaScript y de otros lenguajes. Estas herramientas son llamadas ofuscadores. Algunos ofuscadores de código son los siguientes:

Ejemplo de ofuscación de código

Vamos a realizar un pequeño ejemplo utilizando el ofuscador de código JavaScript de Daft Logic. Colocaremos en el campo Input el siguiente código JavaScript (no tiene ningún fin, lo escribí solo para dar un ejemplo real):
//ejemplo de funcion
function fntHolaMundo(strParametro){
    var iEdad=27, strNombre='Cali Rojas';
    
    for(var iCont=0, iCont<iEdad, iCont++){
        document.getElementById('divEdad_'+iCont).innerHTML=iCont+1;
    }
}

El resultado que tenemos al ofuscar el código JavaScript es el siguiente:
eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}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}('9 a(8){4 3=7,5=\'6 b\';c(4 2=0,2<3,2++){g.f(\'e\'+2).d=2+1}}',17,17,'||iCont|iEdad|var|strNombre|Cali|27|strParametro|function|fntHolaMundo|Rojas|for|innerHTML|divEdad_|getElementById|document'.split('|'),0,{}))

Si tratamos de leer el código vamos a darnos cuenta de que cambió demasiado y no tiene ningún sentido, pero sigue funcionando perfectamente. Eso es un código JavaScript ofuscado.

¿Qué es desofuscar el código?

Ya hemos visto un ejemplo sencillo y claro de cómo ofuscar código JavaScript. Pero ahora, qué pasa si “perdimos” el código fuente original y tenemos que hacer alguna modificación en el script? Sería casi imposible interpretar el código ofuscado, más en un script grande. Ya vimos la cantidad de basura que se nos generó en unas cuantas líneas, así que ya se imaginarán que pasaría con un script de 100 líneas o más.
Desofuscar código consiste en aplicar ingeniería inversa al código ofuscado y obtenerlo en un formato entendible para realizar las modificaciones o adaptaciones que sean necesarias.

¿Cómo desofuscar código JavaScript?

Existen muchos desofuscadores de código JavaScript, pero para el ejemplo vamos a utilizar jsbeautifier. Entonces bien, tomemos el código ofuscado y lo pegamos en el campo disponible en jsbeautifier:
eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}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}('9 a(8){4 3=7,5=\'6 b\';c(4 2=0,2<3,2++){g.f(\'e\'+2).d=2+1}}',17,17,'||iCont|iEdad|var|strNombre|Cali|27|strParametro|function|fntHolaMundo|Rojas|for|innerHTML|divEdad_|getElementById|document'.split('|'),0,{}))

El código desofuscado que nos devuelve jsbeautifier está prácticamente igual al original y es el siguiente:
function fntHolaMundo(strParametro) {
    var iEdad = 27,
        strNombre = 'Cali Rojas';
    for (var iCont = 0, iCont < iEdad, iCont++) {
        document.getElementById('divEdad_' + iCont).innerHTML = iCont + 1
    }
}

Será este el típico caso de seguridad por oscuridad?

Conclusión

En Internet nada está seguro :P Probablemente si alguien llega a copiarnos un script es porque le agrada el trabajo que hicimos, entonces cuál es el problema? Nos estamos haciendo famosos! Hace años cuando estaba estudiando Ingeniería Informática, le hice unas preguntas (que no recuerdo) a mi profesor de Programación web y respondió: cualquier contenido que usted suba a Internet es público y cualquiera lo puede tomar, si no quiere que le roben sus desarrollos entonces no suba nada.
Que quede claro: este no es un artículo para mostrar como plagiar scripts, es solo una ayuda para aquellos que hayan perdido sus códigos fuentes originales y no sepan como desofuscar códigos JavaScript. Meramente educativo el contenido ;).

Escrito por Cali Rojas

Senior Front-End/Back-End Web Developer y diseñador de GUI's, nacido en Costa Rica. Utilizo tecnologías como JavaScript Orientado a Objetos, HTML5, CSS3 y jQuery; MySQL, PHP, Python, LESS, etc. Linuxero por elección (Debian). Autor de jsmConsole (JavaScript Mobile Console) y Mopix.js (Mobile Pixel Perfect). Fundador de este blog.

También podría gustarte

1 comentarios

Reproductor