Auditoría Manual de Código Binario

  • Posted on: 11 December 2018
  • By: ReYDeS

Dos tipos de herramientas simplifican enormemente la tarea de realizar ingeniería inversa hacia una archivo, estos son los desensambladores y los descompiladores. El propósito de un desensamblador es generar lenguaje ensamblador desde un binario compilado, mientras el propósito de un descompilador es intentar generar código fuente desde un binario compilado. Cada tarea tiene sus propios desafíos, y ambos son de hecho difíciles, con la descompilación siendo la más difícil de las dos. Esto debido al hecho de compilar el código fuente es a la vez una operación con pérdida, lo cual significa la información se pierde durante el proceso para la generación del lenguaje máquina, y una operación de uno hacia muchos, lo cual significa la existencia de muchas traducciones válidas de una sola línea de código fuente hacia declaraciones equivalentes en lenguaje máquina.

La información perdida durante la compilación puede incluir nombres de variables y tipos de datos, lo cual hace la recuperación del código fuente original desde el binario compilado sea casi imposible. Adicionalmente, un compilador al cual se le solicite optimizar un programa por cuestiones de velocidad, generará un código muy diferente al generado si se le solicita se optimice el mismo programa por un tema de tamaño. Aunque ambas versiones compiladas serán funcionalmente equivalentes, se percibirán muy diferentes a un descompilador.

Fuentes:

https://trailofbits.github.io/ctf/vulnerabilities/binary.html
https://www.blackhat.com/presentations/bh-europe-06/bh-eu-06-Wheeler-up.pdf

Sobre el Autor


Alonso Eduardo Caballero Quezada - ReYDeS
Instructor y Consultor en Hacking Ético, Forense Digital & GNU/Linux
Correo Electrónico: ReYDeS@gmail.com
Twitter: @Alonso_ReYDeS
LinkedIn: pe.linkedin.com/in/alonsocaballeroquezada
Facebook: https://www.facebook.com/alonsoreydes
Youtube: http://www.youtube.com/c/AlonsoCaballero
Resumen de mi CV: http://www.reydes.com/d/?q=node/1