miércoles, 20 de febrero de 2008

Recuperando código Java

La semana pasada me cambiaron el ordenador que uso en el trabajo. Estuve anotando todo lo que quería conservar pero por desgracia se me olvido un pequeño proyecto en java que había iniciado un par de semanas antes y no había subido todavía a Subversión. ¡Vaya! Tanto dar la lata a todo el mundo con las bondades de Subversion y sufro un olvido como este.

El caso es que tampoco era una gran pérdida. Para entendernos, se trataba de un prototipo que había desarrollado en un par de ratos para atacar un webservice de otra compañía y todavía estábamos considerando utilizarlo o no. Una de las opciones era darlo por perdido y decantarnos por la segunda opción que estábamos barajando, pero mi amor propio me obligaba a recuperarlo. Por suerte lo había desplegado en el servidor de producción, así que la situación era que tenía el ejecutable pero no el fuente.

Se me ocurrió entonces buscar algo para hacer ingeniería inversa sobre el ejecutable. Tenía el vago recuerdo de que en java daba bastante buen resultado aunque nunca había profundizado en el tema. Después de una breve búsqueda encontré información sobre "decompilers" y después de un breve vistazo me decanté por JAD. En la propia página del proyecto encontraremos algún entorno gráfico para los que no quieran utilizarlo a modo de comando.


El resultado fue bastante bueno. Pude recuperar el fuente de la docena (aproximadamente) de ficheros de la aplicación y sólo encontré un par de errores generados durante el proceso:
  • El primero me dejaba una instrucción después del return de una de las funciones, por lo que nunca se llegaría hasta ella.
  • El segundo fue un bucle for mal formado sintácticamente.

Una vez corregidos pude reconstruir el proyecto y volver a desplegarlo como otra instancia en el servidor. ¡Todo correcto! Curiosamente, el final de la historia es que hemos desestimado el prototipo y finalmente hemos hecho el cliente del webservice en PHP.


Technorati Tags: , ,

1 comentario:

Anónimo dijo...

Ohh, que pena, tanto trabajo para nada.
Yo que tu empalaba al que prefirió no usar todo tu trabajo.