Descompilador


Un decompilador es un programa de computadora que traduce un archivo ejecutable a un archivo fuente de alto nivel que se puede volver a compilar con éxito. Por lo tanto, es lo opuesto a un compilador , que traduce un archivo fuente en un ejecutable. Los descompiladores generalmente no pueden reconstruir perfectamente el código fuente original, por lo que con frecuencia producirán código ofuscado . No obstante, los descompiladores siguen siendo una herramienta importante en la ingeniería inversa de programas informáticos .

El término descompilador se aplica más comúnmente a un programa que traduce programas ejecutables (la salida de un compilador ) en código fuente en un lenguaje de (relativamente) alto nivel que, cuando se compila, producirá un ejecutable cuyo comportamiento es el mismo que el ejecutable original. programa. En comparación, un desensamblador traduce un programa ejecutable a lenguaje ensamblador (y un ensamblador podría usarse para ensamblarlo nuevamente en un programa ejecutable).

La descompilación es el acto de utilizar un descompilador, aunque el término también puede referirse a la salida de un descompilador. Se puede utilizar para la recuperación de código fuente perdido y también es útil en algunos casos para la seguridad informática , interoperabilidad y corrección de errores . [1] El éxito de la descompilación depende de la cantidad de información presente en el código que se descompila y de la sofisticación del análisis realizado en él. Los formatos de código de bytes utilizados por muchas máquinas virtuales (como Java Virtual Machine o .NET Framework Common Language Runtime ) a menudo incluyen metadatos extensosy características de alto nivel que hacen que la descompilación sea bastante factible. La aplicación de datos de depuración , es decir, símbolos de depuración, puede permitir reproducir los nombres originales de variables y estructuras e incluso los números de línea. El lenguaje de máquina sin tales metadatos o datos de depuración es mucho más difícil de descompilar. [2]

Algunos compiladores y herramientas de postcompilación producen código ofuscado (es decir, intentan producir una salida que es muy difícil de descompilar o que se descompila en una salida confusa). Esto se hace para que sea más difícil aplicar ingeniería inversa al ejecutable.

Si bien los descompiladores se utilizan normalmente para (volver a) crear código fuente a partir de ejecutables binarios, también hay descompiladores para convertir archivos de datos binarios específicos en fuentes editables y legibles por humanos. [3] [4]

Se puede pensar que los descompiladores están compuestos por una serie de fases, cada una de las cuales aporta aspectos específicos del proceso general de descompilación.