El origen de la in­ge­nie­ría inversa se encuentra en la in­ge­nie­ría mecánica y aún hoy, para entender el fu­n­cio­na­mie­n­to de una máquina o de un di­s­po­si­ti­vo mecánico, se utilizan técnicas de escáner 3D, to­mo­gra­fías co­mpu­tado­ri­za­das o me­di­cio­nes de ul­tra­so­ni­do, entre otras. Si la in­ge­nie­ría se ocupa de diseñar los co­m­po­ne­n­tes de un producto y de montarlos de tal forma que compongan un aparato funcional, la in­ge­nie­ría inversa invierte este proceso.

El de­sa­rro­llo inverso explica cómo funcionan los co­m­po­ne­n­tes y co­n­tri­bu­ye así a una co­m­pre­n­sión íntegra de las funciones. Pre­ci­sa­me­n­te por eso es habitual que se utilice esta técnica con los productos de la co­m­pe­te­n­cia, pues promete la po­si­bi­li­dad de mejorar el propio producto o adaptarlo para ma­n­te­ne­r­se firme en el mercado. Pero son muchos los motivos que llevan a su apli­ca­ción y que no solo tienen que ver con el hardware. Te contamos cómo y por qué se utiliza la in­ge­nie­ría inversa para software.

El de­sa­rro­llo inverso de programas

La in­ge­nie­ría inversa de código permite a los pro­gra­ma­do­res invertir los procesos de de­sa­rro­llo y pro­du­c­ción de un software y, de esta forma, echar un vistazo entre las ba­m­ba­li­nas de un programa. La de­co­n­s­tru­c­ción y el de­sa­rro­llo invertido de un software permite estudiar el código fuente de una apli­ca­ción. Si el código es conocido, entonces el software se convierte en un libro abierto para los expertos, que pueden cambiar, re­co­n­s­truir y entender la ar­qui­te­c­tu­ra del programa, el fu­n­cio­na­mie­n­to y las es­tru­c­tu­ras internas. Además, este co­no­ci­mie­n­to sobre los procesos, adquirido gracias a la in­ge­nie­ría inversa de software, también hace posible la su­b­sa­na­ción de fallos en el programa. En el área del software, la in­ge­nie­ría inversa se emplea sobre todo para el de­sa­rro­llo de nuevos productos, la búsqueda de errores o el análisis de los productos de la co­m­pe­te­n­cia.

De­fi­ni­ción: in­ge­nie­ría inversa

La in­ge­nie­ría inversa define la re­co­n­s­tru­c­ción de un producto ya existente, en nuestro caso, un software. Para ello, se “desmonta” el producto para entender su co­n­fi­gu­ra­ción, es­tru­c­tu­ra y fu­n­cio­na­mie­n­to. El objetivo de la in­ge­nie­ría inversa en el área del software es la re­co­n­s­tru­c­ción del código de un programa existente. De esta forma, se puede optimizar, solventar errores, analizar los programas de la co­m­pe­te­n­cia y de­sa­rro­llar nuevos productos.

Procesos de la in­ge­nie­ría inversa de software

La in­ge­nie­ría inversa es necesaria para el control de productos fa­bri­ca­dos in­du­s­tria­l­me­n­te y para la re­co­n­s­tru­c­ción de software. Con la re­co­n­s­tru­c­ción de un software se describe por lo general uno de los si­guie­n­tes tres procesos:

  • Re­co­n­s­truir el código fuente de un software
  • Entender las reglas de un protocolo de co­mu­ni­ca­ción
  • Crear el modelo de un software con po­s­te­rio­ri­dad

Re­co­n­s­truir el código fuente de un software

Un código fuente es un texto de un programa de ordenador escrito en un lenguaje de pro­gra­ma­ción. El ordenador convierte au­to­má­ti­ca­me­n­te 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 tra­du­c­ción del lenguaje de máquina. Para ello se utiliza por ejemplo un de­co­m­pi­la­dor, 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 tra­du­c­ción inversa del código binario en un código fuente legible por seres humanos se realiza au­to­má­ti­ca­me­n­te.

