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

Refrescar página web automáticamente con PHP

Cuando necesitamos refrescar nuestra página web automáticamente cada cierto tiempo, lo primero que se nos ocurre es utilizar una función en JavaScript, pero debemos saber que también lo podemos hacer con código PHP.La función de refresco de página en PHP es muy sencilla, por lo que pasamos a verla directamente:$self = $_SERVER['PHP_SELF']; //Obtenemos la página en la que nos encontramos
header("refresh:300; url=$self"); //Refrescamos cada 300 segundos Nota: 300 segundos = 5 minutos (para que los veáis más claramente).

Montar USB en Ubuntu (Server) modo consola

Si nuestro Linux no es capaz de reconocer nuestro pendrive o nuestro SO no dispone de entorno gráfico, como puede ser en el caso de que utilizemos un Server, nos vemos obligados a montar el USB de forma manual, en este caso con Ubuntu.
Dado que los pendrives son montados como unidades de almacenamiento masivo y como si se tratasen de unidades scsi, el usb será nombrado con la tipología "sdxX" donde x (puede ser a,b,c,d) será el canal donde está conectado y X (1,2,3,4,5....) será el numero de dispositivo, cabe destacar que en algunas distribuciones no es necesario el uso del numero de dispositivo X como en slackware (y slamd64).
Podemos ver las unidades disponibles con:
$ ls /dev/sd*
Aunque tal vez sea más conveniente ejecutar el comando:
$ls -l /dev/sd*
Para ver qué dispositivos se encuentran actualmente en uso
nos mostrará las unidades que se encuentran disponibles. Ahora debemos crear una carpeta para montar el usb:
#mkdir /media/usb
y ejecutamos la siguiente instrucción para mont…

Crear firewall con IpTables en Linux (Ubuntu Server)

Si no disponemos de un hardware firewall pero queremos montar uno para proteger nuestro ordenador o servidor, podemos usar un software que nos proporciona Linux y es bastante potente llamado IpTables.
Para usar IpTables en Ubuntu debemos de crear un fichero dentro del directorio /etc/init.d/ al que podemos dar cualquier nombre, aunque os recomiendo poner algo descriptivo como “iptables.cf”. Dentro de este archivo tendremos todas las reglas que queremos aplicar darle una protección extra a nuestro Ubuntu.
Un ejemplo de un fichero de configuración de IpTables es el siguiente:

## Vaciamos las reglas
iptables -F
iptables -X
iptables -t nat -F

## Establecemos politicas predeterminada
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT

# Aceptamos todo de localhost
/sbin/iptables -A INPUT -i lo -j ACCEPT

# A nuestra IP le dejamos todo
iptables -A INPUT -s 192.168.2.1 -j ACCEPT

# A otra ip int…