Tendencias:
Descubre cómo realizar Ingeniería Inversa

Recomendaciones para realizar el proceso de Ingeniería Inversa.

28/01/2019
Número de visualizaciones

¿En alguna ocasión has oído hablar de ingeniería inversa?, ¿Sabes en qué consiste?

Para ver la importancia de la ingeniería inversa solo hay que trasladarse a los años 80.

En aquella época IBM era el rey tecnológico y nadie (ni siquiera Apple o Microsoft) podían competir con ella.

Hasta que una empresa llamada Phoenix Technologies dio un vuelco al mercado replicando la BIOS utilizada por IBM (hasta el momento líder del sector) mediante el uso de ingeniería inversa.

Gracias a este hecho, el gran beneficiado fue Microsoft que aprovechó esto para dar el “boom” tecnológico con su sistema operativo MS-DOS y posteriormente Windows.

Podemos por lo tanto concluir que, el uso de ingeniería inversa cambió la historia de la informática.

Si quieres conocer más en detalle qué es la ingeniería inversa y qué herramientas se utilizan para su aplicación sigue leyendo este artículo.

ingeniería inversa 1

¿Qué es la ingeniería inversa?

Comencemos por el principio, explicando en qué consiste la ingeniería inversa.

La ingeniería inversa (en inglés, reverse engineering) es el proceso o técnica de descubrir los principios tecnológicos de un producto, herramienta, dispositivo o sistema.

Este descubrimiento se puede realizar mediante el razonamiento abductivo (haciendo conjeturas) de su estructura, función y operación.

Los productos más típicamente sometidos a esta técnica son los programas para ordenador pero cualquier producto puede ser objeto de análisis de ingeniería inversa.

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.

Aplicar ingeniería inversa a algo supone profundizar en el estudio de su funcionamiento, hasta el punto de que podamos llegar a entender, modificar y mejorar dicho modo de funcionamiento.

La aplicación de ingeniería inversa nunca cambia la funcionalidad del producto objeto de la aplicación sino que permite obtener productos que indican cómo se ha construido el mismo.

