2010-01-14 50 views
16

Uso Haxe para generar código PHP. (Esto significa que usted escribe su código en el lenguaje Haxe y obtiene un montón de archivos php después de la compilación). Hoy un cliente me dijo que necesita una nueva función en un proyecto antiguo hecho con Haxe. También me dijo que había alterado algunas pequeñas cosas en el código para sus propias necesidades. Ahora primero tengo que portar sus cambios a mi código Haxe y luego agregar la nueva característica, porque de lo contrario sus cambios se sobrescribirán la próxima vez que compile el proyecto.Minificar/Ofuscar código PHP

Para evitar que esto vuelva a ocurrir, estoy buscando algún tipo de programa que minimice/ofusque el código PHP. El objetivo es hacer que el código sea ilegible/no editable como sea posible.
La herramienta ideal se ejecutaría bajo Linux y podría procesar carpetas enteras y todo lo que contenga archivos.

¿Alguien alguna sugerencia?

Respuesta

17

Estoy de acuerdo con el comentario, lo que estás haciendo es muy secreto, pero después de 10 años en este negocio puedo dar fe de una cosa: la mitad del código que obtienes es tan enrevesado que bien podría haber sido minificado, y realmente Los nombres de función/var son a menudo completamente arbitrarios, he editado js minificados y no era mucho más complicado que un código no modificado.

No pude encontrar ninguna secuencia de comandos/programa, muy probablemente porque esto es algo contra el espíritu PHP y un poco secreto, sin embargo.

Primero: Php no es sensible al espacio en blanco, por lo que el primer paso es eliminar todas las líneas nuevas y espacios en blanco fuera de la cadena.

Eso dificultaría la tarea del intermediario promedio, un programador intermedio simplemente encontraría y reemplazaría todo; {} con $ 1 \ n o algo por el estilo.

El siguiente paso sería get_defined_functions y guardar esa matriz (la clave 'user' en la matriz devuelta), deberá incluir todos los archivos para hacerlo.

Si es un código oo, también necesitará get_defined_classes. Guarde esa matriz.

Esencialmente, necesitas obtener las variables, los métodos y las instancias de clase, tendrás que instanciar la clase y get_object_vars en ella, y puedes buscar y obtener mucha otra información, como Constantes y vars de clase, etc.

Luego toma esas listas, recorrelas, crea un nombre único para cada cosa, y luego preg_replace, o str_replace eso en todos los archivos.

Asegúrate de hacer esto en una copia de prueba y ver qué errores obtienes.

Aunque, para ser claros, hay un lugar especial en el infierno reservado para las personas que se ofuscan por ofuscación.

Salida: get_defined_functionsget_declared_classes y simplemente siga los enlaces para ver lo que puede hacer.

+0

Si está buscando instancias específicas de código, esto es simple str = file_get_contents (filename) y str = preg_replace ('/ function $ var /', ...) Capta mi deriva. Solo busca estas funciones en php.neto y tendrás todo lo que necesitas. –

+1

Si necesita ayuda con regex's para las sustituciones, utilice el impresionante http://www.gskinner.com/RegExr/ –

+1

de gskinner. Estamos hablando de código generado automáticamente, esto ya se ve bastante confuso. No me tomaría un segundo modificar este código. ¿Culpar a los creadores de un compilador c por crear binarios ofuscados? – TheHippo

4

Usamos Zend Guard para codificar nuestro código PHP con ciertos clientes, pero como dijo Parrots, debe estar seguro usted posee el código. Solo codificamos en ciertas situaciones, y solo cuando es explícito que conservamos la propiedad del código, de lo contrario, Parrots tiene razón, el cliente tiene derecho a modificarlo.

+1

esto es un poco exagerado, estoy buscando algo así como quitar espacios en blanco y cambiar el nombre de las variables. – TheHippo

+0

