La ingeniería inversa de software
El origen de la ingeniería inversa se encuentra en la ingeniería mecánica y aún hoy, para entender el funcionamiento de una máquina o de un dispositivo mecánico, se utilizan técnicas de escáner 3D, tomografías computadorizadas o mediciones de ultrasonido, entre otras. Si la ingeniería se ocupa de diseñar los componentes de un producto y de montarlos de tal forma que compongan un aparato funcional, la ingeniería inversa invierte este proceso.
El desarrollo inverso explica cómo funcionan los componentes y contribuye así a una comprensión íntegra de las funciones. Precisamente por eso es habitual que se utilice esta técnica con los productos de la competencia, pues promete la posibilidad de mejorar el propio producto o adaptarlo para mantenerse firme en el mercado. Pero son muchos los motivos que llevan a su aplicación y que no solo tienen que ver con el hardware. Te contamos cómo y por qué se utiliza la ingeniería inversa para software.
El desarrollo inverso de programas
La ingeniería inversa de código permite a los programadores invertir los procesos de desarrollo y producción de un software y, de esta forma, echar un vistazo entre las bambalinas de un programa. La deconstrucción y el desarrollo invertido de un software permite estudiar el código fuente de una aplicación. Si el código es conocido, entonces el software se convierte en un libro abierto para los expertos, que pueden cambiar, reconstruir y entender la arquitectura del programa, el funcionamiento y las estructuras internas. Además, este conocimiento sobre los procesos, adquirido gracias a la ingeniería inversa de software, también hace posible la subsanación de fallos en el programa. En el área del software, la ingeniería inversa se emplea sobre todo para el desarrollo de nuevos productos, la búsqueda de errores o el análisis de los productos de la competencia.
La ingeniería inversa define la reconstrucción de un producto ya existente, en nuestro caso, un software. Para ello, se “desmonta” el producto para entender su configuración, estructura y funcionamiento. El objetivo de la ingeniería inversa en el área del software es la reconstrucción del código de un programa existente. De esta forma, se puede optimizar, solventar errores, analizar los programas de la competencia y desarrollar nuevos productos.
Procesos de la ingeniería inversa de software
La ingeniería inversa es necesaria para el control de productos fabricados industrialmente y para la reconstrucción de software. Con la reconstrucción de un software se describe por lo general uno de los siguientes tres procesos:
- Reconstruir el código fuente de un software
- Entender las reglas de un protocolo de comunicación
- Crear el modelo de un software con posterioridad
Reconstruir el código fuente de un software
Un código fuente es un texto de un programa de ordenador escrito en un lenguaje de programación. El ordenador convierte automáticamente este texto, que es legible para las personas, en un texto legible para la máquina. Para poder deducir el código fuente de un software, se debe deshacer la traducción del lenguaje de máquina. Para ello se utiliza por ejemplo un decompilador, que es un programa de ordenador que a partir del código binario de la máquina devuelve un texto legible para las personas. Este proceso de traducción inversa del código binario en un código fuente legible por seres humanos se realiza automáticamente.
Si no se puede reconstruir el código binario por completo, se puede utilizar un desensamblador. Este programa convierte el lenguaje de máquina de codificación binaria en un lenguaje ensamblador comprensible para personas, que es a su vez analizado manualmente. En la mayoría de los casos, los programadores no son capaces de reconstruir el código fuente por completo, lo que en principio no es una desventaja, pues en la ingeniería inversa de un código se trata más bien de poder entender las ideas que se esconden detrás y menos de representar el código original completo. Incluso con códigos parciales es posible analizar el comportamiento del software o solventar fallos. Los desarrolladores de software utilizan sobre todo decompiladores y desensambladores.
Entender las reglas de un protocolo de comunicación
La ingeniería inversa también se emplea con el fin de, por ejemplo, escribir controladores para sistemas operativos de los que se desconoce el funcionamiento exacto y la estructura. Con la ayuda de un sniffer, una herramienta de software para analizar el tráfico de datos en una red, se deducen las reglas de un protocolo de comunicación. La herramienta determina, por ejemplo, si algo no concuerda en el intercambio de datos entre dos dispositivos. La valoración de esta forma de comunicación ofrece información a los programadores sobre las reglas que sigue el protocolo correspondiente.
Crear el modelo de un software con posterioridad
En este proceso, se habla más bien de un retorno de código que de ingeniería inversa, es decir, de la reconstrucción. Aquí, el código fuente reconstruido de un software se modifica y se transfiere a un modelo para poder seguir trabajando en él. Esto permite complementar y crear proyectos de software desde cero empleando el lenguaje de modelado gráfico UML para especificar, construir y documentar partes de software.
¿Cuándo se emplea la ingeniería inversa en el área del software?
La ingeniería inversa para código se puede emplear en diferentes áreas y cubre los usos más variados:
- Control de calidad de las funciones del software
- Perfeccionamiento del software propio
- Análisis de protocolos de comunicación de red
- Detección de virus, troyanos, software de extorsión y otros programas maliciosos
- Portabilidad y mantenimiento de abandonware
- Búsqueda de fallos de software
- Análisis general de un formato de archivo para un mejor entendimiento
- Mejora de las compatibilidades de software con plataformas y software de terceros
- Utilización de funciones de plataforma indocumentadas
En el área del software, la ingeniería inversa también puede emplearse para analizar los productos de la competencia. Aunque muchas empresas prohíben la ingeniería inversa de sus productos y lo incluyen en sus condiciones de licencia, la vía legal no aplica al análisis de protocolos. Esto es así porque el mismo software no es objeto de análisis de las herramientas de ingeniería inversa. Además, muchas de esas cláusulas de licencia no tienen por lo general validez en otros países. Los usuarios que adquieren un software tienen derecho a someterlo a una ingeniería inversa para comprobar la seguridad de la aplicación y solucionar fallos.