Desofuscando código

Publicado por el día 21 Oct, 2008 | 4 comentarios


Molesta bastante estar buscando códigos Open Source y encontrar que algo que te gusta está escrito por un programador de código abierto relativo. Relativo, porque piensa que no vas a respetar su obra y decide ofuscar la parte del código en la que están los créditos.

Sobre estos programadores hay tres cosas que decir:

  1. No tienen ni idea de lo que significa Software Libre / Código Abierto. Esa forma de actuar es contraria al movimiento y lo único que hace es darles mala fama personal.
  2. No son buenos programadores. Lo siento, una persona que pone etiquetas de apertura y cierre en distintas páginas con la intención de liar no se puede considerar un buen programador.
  3. Están haciendo el tonto.

Si alguna vez te ha tocado lidiar con algún código ofuscado, ya sabes que normalmente empiezan por ?> (la orden que cierra un trozo de código de php) para intentar liar el tema mucho más (para alguien que no sepa mucho de programación en PHP, pueden ser horas perdidas por esos dos caracteres).

¡Fuf! da miedo ver estos códigos. Vamos a utilizar como ejemplo el footer.php del tema Taurus:

<?php eval(gzinflate(base64_decode("bZNNb9swDIbPHbD/wOmwpAdZ2I6r4xy
63Ye1QI6GbNG2WutjojzDwH78LDtuuiAXm6RePaQo6ljkXQBRfPyQK/0HtDqw
xrmIgaWQNi3UvSTaolXLQPbxwBhQqA8sP/rOQ9W7VtvG7XcUpx6pQ4yl0gHr6
MK0u3+AYyG0kS2SiHIIA3HSCisZslY3bEl/l/v0vbsmWmlwJYAm8MENqp/AuxE
DKqimZY+ELmBzYF2M/psQowvKByTKXGgFK06z/zP5uZAF/L25ZRwzGSIaTa3
sewxTZjFu1b4BeezQICuelzi8geE5xRd8E5yBW/g4eey1faW
sdmZGbC6csILvW7cWxmdp/MNtiFNqzFJrZsJsnxb9pty9U9rBSIXBpGyiQjnEiW
vi1kX+MlDk9KotV4he7IpkQ7IT7dye/+49ELFzMdcXNC99LYfQr5fEih82Bo0E+
19PT/cbT1p1Oc41YS7QoI1UXqMezwsXVrYU94lzWCFYdw7aedrm05a/B0yZ
9+u0nL3srIzaYCgpOr//sgoIa2fVLOB8mT+RBjAX8zO48b+M5ujLtSdrniSpnJo
Wo4umL/4B"))); ?>

Pero si sabes algo de php, probablemente conocerás la función echo y la función htmlspecialchars (y te será fácil utilizarlas las dos a la vez).

echo htmlspecialchars();

Si las unimos delante de nuestro trozo de código anterior (eliminando el eval) en una página .php:

<?php echo htmlspecialchars(gzinflate(base64_decode("bZNNb9swDIbPHbD/
wOmwpAdZ2I6r4xy63Ye1QI6GbNG2WutjojzDwH78LDtuuiAXm6ReP
aQo6ljkXQBRfPyQK/0HtDqwxrmIgaWQNi3UvSTaolXLQPbxwBhQq
A8sP/rOQ9W7VtvG7XcUpx6pQ4yl0gHr6MK0u3+AYyG0kS2SiHIIA
3HSCisZslY3bEl/l/v0vbsmWmlwJYAm8MENqp/AuxEDKqimZY+EL
mBzYF2M/psQowvKByTKXGgFK06z/zP5uZAF/L25ZRwzGSIaTa3se
wxTZjFu1b4BeezQICuelzi8geE5xRd8E5yBW/g4eey1faWsdmZGb
C6csILvW7cWxmdp/MNtiFNqzFJrZsJsnxb9pty9U9rBSIXBpGyiQ
jnEiWvi1kX+MlDk9KotV4he7IpkQ7IT7dye/+49ELFzMdcXNC99L
YfQr5fEih82Bo0E+19PT/cbT1p1Oc41YS7QoI1UXqMezwsXVrYU9
4lzWCFYdw7aedrm05a/B0yZ9+u0nL3srIzaYCgpOr//sgoIa2fVL
OB8mT+RBjAX8zO48b+M5ujLtSdrniSpnJoWo4umL/4B"))); ?>

obtenemos:

?><hr /> <div id="footer"> <img class="footerbg" alt="" src="<?php
 bloginfo('stylesheet_directory'); ?>/images/taurus-sidebar.gif" /> <p> 
<?php bloginfo('name'); ?> is proudly powered by 
<a href="http://wordpress.org/">WordPress</a> | 
<a href="http://www.artemisgallery.net/taurus-wordpress-theme">T
aurus WordPress Theme</a> from <a href="http://www.typelinks.com">
Typelinks Web Directory</a> &amp; <a href="http://www.toddw.info">
ToddW</a> <a href='http://www.numaderm.com/beauty-is-not-just-skin-deep/'>
skin deep</a> <a class="footerrss" href="<?php bloginfo('rss2_url'); ?>">
Entries (RSS)</a> and <a href="<?php bloginfo('comments_rss2_url'); ?>">
Comments (RSS)</a>. <!-- <?php echo get_num_queries(); ?> queries.
 <?php timer_stop(1); ?> seconds. --> </p> </div> </div> </div> 
<?php wp_footer(); ?> </body> </html>

Ahora sólo tenemos que sustituir este código por el que está en nuestro footer.php y ajustar lo que necesitemos (además de darle un repasito tabulando y poniendo retornos de carro, que nos ayudarán mucho cuando tengamos que volver a mirar la página).

¿Os ha pasado alguna vez? ¿Os habéis encontrado con código ofuscado?

Ya sabéis. ¡Nunca os olvidéis de htmlspecialchars!