2009-12-11 9 views
35

He desarrollado una secuencia de comandos Perl que tiene una lógica comercial confidencial.¿Cómo puedo ocultar mi script Perl para dificultar la ingeniería inversa?

Tengo que darle esta secuencia de comandos a otro programador de Perl para probarlo en su entorno. Él puede tratar de extraer la lógica en mi programa. Así que quiero que mi guión sea muy difícil de entender.

¿Alguna sugerencia?

+19

1) Es Perl, no PERL. 2) Buena suerte. Esto es imposible. Un lenguaje tan intrincado como Perl tiene tanto potencial de ofuscación, y muchos más guionistas que conocerán cada rincón oscuro de este potencial de ofuscación. Su mejor opción es escribirlo en código máquina y distribuir el binario con el enlace XS, pero al final, nada de lo que haga ralentizará realmente a nadie que quiera comprender su código. –

+14

Tenga en cuenta que sea lo que sea que elija, un enfoque como este: http://search.cpan.org/~jjore/B-Deobfuscate-0.20/lib/B/Deobfuscate.pod Podría muy bien tener éxito en deshacer tu trabajo. –

+7

@Chris Lutz: los kiddies de scripts son, por definición, no buenos programadores. – user359996

Respuesta

124

Sugiero que haga que esta persona y su administración firmen un acuerdo legalmente exigible que prohíba todas las formas de ingeniería inversa, y cualquier otro medio para obtener acceso a las cosas que desea proteger.

La ofuscación no puede protegerlo contra un determinado intento de ingeniería inversa. Es teórica y prácticamente imposible.

3

Puede consultar perlcc. No garantiza la corrección, pero debería funcionar bien si no estás haciendo demasiado funky en tus scripts.

+14

-1 Perl bashing es un pasatiempo apropiado para comentarios, pero las respuestas deben ser informativas y relativamente imparciales. Además, 'perlcc' es todavía experimental y puede no funcionar, y debe usarse con extrema precaución y no para el código de producción. Y eso realmente no detendrá a alguien que está decidido. –

+1

Editado el sarcasmo. –

+3

Se retrajo el -1, pero 'perlcc' sigue siendo una solución deficiente (a un problema ciertamente irresoluble, por lo que no hay penalización por intentarlo). –

7

Utilice Acme::Bleach para blanquear el código de limpieza. Luego ofusque el código blanqueado resultante. Sin embargo, cualquier código codificado/ofuscado puede decodificarse, ya que el intérprete de Perl tiene que decodificarlo de todos modos.

+0

no, primero ofuscar, luego blanquear – ysth

+0

Eso es incluso mejor que Acme :: EyeDrops – mob

9

Primero, déjenme decir que están ladrando al árbol equivocado. Lo que quiere hacer es un enfoque equivocado por muchas razones.

Segundo, revisa Filter::Crypto (y PAR::Filter::Crypto). Lea todo el manual antes de su inicio.

42

No intente confundir su Perl. Estás perdiendo el tiempo allí. Muestro a mucha gente cómo romper ese tipo de cosas en Mastering Perl solo para que no intenten hacerlo.

¿Ha considerado implementar las cosas delicadas en C y enviar un binario precompilado con una interfaz Perl? Es relativamente fácil de hacer y tiene el mismo efecto sin depender de un truco inteligente. La persona hábil y determinada aún puede aplicar ingeniería inversa, pero eso es cierto para cualquier solución. Tienes que compilar la biblioteca para cada plataforma, pero si esto es lo suficientemente importante como para protegerlo, es lo suficientemente importante como para cobrar lo suficiente a la gente para usarlo.

Como alternativa, coloque las cosas sensibles detrás de un servicio web para que nunca obtengan el código.

Una táctica inteligente que he visto implica un archivo que se adapta a cada cliente, ya sea a través del formato o el contenido. Esto sirve como algo así como una marca de agua de bajo grado que usa un código banal, comentarios o documentos. Encuentra esa curiosa secuencia de texto y sabes la fuente de la fuga.

La respuesta comercial es no dar el programa a personas en las que no confías, o hacer las penalidades lo suficientemente rígidas para desalentarlo.

1

en OSX al menos, proporcionan tres grandes órdenes:

parl 
par.pl 
pp 

parl - Convertir un archivo en un par binario ejecutable que no necesita Perl u otros módulos para funcionar

par.PL - hacer que los archivos par de sus scripts de Perl

pp - compilar un script de Perl en un binario (pero todavía requiere Perl)

No es seguro si estos están disponibles para Windows o Linux.

Una cosa interesante que noté fue que cuando usé un comando en mi script de Perl compilado para indicar el directorio de trabajo actual, era lo mismo que el directorio de mi nuevo ejecutable binario. Hubiera pensado que habría descomprimido algo en/tmp y ejecutarlo desde allí, pero ese no era el caso.

Cuestiones relacionadas