Ingeniería Inversa de software [desde cero]
Tags: ingenieriainversa, seguridadinformatica, educacion, softwaredevelopment
Published: 2024-05-11 10:44:04

En este tutorial aprenderás los conceptos básicos de la ingeniería
inversa y cómo aplicarla de manera ética y responsable en el campo de la informática.

## Introducción

En el ámbito gastronómico, hay ciertos platos o postres que nos llaman la atención por su sabor perfecto. Al no poder acceder a esas fórmulas culinarias, solo tenemos una opción: adquirir una muestra de, por ejemplo, una tarta de queso, y con observación y análisis descubrir tanto los ingredientes como el procedimiento de su elaboración.

Al igual que los ingredientes se convierten en una perfecta tarta de queso, el código fuente se convierte en un programa.

![Imagen que contiene Diagrama Descripción generada
automáticamente](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8mkq687tg2j904wbuto3.png)

Durante toda la carrera de ingeniería informática invertimos mucho tiempo en construir para obtener el producto (ejecutable). En este proceso aprendemos técnicas y herramientas prácticas que nos permiten transformar ideas abstractas en soluciones concretas que pueden ser implementadas y utilizadas en el mundo real.

¿Pero cómo se *hackea* algo? Está muy bien programar para obtener un programa, pero ¿cómo alguien puede conseguir modificar el comportamiento
de dicho programa a partir de un ejecutable lleno de unos y ceros? Este proyecto viene a saciar dicha necesidad de curiosidad que cualquiera de nosotros, los informáticos, hemos tenido. Se pretende ofrecer un punto de vista educativo distinto al que estamos acostumbrados, explorando el
análisis de software desde una perspectiva más allá del desarrollo.

## Motivación

Se realizará el análisis de dos productos del mundo real alejando la abstracción a la que estamos acostumbrados en los entornos educativos para acercarnos al mundo real.

En mi universidad, existe una aplicación oficial en la que se pueden visualizar las calificaciones finales de las asignaturas. Los alumnos como usuarios de ésta, echamos en falta un sistema de notificaciones que te avise cuándo se publica o cambia una calificación. Esta carencia de funcionalidad provoca que en época de exámenes estemos continuamente refrescando manualmente la aplicación para ver si hay alguna nota nueva.

No solo nos provoca cierto estrés tener que continuamente estar pendientes de "y si las han colgado ya" sino que el hecho de estar visitando la aplicación recurrentemente por todos los estudiantes sobrecargue el sistema innecesariamente. Se pretende descubrir de qué forma la aplicación se comunica con el servidor de calificaciones para hipotéticamente replicar dicho funcionamiento y detectar cambios en ellas.

En este mismo contexto de la universidad, hay ciertas asignaturas de informática que requieren de acceso y uso de librerías para realizar ejercicios prácticos. Dado que alguna de ellas está restringida para el uso exclusivo en los ordenadores del aula, surge la necesidad de buscar soluciones que permitan su utilización fuera del campus. Esta situación despierta nuestra curiosidad como programadores y nos empuja a investigar los principios de la ingeniería inversa como herramienta educativa, siempre dentro de un marco ético, respetando las políticas de la universidad.

### Renuncia de responsabilidad

Generalmente, (dependiendo de cada país) aplicar el proceso de ingeniería inversa a un producto de software con motivos educativos o de mejora de seguridad, se considera justo siempre que no viole la propiedad intelectual o los derechos de autor del software en cuestión.
De esta misma forma hacer uso de este proceso para crear productos alternativos a la competencia, suele considerarse ilegal. Además, es importante destacar que incluso cuando la ingeniería inversa se realiza con fines legítimos, como la educación o la mejora de la seguridad, los investigadores deben actuar con precaución para asegurar que no compartan o utilicen el código fuente descubierto durante el proceso, especialmente si dicho código está protegido por derechos de autor.
Mientras que el conocimiento adquirido a través de la ingeniería inversa puede ser muy valioso para el aprendizaje, su aplicación debe hacerse siempre dentro del marco legal y ético adecuado, respetando las patentes y los derechos de autor.

## Objetivos 

Se busca ofrecer un punto de vista educativo alternativo mostrando que simplemente con la **modificación de unos cuantos bytes** el comportamiento de un **programa puede cambiar**.

También se busca quitar peso al concepto de "hackear" que cotidianamente asociamos a expertos en seguridad informática o a seres encerrados con malas intenciones. Conocer estas técnicas ayuda a formar una habilidad que, utilizada de forma éticamente correcta, puede contribuir significativamente al avance tecnológico.

Al enfocar este aprendizaje desde una perspectiva ética y responsable, se pretende concienciar a los futuros informáticos sobre la importancia de usar sus habilidades para el bien común.


¡Sigue la serie para descubrir la ingeniería inversa de dos soluciones del mundo real!