Su realización permite obtener los siguientes beneficios:

  1. Reducir la complejidad del sistema
  2. Generar diferentes alternativas
  3. Recuperar y/o actualizar la información perdida (cambios que no se documentaron en su momento
  4. Detectar efectos laterales
  5. Facilitar la reutilización

Existen los siguientes tipos de ingeniería inversa:

  • Datos
  • Lógica o proceso
  • Interfaces de usuario

ingeniería inversa 2

Herramientas para ingeniería inversa

Cuando un desarrollador crea un programa, comienza escribiendo el código fuente en el lenguaje de programación seleccionado para acabar compilándolo y crear un programa ejecutable.

Llegado este punto, nadie podría editar el programa sin disponer del código fuente inicial para realizar una nueva compilación del mismo, y en esto es precisamente en lo que se basa el cracking.

La técnica de ingeniería inversa constituye la piedra angular del cracking.

Se basa en la descompilación, o compilación inversa, de un programa a un lenguaje de programación, generalmente, el más básico que existe que es el lenguaje ensamblador.

A continuación veremos las principales herramientas utilizadas para este proceso:

Depuradores

Un depurador es un programa utilizado para controlar a otros programas.

Permite analizar un código paso a paso y establecer puntos de control para buscar posibles fallos.

Lo más interesante de los depuradores son los puntos de ruptura (breakpoint) ya que permiten detener la ejecución de un programa cuando se cumpla una condición y ver el estado de todas las variables y la memoria en dicho momento.

Los principales depuradores para Windows son:

  • OllyDbg: Depurador de código ensamblador de 32 bits para sistemas operativos Microsoft Windows. Pone especial énfasis en el análisis del código binario, esto lo hace muy útil cuando no está disponible el código fuente del programa.
  • WinDBG: es una pieza de software gratuita de Microsoft que puede ser usada para depuración local en modo usuario, o incluso depuración remota en modo Kernel.
  • Visual DuxDebugger: Desensamblador depurador de 64 bits para Windows, especialmente útil cuando el código fuente no está disponible.
  • GNU Debugger (gdb): Es un depurador portable que se puede utilizar en varias plataformas Unix y funciona para varios lenguajes de programación como C, C++ y Fortran. GDB ofrece la posibilidad de trazar y modificar la ejecución de un programa. El usuario puede controlar y alterar los valores de las variables internas del programa.
  • SoftICE: Es un depurador en modo kernel propietario y de pago para Microsoft Windows. SoftICE es capaz de suspender todas las operaciones en Windows cuando se desee, lo cual resulta útil para depurar drivers, ya que es importante conocer cómo se accede al hardware así como las funciones del sistema operativo.

Desensambladores

Un desensamblador es exactamente lo contrario de un ensamblador.

Tal como un ensamblador convierte código escrito en ensamblador en código máquina binario, un desensamblador invierte el proceso e intenta recrear el código en ensamblador partiendo del código máquina binario.

Los desensambladores intentan por tanto mostrar el código del lenguaje de la máquina en un formato más amigable a los ojos de los humanos.

A continuación indicaremos los principales desensambladores según el sistema operativo:

  • Windows
    • IDA Pro
    • PE Explorer
    • W32DASM
    • IDA 6.6
    • IDA Pro Freeware 5.0
    • BORG disassembler
    • HT Editor
    • diStorm64
  • Linux
    • Bastard Disassembler
    • Ciasdis
    • Objdump
    • GDB
    • LDasm
  • Mac OS
    • GDB
    • Machonist
    • Otool
    • Ndisasm

Decompiladores o compiladores inversos

Un decompilador es un programa de ordenador que realiza la operación inversa a un compilador, es decir, traduce código de bajo nivel de abstracción a un lenguaje de mayor nivel de abstracción.

Por lo tanto, un decompilador toma el código binario ejecutable e intenta recrear el código fuente de alto nivel partir de él.

A continuación vemos algunos de los decompiladores más utilizados:

  • DCC Decompiler: Sólo permite decompilar ejecutables DOS basados en el 80286 y lenguaje C. El enfoque usado por DCC en la decompilación se basa en la teoría y técnicas de optimización de grafos adoptadas por los compiladores.
  • Boomerang Decompiler Project: Es programa de código abierto para decompilar programas en C. Altera la semántica de cada instrucción en ensamblador e implementa el análisis estático de flujo de datos.
  • Reverse Engineering Compiler (REC): Decompila código ensamblador a una representación del código semejante a C, que requiere la edición manual para volver a compilar. El código está a medio camino entre ensamblador y C, pero es mucho más legible que el ensamblador puro.

¡Invierte tu situación!

Como ha podido comprobar, la aplicación de las técnicas de ingeniería inversa permite descubrir el funcionamiento interno de los programas y mejorarlos.

Cada vez la seguridad en informática es un tema más importante y más demandado laboralmente.

Nos encontramos en un campo muy interesante y donde no hay muchas personas que sean realmente expertas en ello.

Si quiere profundizar en el tema de la seguridad informática le recomiendo que realice el Máster en Ciberseguridad de INESEM.

Si le ha parecido interesante este artículo, no te pierdas otros escritos por el mismo autor, con contenido muy relevante en el área de la informática.

Categorizado en: Informática y TICS

No hay comentarios

  1. Carlos dice:

    Como puede ayudar la inteligencia artificial al desarrollo de la ingeniería inversa

    0
    • Rafael Marín dice:

      Buenos días Carlos.
      La inteligencia artificial aplicada a la ingeniería inversa puede facilitar el análisis de sistemas complejos. Los algoritmos de aprendizaje automático pueden analizar automáticamente el código fuente, identificar patrones, y descompilar programas, proporcionando una comprensión más rápida y profunda de sistemas desconocidos. Además, la IA puede generar modelos abstractos, traducir código entre lenguajes y ayudar en la generación de documentación.
      Espero haberte ayudado.
      Un saludo.

      0
  2. yonatan dice:

    alguien que me haga servicios de descompilacion?

    +1
  3. Yeni dice:

    Me encantó ya que lo pude utilizar para argumentar una actividad evaluativa

    0
  4. Anthony dice:

    Muy bueno, la verdad me aclaró muchas dudas, para aclarar otras que surgieron debo googlear pero así es el proceso de aprendizaje.

    +1
  5. hanny_C.D.J dice:

    Excelente artículo, me parece muy interesante y despejo las dudas que tenia acerca de la INGENIERÍA INVERSA , estudio ING.IND. y alguna vez lleve algoritmos de lenguajes y programación y  es por ello que surgió mi curiosidad en base a este tema.

    Hoy en día la tecnología es indispensable y es muy importante saber como ha ido evolucionando, así como las herramientas para estudiarla,  ya que nos tendremos que adaptar a los cambios de la misma.

    +1
Ver más comentarios

Deja un comentario

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Descubre nuestro contenido más actualizado en TERRITORIO INESEM

PRÓXIMOS EVENTOS

Product Led Growth: qué es y cómo aplicarlo

Product Led Growth: qué es y cómo aplicarlo

Iván Iglesias Baena
40 minutos
04/03/2024 17:00
Gestión del cambio en las organizaciones

Gestión del cambio en las organizaciones

Eduard Alcaraz
45 minutos
11/03/2024 17:00
Universidades colaboradoras
La universidad Antonio de Nebrija es Universidad colaboradora con INESEM Business School La universidad a Distancia de Madrid es Universidad colaboradora con INESEM Business School