Ir al contenido principal

Ofuscar código PHP

Nuestro código es nuestro mayor tesoro (mi tesorooo) y por tanto seguro que muchas veces nos interesa protegerlo lo máximo posible para que no nos copien todo el trabajo realizado durante muchas horas.

Una de las opciones, de pago, es Zend Guard. Se trata de una herramienta de escritorio que protege las aplicaciones de la ingeniería inversa y no autorizada mediante el suministro de codificación y ofuscación, así como proteger de uso sin licencia y de la redistribución.

Como herramientas gratuita podemos destacar la herramienta de jcarlosrendon.morelosplaza o como opción más "casera" las funciones que nos proponen en el siguiente foro foro.undersecurity.net

Otras aplicaciones de escritorio -gratuitas esta vez- que podemos utilizar es MyPhpGuard la cual utiliza un algoritmo bastante básico o phpprotect la que nos promete una buena ofuscación.

Veremos cómo funcionan algunas de las aplicaciones (gratuitas) que hemos descrito anteriormente

Para el código fuente

else if((isset($_GET['wb']))&&($_GET['wb']!="")){ if((isset($_GET['cl']))&&($_GET['cl']!="")){ $colors = "['".$_GET['cl']."']"; } else $colors = '["0099CC","AA66CC","99CC00","FFCC00"]'; $content = file_get_contents($_GET["wb"]); echo $content; }

El código generado por la herramienta MyPhpGuard es

else{$mystr1s2242 = '["0099CC","AA66CC","99CC00","FFCC00"]';}}else if((isset($_GET['wb']))&&($_GET['wb']!="")){ if((isset($_GET['cl']))&&($_GET['cl']!="")){$mystr1s2242 = "\x5b\x27".$_GET['cl']."\x27\x5d";} else $mystr1s2242 = '["0099CC","AA66CC","99CC00","FFCC00"]';$mystr1s2243 = file_get_contents($_GET["\x77\x62"]); echo $mystr1s2243;}

El generado por phpProtect

else if((isset($_GET['wb']))&&($_GET['wb']!="")){ if((isset($_GET['cl']))&&($_GET['cl']!="")){ $PHPprotectV6 = "['".$_GET['cl']."']"; } else $PHPprotectV6 = '["0099CC","AA66CC","99CC00","FFCC00"]'; $PHPprotectV7 = file_get_contents($_GET["wb"]); echo $PHPprotectV7; }

Y finalmente el generado por jcarlosrendon

// Este archivo es protegido por la ley del derechos de propiedad literaria. La ingenieria inversa de este codigo se prohibe estrictamente. eval(gzinflate(base64_decode('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')));

Como conclusión, en base a todas las herramientas y métodos probados, creo que la ofuscación solo puede servir para que el código no sea fácilmente legible, pero cualquier persona con unos conocimientos mínimos podría realizar el proceso inverso y ver nuestro código real de una forma muy rápida. Si debiese de elegir uno, elegiría el de jcarlosrendon debido a su complejidad de código a simple vista y a que usa base 64 para ello.

¿Has utilizado o conoces algún otro?

Comentarios

Entradas populares de este blog

Exportar archivo de configuración de WinSCP

S i estamos trabajando con WinSCP seguro que ya hemos guardado distintas sesiones para acceder a ellas directamente en futuras ocasiones y evitar volver a introducir todos los parámetro de configuración. Seguro que también muchos de vosotros habéis agrupado las sesiones en carpetas dependiendo de la naturaleza de las mismas. Este trabajo ocupa un valioso tiempo que no nos podemos permitir repetirlo para todos los equipos que tenemos, por lo que lo más lógico es configurar todas las sesiones y exportar su configuración al resto de equipos , teniendo una sola versión y evitarnos tener que volver a configurar todas las sesiones en cada uno. El problema es que WinSCP no nos muestra la opción de exportar de una forma sencilla, por lo que tendremos que buscarnos la vida. Lo primero que debemos hacer es abrir el programa y acceder a Preferencias -> Almacenamiento (o su equivalente al inglés) En esta pantalla deberemos indicar que almacene la configuración en un archivo

Asignar valores por defecto a input=”file” y a textarea

S eguro que muchos os habéis estado rompiendo la cabeza buscando la forma de dar un valor por defecto a el tipo de dato input=”file” . Pues que sepáis que no se puede!!! No se puede dar un valor por defecto a los campos de este tipo, ya que hacen referencia a una ruta física local y podrían surgir problemas de seguridad. Lo que se puede hacer, por ejemplo, es mostrar la imagen o el nombre del dato que tenemos almacenado y si el usuario desea modificarla, ofrecerle la opción de cargar una nueva. La etiqueta textarea , aunque pueda parecérnoslo, no se trata de un input y para darle valor por defecto simplemente debemos mostrar el texto que deseemos entre su marca de apertura y de cierre. Es decir, en caso de que lo que deseemos mostrar por defecto sea una variable, introduciremos el siguiente código: <textarea id="txtobservaciones" name="txtobservaciones" rows="2" cols="40" class="txt" ><?=$_POST["txtobservaciones"] ?&

Configuración de archivo de Logs para IpTables

I pTables se usa para configurar, mantener e inspeccionar las tablas de reglas de filtrado de IPs en el kernel de Linux, pero por defecto, su sistema de logs no es todo lo completo esperamos. Por defecto, la mayoría de los logs del sistema se guardan en el fichero /var/log/messages pero en este caso vamos a configurar un nuevo fichero para que almacene únicamente los logs que generaremos con algunas reglas en IpTables , creando así su propio archivo de bitácora . Lo primero que debemos hacer es configurar el archivo /etc/syslog.conf , que se trata de un archivo de configuración en el que se indica el modo en que los mensajes del sistema son bitacorizados a través de la utilidad syslogd que se instala y configura por defecto en todos los sistemas GNU/Linux . Debemos añadir al final del fichero la siguiente sentencia: kern.warning /var/log/iptables.log Con esto indicamos que se almacenen los mensajes provienen del kernel con prioridad 4 o superior ('warning' es el nivel de