@ctyshrock: "el cliente tiene derecho a modificarlo?" Esto no se trata de moral, solo lo que está permitido. El cliente solo tiene un "derecho" de modificar si la licencia de software acordada lo permite. Existen licencias de software que están estrictamente prohibidas, incluso si el código se proporciona en forma de fuente. Que el modelo comercial permita o prohíba la modificación del código depende de la forma en que los propietarios vean administrar el producto. –

+0

¡OMG! "¿El cliente tiene derecho a modificarlo?" @catsby está realmente muy equivocado, el cliente NO tiene derecho a modificarlo, de todos modos, realmente necesita aprender la ley de derechos de autor ... el autor de todas las obras SIEMPRE siempre retiene los derechos sobre el trabajo y no puede ser modificado, en De hecho, por ley, incluso si un cliente lo compró, si no firmó un EULA, en teoría puede demandarlos como autor incluso después de que lo compraron. (Tendrían que ir a la corte y tratar de hacer que la corte dictamine "uso justo" cualquier cosa que no sea comestible) no hay justificación para propagar una mentira (peligrosa) a menudo citada. –

4

Sé de Zendguard, Expressionengine lo usó para encriptar el código de núcleo de su versión de prueba. Siempre puedes intentarlo aunque necesites pagarlo.

Sin embargo, aunque entiendo la frustración de tener que portar sus cambios, ¿supongo que compraron el código? Ellos tienen el derecho de modificarlo. Solo tienes derecho a cobrarles más por sus cambios;) Imagina que si dejas de trabajar para ellos, ¿cómo podrían contratar a alguien más para actualizar el código?

+0

la podría haberme preguntado, tengo lo hice gratis O podrían haber tomado los archivos haxe de la subversión compartida ;-) – TheHippo

+0

+1 pero, para ser incómodo, sí, compraron el código, pero si solo entregan un código ofuscado, eso es lo que compraron. A menos que lo vendas explícitamente como una plataforma de desarrollo, no veo ningún problema. Pero puedes estar 100% seguro de que si entregas el código de texto claro y lo modifican, obtendrás dolores de cabeza de soporte y generalmente no estarán preparados para pagar. – Mawg

+0

Si entregas texto plano y una licencia de software que dice que no se les permite manipularlo, entonces no tienes la obligación de arreglarlo. En este caso, el código de ofuscación de envío ayuda a desalentar lo que ya debe detallarse en el acuerdo de licencia. Si les "vende" el código fuente, entonces puede esperar que ambos lo modifiquen y se lo den a terceros sin su permiso, por el significado habitual de "vender". –

2

Nuestra PHP Obfuscator hace exactamente el trabajo de eliminar comentarios, espacios en blanco e identificadores de cifrado.

Opera en un conjunto completo de archivos PHP para garantizar que los símbolos codificados estén codificados consistentemente en esos archivos, lo que garantiza un funcionamiento correcto incluso después de la codificación.

EDIT 2013: ahora encripta los literales de cadena para hacerlos ilegibles. Funciona bajo Windows y en Linux en Wine.

0

Acabo de encontrar minify-service para PHP. Realmente se ve útil. Dicen que esa ofuscación estará disponible pronto. Espero que esto es cierto :) http://customhost.com.ua/php-minify/

+0

esto sería ideal, pero no quita mis // comentarios. Ahora estoy viendo http://aciddrop.com/php-speedy/ – adudley

+4

3 años después 'Próximamente: las variables que ofuscan' –

+0

El enlace anterior no funciona para mí (404) –

24

Por qué no usar el php BUID en función de php_strip_whitespace()

string php_strip_whitespace (string $filename) 

Devuelve el código fuente PHP en nombre de archivo con PHP comentarios y espacios en blanco eliminados. Esto puede ser útil para determinar la cantidad de código real en sus scripts en comparación con la cantidad de comentarios. Esto es similar a usar php -w desde la línea de comandos.

+0

gracias, fue muy útil. – EmRa228

+1

Probé tu idea https://github.com/basselin/php-minify, ¡funcionó muy bien! Gracias –