Las herramientas para ingeniería inversa de software: depuradores, desensambladores y decompiladores
En muchas ocasiones sucede que un software no cumple con algunas de las características principales de arquitectura, funcionalidades o estructura, y requiere rehacer nuevamente todo el proceso.
Las empresas usuarias del sistema contratan un nuevo equipo de desarrollo, que debe estudiar el software, para poder comprender cómo resolver las necesidades planteadas.
En ese caso, los analistas deben levantar requisitos tanto desde el cliente como del propio software ya desarrollado para determinar que corregir y cómo hacerlo.
Además, deben escribir nuevamente los artefactos asociados, determinar una arquitectura adecuada y diseñar los diagramas.
Cuando se inicia el proceso de desarrollo de software desde cero, estas actividades de ingeniería se realizan al principio, para dar paso a una implementación más rápida, robusta y con bases bien fundamentadas.
En los casos como los descritos, en los que el software o parte de este ya existe, se conoce como ingeniería inversa.
Este tipo también puede aplicarse cuando la documentación asociada a los expedientes de proyectos no existe, están incompletos o no se corresponden con el modelo deseado por la empresa de desarrollo.
Es importante destacar que, aunque algunas cosas del producto se modifiquen con la aplicación de esta técnica, el sistema no modifica su objeto social o el objetivo para el que fue desarrollado.
Algunos de los beneficios que aporta la aplicación de la ingeniería inversa son:
- Se facilita el mantenimiento al comprender mejor el sistema.
- Se generan nuevas formas de presentación del proceso al que responde el sistema.
- Recuperar y/o actualizar la información perdida, o aquellos cambios que no fueron correctamente documentados.
- Detectar fallos generados de otros cambios en el sistema, no detectados durante las pruebas de software.
- Detectar componentes de posible reutilización para sistemas de similar objetivo o tecnologías.
Tipos de herramientas para ingeniería inversa
Realizar este tipo de ingeniería requiere conocimientos, capacidad de análisis, pero sobre todo utilizar las herramientas adecuadas.
Las herramientas existentes (que son muchas), se agrupan en tres tipos:
Depuradores
Consiste en un programa que permite leer paso a paso el código fuente de un software.
Los depuradores crean puntos de control para detectar dónde hay un fallo y puntos de rupturas (breakpoint) para detener la ejecución del código según condiciones determinadas por el desarrollador para conocer datos precisos de algunos atributos.
Desensambladores
Es un programa que ejecuta las acciones contrarias a un ensamblador. Significa que este tipo de herramienta intenta recrear el código partiendo del código máquina binario. Busca mostrar el código en un formato más amigable y comprensible.
Decompiladores o compiladores inversos
Esta clasificación de herramientas traduce código de bajo nivel de abstracción a un lenguaje de mayor nivel de abstracción. Toma el código binario ejecutable e intenta recrear el código fuente de alto nivel partir de él.
Ahorra en software
Únete al boletín premium semanal con los mejores lifetime deals y ofertas de software.
Entornos de desarrollo (IDEs)
Los entornos de desarrollo, conocidos como IDEs, no son propiamente herramientas de ingeniería inversa, pero poseen funcionalidades que permiten realizarla.
La mayoría de estos programas permiten recorrer el código fuente de un sistema paso a paso, creando puntos de rupturas o generando recorrido para comprobar el comportamiento del software.
Existen muchos IDEs, incluso para una misma tecnología.
Algunos de ellos son:
- Eclipse
- CODE:: BLOCKS
- NetBeans
- PhpStorm
- PyCharm
IntelliJ IDEA
IDA Pro
El nombre completo de esta herramienta es Desensamblador Interactivo, y como indica es del tipo de desensamblador.
A pesar de ellos, posee algunas particularidades bajo las cuales puede utilizarse como un depurador o un descompilador.
El primer caso es solo para algunos ejecutable dentro de sistemas operativos Windows, Mac OS, Linux, entre otros.
En segundo solo es posible lograrse mediante un plugins de pago desarrollado para este sistema.
Una de las principales ventajas de IDA es el análisis del código de manera automática, realizando incluso referencias cruzadas con otras secciones de código, llamadas de funciones y comunicación con APIs.
De todas formas, es posible que sea necesario ejecutar algunas acciones de manera automática.
Esta herramienta es multiplataforma y soporta varios tipos de ficheros.
GDB o GNU Debugger
Esta herramienta se clasifica como un depurador para el compilador GNU, que se distribuye bajo la licencia GPL.
Una característica favorable es su condición de programa portable, por lo que puede utilizarse con facilidad.
Esta solo disponible para plataformas UNIX, y dentro de este grupo funciona para varios sistemas.
Además, soporta también varios lenguajes de programación como C, C++ y Fortran.
Originalmente no se desarrolló una interfaz gráfica para esta herramienta, y su control se realizaba mediante la línea de comandos.
Sin embargo, existen varias páginas de presentación que se han diseñado, como:
- Data Display Debugger
- GDBtk/Insight
- Modo GUD en Emacs
Algunas de las ventajas de GDB son:
- Posibilidad de trazar y modificar la ejecución de un programa.
- Controlar y alterar los valores de las variables internas del programa.
APKTool
Esta herramienta está creada especialmente creada para realizar ingeniería inversa a aplicaciones para Android.
Se ejecuta en plataformas Windows, Linux, y MacOS; y tiene la capacidad de descodificar una aplicación, llevándola prácticamente a su forma original.
En el código fuente que se obtiene se pueden realizar los cambios deseados, y utilizando el propio APKTool volver a construir la aplicación.
Permite también revisar el código paso a paso y crear archivos .apk de forma automática.
Ghidra
El origen de este framework viene de la Agencia de Seguridad del Gobierno de los Estados Unidos, y fue liberado su código fuente después de varios años.
Es una herramienta para ingeniería inversa de software reconocida por su robustez, pero especialmente por ser indicada con fines de ciberseguridad.
Algunas de las opciones que permite son:
- Desmontaje
- Montaje
- Descompilación
- Graficación
- Scripting
Tras su liberación, es posible utilizar Ghidra en plataformas Windows, Linux y MacOS.
Espero que la información que te ofrezco en este artículo pueda ayudarle a entender mejor sus sistemas.
¡Hasta un próximo artículo!