Si no se puede re­co­n­s­truir el código binario por completo, se puede utilizar un des­en­sa­m­bla­dor. Este programa convierte el lenguaje de máquina de co­di­fi­ca­ción binaria en un lenguaje en­sa­m­bla­dor co­m­pre­n­si­ble para personas, que es a su vez analizado ma­nua­l­me­n­te. En la mayoría de los casos, los pro­gra­ma­do­res no son capaces de re­co­n­s­truir el código fuente por completo, lo que en principio no es una de­s­ve­n­ta­ja, pues en la in­ge­nie­ría inversa de un código se trata más bien de poder entender las ideas que se esconden detrás y menos de re­pre­se­n­tar el código original completo. Incluso con códigos parciales es posible analizar el co­m­po­r­ta­mie­n­to del software o solventar fallos. Los de­sa­rro­lla­do­res de software utilizan sobre todo de­co­m­pi­la­do­res y des­en­sa­m­bla­do­res.

Entender las reglas de un protocolo de co­mu­ni­ca­ción

La in­ge­nie­ría inversa también se emplea con el fin de, por ejemplo, escribir co­n­tro­la­do­res para sistemas ope­ra­ti­vos de los que se desconoce el fu­n­cio­na­mie­n­to exacto y la es­tru­c­tu­ra. Con la ayuda de un sniffer, una he­rra­mie­n­ta de software para analizar el tráfico de datos en una red, se deducen las reglas de un protocolo de co­mu­ni­ca­ción. La he­rra­mie­n­ta determina, por ejemplo, si algo no concuerda en el in­te­r­ca­m­bio de datos entre dos di­s­po­si­ti­vos. La va­lo­ra­ción de esta forma de co­mu­ni­ca­ción ofrece in­fo­r­ma­ción a los pro­gra­ma­do­res sobre las reglas que sigue el protocolo co­rre­s­po­n­die­n­te.

Crear el modelo de un software con po­s­te­rio­ri­dad

En este proceso, se habla más bien de un retorno de código que de in­ge­nie­ría inversa, es decir, de la re­co­n­s­tru­c­ción. Aquí, el código fuente re­co­n­s­trui­do de un software se modifica y se tra­n­s­fie­re a un modelo para poder seguir tra­ba­ja­n­do en él. Esto permite co­m­ple­me­n­tar y crear proyectos de software desde cero empleando el lenguaje de modelado gráfico UML para es­pe­ci­fi­car, construir y do­cu­me­n­tar partes de software.

¿Cuándo se emplea la in­ge­nie­ría inversa en el área del software?

La in­ge­nie­ría inversa para código se puede emplear en di­fe­re­n­tes áreas y cubre los usos más variados:

  • Control de calidad de las funciones del software
  • Pe­r­fe­c­cio­na­mie­n­to del software propio
  • Análisis de pro­to­co­los de co­mu­ni­ca­ción de red
  • Detección de virus, troyanos, software de extorsión y otros programas ma­li­cio­sos
  • Po­r­ta­bi­li­dad y ma­n­te­ni­mie­n­to de aba­n­do­n­wa­re
  • Búsqueda de fallos de software
  • Análisis general de un formato de archivo para un mejor en­te­n­di­mie­n­to
  • Mejora de las co­m­pa­ti­bi­li­da­des de software con pla­ta­fo­r­mas y software de terceros
  • Uti­li­za­ción de funciones de pla­ta­fo­r­ma in­do­cu­me­n­ta­das

En el área del software, la in­ge­nie­ría inversa también puede emplearse para analizar los productos de la co­m­pe­te­n­cia. Aunque muchas empresas prohíben la in­ge­nie­ría inversa de sus productos y lo incluyen en sus co­n­di­cio­nes de licencia, la vía legal no aplica al análisis de pro­to­co­los. Esto es así porque el mismo software no es objeto de análisis de las he­rra­mie­n­tas de in­ge­nie­rí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 in­ge­nie­ría inversa para comprobar la seguridad de la apli­ca­ción y so­lu­cio­nar fallos.

Ir al menú principal