Pequeño Ofuscador de codigo PHP (Pruebenlo)

Iniciado por yovaninu, 28 Octubre 2010, 06:52 AM

0 Miembros y 1 Visitante están viendo este tema.

yovaninu

Hola a todos. Hace mucho tiempo he tenido la necesidad de ofuscar mis codigos en PHP y buscando por la red me encontre con ofuscadores on-line pero que requerian librerias extras.

Luego encontre un excelente ofuscador denominado PHP Processor, es shareware, pero tiene unas pequeñas limitantes como por ejemplo, no quita indentación de los archivos y tampoco permite definir las variables aleatorias puesto que les pone un solo patron y longitud. Sin embargo es un gran ofuscador.

Pero me he decidido a programar mi pequeño Ofuscador y me ha servido bastante, se trata de OfWiz y le he puesto algunas opciones interesantes, aunque aun falta muchas otras opciones como por ejemplo ofuscar todos los PHP de un directorio, aun asi me permito publicarlo aqui en esta parte del foro para quienes se animen a probarlo.

Aqui una breve explicación de su uso:

Interfaz:


Barra de Herr.


Explicación:
1. Permite configurar la generacion de variables aleatorias y algunas otras opciones
2. Backup de todo el directorio seleccionad (AUN NO FUNCIONA)
3. Colorea la sintaxis PHP
4. Oculta los comentarios de un archivo PHP
5. Resalta los comentarios de un archivo PHP
6. Elimina los comentarios de un archivo PHP
7. Elimina las lineas en blanco que se encuentre en un archivo PHP
8. Elimina la indentación de un archivo PHP
9. Reemplaza las variables que se encuentren por otras generadas aleatoriamente y de acuerdo a lo establecido en el punto 1
10. Aplica los puntos 6, 7, 8 y 9 de un solo paso al archivo mostrado
11. Guarda los cambios que se hizo al archivo mostrado.
12. Aplica los puntos 6, 7, 8 y 9 a todos los archivos del directorio seleccionado (YÁ FUNCIONA)


Ejemplo:
php original

Código (php) [Seleccionar]

<?php
   
/* Archivo PHP
   de Pruebas*/
   
   
include("conex.php"); //archivo de conezion a la BD
   
$link=Conectarse();
   if(
$link){
   $nombre=$_GET['nombre'];
   $apellidos=$_GET['apellidos'];   
   mysql_query("insert into prueba (Nombre,Apellidos) values ('$nombre','$apellidos')",$link);
   }   
   
   
/*Redireccionamos*/
   
header("Location: ejem07d.phtml");
   
?>




PHP Ofuscado, luego de aplicarle por ejemplo, el boton 10
(sin lineas en blanco, sin indentacion, sin comentarios y con variables ofuscadas[todo])
Código (php) [Seleccionar]

<?php
include("conex.php");
$_NIn25CptS3ZS=Conectarse();
if(
$_NIn25CptS3ZS){
$_WJFxXWL9FgN1=$_GET['nombre'];
$_dGNZxmmoi090=$_GET['apellidos'];
mysql_query("insert into prueba (Nombre,Apellidos) values ('$_WJFxXWL9FgN1','$_dGNZxmmoi090')",$_NIn25CptS3ZS);
}
header("Location: ejem07d.phtml");
?>





otro ejemplo con variables ofuscadas generadas con solo numeros [boton 1]
Código (php) [Seleccionar]

<?php
include("conex.php");
$_077443507825415429=Conectarse();
if(
$_077443507825415429){
$_535838837465153412=$_GET['nombre'];
$_738018528184598387=$_GET['apellidos'];
mysql_query("insert into prueba (Nombre,Apellidos) values ('$_535838837465153412','$_738018528184598387')",$_077443507825415429);
}
header("Location: ejem07d.phtml");
?>



Esta hecho en Basic y probado en WinXP, el source lo publicare en el foro de Basic, de momento les dejo el exe y los OCX por si no les funciona.

El exe esta limpio y no desconfiar de él, aunque para mayor seguridad pasarle el antivirus.

Descargas:
Ofwiz (en ZIP)
Los OCX (en ZIP)

Descomprimir ambos zip en una sola carpeta, luego ejecutar el exe, a la primera puede salir un error, ejecutar otra vez y todo funcionará.

Saludos

Shell Root

Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

Kasi

¿que sentido tiene ofuscar el nombre de las variables?

