Mientras leía un documento encontré que también existen algo
llamado desensamblador, que como su nombre lo dice hace lo contrario de lo que
hace el lenguaje ensamblador, es decir des-ensambla un programa previamente
ensamblado.
Definición:
Un desensamblador es un programa de
computadora que traduce el lenguaje de máquina a lenguaje ensamblador, la operación
inversa de la que hace el ensamblador. Un desensamblador difiere de de un decompilador, en que éste apunta a un lenguaje de alto nivel en
vez de al lenguaje ensamblador. la salida de un desensamblador, el
desensamblado, es a menudo formateada para la legibilidad humana en vez de ser
adecuada para la entrada a un ensamblador, haciendo que éste sea principalmente
una herramienta de ingeniería inversa.
Como funciona:
El desensamblador transforma el código binario en
instrucciones básicas del PC en la que se ejecuta,
el programa no es capaz de distinguir si dichas instrucciones provienen de un
"if", de un "for" o de un "while". Tampoco conoce
los nombres de las variables (no se incluyen en el código binario ya que la
máquina no usa nombres), así que suele inventar nombres como VAR_0001,
VAR_0002, etc.
En cuanto a
las funciones, algo parecido pasa con las funciones internas del programa, se
suelen llamar CALL_0001 o JMP_0001, o similares, dependiendo de si son
direcciones de llamadas con o sin retorno, respectivamente.
Las funciones externas son dependientes según el sistema en
el que se corra el programa a desensamblar:
Bajo
sistemas como DOS, la
mayoría de las veces puede indicar las funciones que se llaman (llamar a una
función requiere típicamente un llamado a interrupción con valores específicos
en los registros, que deben ser consultados si no son provistos por el programa
desensamblador).
Un desensamblador no puede:
·
Rescatar los nombres de las variables o las funciones
nombradas por el programador.
·
Recuperar los comentarios.
·
Rescatar código fuente perdido.
Existe una salvedad a todo esto y es cuando el que compiló el
programa ha habilitado una opción, que es incluir la información de depuración en el
programa (usualmente se trata de programas en fase de desarrollo y no de
programas finales).
Donde se usan:
Los desensambladores son ampliamente utilizados para crackear programas y para realizar ingeniería inversa. También son utilizados por desarrolladores de
software, investigadores o estudiantes.
Programas desensambladores:
Cualquier depurador interactivo
incluirá una alguna forma de ver el desensamblado del programa que está siendo
depurado. A menudo, la misma herramienta de desensamblado será empaquetada como
un desensamblador independiente distribuido junto con el depurador. Por
ejemplo, el objdump, parte del GNU Binutils,
está relacionado con el depurador interactivogdb.
·
Interactive Disassembler (IDA)
·
ILDASM es una herramienta contenida
en el SDK del .NET Framework. Puede ser usado para
desensamblar los archivos PE conteniento código Common Intermediate Language
·
OllyDbg es
un depurador analizador ensamblador de 32 bits
·
SIMON,
un probador/depurador/animador con desensamblador integrado para el Ensamblador, COBOL y PL/1
·
Texe es un desensambladorde 32 bits y
un analizador de archivos PE de Windows libre.
·
unPIC es un desensamblador para los microcontroladores PIC
Muy bien :) Van 6 para el lab. Más si nos haces un ejemplo :)
ResponderEliminar