Hace algunos años me tocó dar la clase de «Ingeniería Inversa» como parte de un programa de maestría en la UNITEC. Adicionalmente el tópico lo he tocado varias veces como parte del temario de la materia de «Informática Forense» del programa de Maestría en informática de la UPIICSA.
La ingeniería inversa o retroingeniería es el proceso que se lleva a cabo con el objetivo de obtener información del diseño, elaboración y funcionamiento de un producto a partir de éste. El fin es determinar cuáles son sus componentes, de qué manera interactúan entre sí y cuál fue el proceso de elaboración.
Aunque pareciera algo ilegal, lo cierto es que esta actividad tanto es parte de los procesos de inovación y libre competencia como también que se encuentra en una nebulosa zona gris entre aquello de lo que es permitido y lo que es éticamente cuestionable. Muchos países tienen esta actividad prohibida en su legislación, y claro es parte de una de las principales preocupaciones en lo que se refiere a derechos de autor y propiedad intelectual.
Actualmente, los productos más comúnmente sometidos a ingeniería inversa son los programas de computadoras y los componentes electrónicos, pero realmente cualquier producto puede ser objeto de un análisis de Ingeniería Inversa.
El método se denomina así porque avanza en dirección opuesta a las tareas habituales de ingeniería, que consisten en utilizar datos técnicos para elaborar un producto determinado. En general, si el producto u otro material que fue sometido a la ingeniería inversa fue obtenido en forma apropiada, entonces el proceso es legítimo y legal. De la misma forma, pueden fabricarse y distribuirse, legalmente, los productos genéricos creados a partir de la información obtenida de la ingeniería inversa, como es el caso de algunos proyectos de software libre.
El programa Samba es un claro ejemplo de ingeniería inversa, dado que permite a sistemas operativos UNIX compartir archivos con sistemas Microsoft Windows. El proyecto Samba tuvo que investigar información confidencial (no liberada al público en general por Microsoft) sobre los aspectos técnicos relacionados con el sistema de archivos Windows. Lo mismo realiza el proyecto WINE para el conjunto de API de Windows y OpenOffice.org con los formatos propios de Microsoft Office. La ingeniería inversa también se ha aplicado para entender la estructura del sistema de archivos NTFS y así poder desarrollar drivers para la lectura-escritura sobre el mismo (principalmente para sistemas basados en GNU/Linux).
La ingeniería inversa, como método de resolución de problemas supone profundizar en el estudio de su funcionamiento, hasta el punto de que se pueda llegar a entender, modificar y mejorar dicho modo de funcionamiento. En el caso concreto del software, se conoce por ingeniería inversa a la actividad que se ocupa de descubrir cómo funciona un programa, función o característica de cuyo código fuente no se dispone, hasta el punto de poder modificar ese código o generar código propio que cumpla las mismas funciones. Aunque, hay que tener ciertas consideraciones, ya que también puede ser usado con fines ilícitos. Por ejemplo, la gran mayoría del software licenciado incluye una prohibición expresa de aplicar ingeniería inversa a su código, con el intento de evitar que se pueda modificar su código y su compra para usarlo.
La ingeniería inversa nace en el transcurso de la Segunda Guerra Mundial, cuando los ejércitos enemigos incautaban insumos de guerra como aviones u otra maquinaria de guerra para mejorar las suyas mediante un exhaustivo análisis. Una película que ilustra muy bien esta idea es Paycheck (2003).
Un comentario en “Ingeniería inversa”