En realidad es mas lioso a la hora de programar, por que si en vez de acordarte que llamaste a una variable $variable la llamaste $adafnjtrj te puedes volver loco xD, seria mas util si lo que ofuscase fuesen los datos, pero aun así , buen trabajo  ;-)

xassiz~

Sería interesante poner todo sin saltos de línea :rolleyes:

[u]nsigned

Interesante!! puede serme util para darle a mis clintes los scripts ofuscados, luego de meterle un backdoor por si se hacen los locos y no pagan xDD

Creo que hace poco se toco ese tem en este mismo sub-foro  ;-)

Saludos

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!

yovaninu

Cita de: pablomi en 28 Octubre 2010, 23:17 PM
Sería interesante poner todo sin saltos de línea :rolleyes:
Si pero al menos a mi me da un error cuando se pone esto en una sola linea (sesiones)
Código (php) [Seleccionar]

<?php session_start();echo "pruebas";?>

PHP Processor lo hace pero como repito da errores

He pensado en quitar los saltos de linea excepto a aquellas que contengan 'session_start()'. trabajare en ello.

Saludos.


juancho77

Tendria que tener una funcion que llene todo de GOTO, que haga un buen revuelto de code jaj pensalo para el boton 11!

Buen trabajo amigo!

yovaninu

Cita de: Shell Root en 28 Octubre 2010, 19:55 PM
WTF! Solo en variables?
Si pero imagina este codigo
Código (php) [Seleccionar]

<?php 

function SaveFields($_395235877769193118,$_768412588487539682,$_622717084878451623,$_428524278336320264,$_443876177544517825){
$_385704394318424627=conectar();
$_515523638832940496=strrev($_395235877769193118);
$_164524131018531184=0;
$_509328683334354304[]="";
$_524350488241242933=$_428524278336320264;
for(
$_616163133412708775=0$_616163133412708775<strlen($_395235877769193118); $_616163133412708775+=$_524350488241242933){
$_509328683334354304[$_164524131018531184]=substr($_395235877769193118,$_616163133412708775,$_524350488241242933);
$_164524131018531184++;
}
foreach (
$_509328683334354304 as $_615960853591119343) {
$_843153309815347106="insert into $_768412588487539682($_622717084878451623) values('$_615960853591119343')";
if(
$_443876177544517825=="si")
mysql_query($_843153309815347106,$_385704394318424627) or die(mysql_error());
else
echo 
"<br>".$_843153309815347106;
}
return 
0;
}

?>


Como que ya se hace dificil de leer no?, quiza no sea el objetivo en general pero un nivel mas de ofuscacion a quienes queremos proteger en algo nuestros scripts.

Gracias por los comentarios. Estoy depurando el codigo por que con mas de 200 archivos de un directorio como que a veces me salta errores, pero lo vengo tratando tambien ese punto.


juancho77

Lo que pasa con las variables es que cualquier refactor incluso manual te lo vuelve a su estado original. Te sugiero mas cosas para seguir llevando esto a otros niveles:

  • agregar variables extra y luego usar estas variables para agregar condiciones extras por todos lados
  • lo de los gotos que dije antes
  • cambiar el nombre de los miembros privados

yovaninu

Cita de: juancho77 en  2 Noviembre 2010, 07:44 AM
Lo que pasa con las variables es que cualquier refactor incluso manual te lo vuelve a su estado original. Te sugiero mas cosas para seguir llevando esto a otros niveles:

  • agregar variables extra y luego usar estas variables para agregar condiciones extras por todos lados
  • lo de los gotos que dije antes
  • cambiar el nombre de los miembros privados

El 'refactor' tendria que saber las variables originales, lo cual es imposible, a lo mucho podria reemplazarlas por variablesun poco mas entendibles, es decir n1,n2,etc.. aun asi el codigo sigue un tanto ilegible.

Más aún si pensamos que asi como puse en el ultimo ejemplo, asi iran todos los archivos del proyecto, por lo que seran miles de variables reemplazadas y 'refaccionar' eso pues suena muy lioso.

Entiendo que el nivel de ofuscacion es minimo y que puedo agregarle lo que me recomiendas, sobre los 'gotos' y 'miembros privados' te agradeceria alguna idea.

De momento he estado pensando tambien en cambiar el nombre de las funciones que puedan estar en archivos externos (includes) o en el mismo archivo php, esto por ejemplo si lo hace el PHP Processor.

Saludos.