fbpx
Wikipedia

Desensamblador

Un desensamblador o disassembler ([ˌdɪsəˈsɛmblə(r)]) es un programa de computador que traduce el lenguaje de máquina a lenguaje ensamblador, la operación inversa de la que hace el ensamblador. Un desensamblador difiere de un decompilador, en que este tiene como objetivo 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 este sea principalmente una herramienta de ingeniería inversa.

El código fuente en lenguaje ensamblador generalmente permite el uso de constantes y comentarios del programador. Estos son generalmente eliminados, por el ensamblador, del código ensamblado a código de máquina. De esta manera, un desensamblador operando sobre el código de máquina, produciría el desensamblado careciendo de estas constantes y comentarios; la salida desensamblada se vuelve más difícil de ser interpretada por un humano que el código fuente con comentarios original. Algunos desensambladores hacen uso de la información de depuración simbólica presente en los archivos objeto tales como el ELF. En una sesión interactiva, el Interactive Disassembler permite al usuario humano colocar símbolos mnemónicos para valores o regiones de código: la intuición humana aplicada al proceso de desensamblado a menudo va en paralelo con la creatividad humana en el proceso de la escritura del código.

El desensamblado no es una ciencia exacta: En las plataformas CISC con instrucciones de ancho variable, o en presencia de código automodificable, es posible para un simple programa tener dos o más desensamblados razonables. Determinar qué instrucciones serían encontradas realmente durante una ejecución del programa reduce al problema de parada probado no solucionable.

El programa desensamblador a utilizar, por trabajar con lenguaje máquina y ensamblador, depende exclusivamente del microprocesador que estamos usando (para que pueda reconocer las instrucciones del código binario), de la arquitectura de la máquina y del sistema operativo en uso (no es lo mismo Microsoft Windows que GNU/Linux).

¿Qué hace un desensamblador?

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 dependen del sistema en el que se ejecute 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 normalmente una llamada a una interrupción con valores específicos en los registros, que deben ser consultados si no son provistos por el programa desensamblador). Por ejemplo, para imprimir un texto en pantalla:

 mov ax, 0009 mov dx, offset TEXTO int 21h 

En cambio bajo sistemas operativos modernos como Windows, las funciones se llaman por nombres, y esto suele ser bastante autoexplicativo. Esto resulta cierto para la mayoría de las funciones provistas por el sistema operativo y llamados externos en las bibliotecas de enlace dinámico. Por ejemplo, las funciones CreateFile o ReadFile.

¿Qué no hace un 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).

Uso de los desensambladores

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 interactivo gdb.

Véase también

Referencias

  • L. Vinciguerra, L. Wills, N. Kejriwal, P. Martino, and R. Vinciguerra, "An Experimentation Framework for Evaluating Disassembly and Decompilation Tools for C++ and Java", Proc. of 10th Working Conference on Reverse Engineering (WCRE) 2003.
  • B. Schwarz, S. Debray, and G. Andrews, "Disassembly of Executable Code Revisited", Proc. of 9th Working Conference on Reverse Engineering (WCRE), pp. 45–54, 2002.

Enlaces externos

  • Lista de desensambladores en transformation Wiki. (en inglés)
  • Lista de desensambladores en The free country. (gratuitos) (en inglés)
  • OpenRCE: Varios Disassemblers, recursos y plug-ins.
  •   Datos: Q279650

desensamblador, desensamblador, disassembler, ˌdɪsəˈsɛmblə, programa, computador, traduce, lenguaje, máquina, lenguaje, ensamblador, operación, inversa, hace, ensamblador, desensamblador, difiere, decompilador, este, tiene, como, objetivo, lenguaje, alto, nive. Un desensamblador o disassembler ˌdɪseˈsɛmble r es un programa de computador que traduce el lenguaje de maquina a lenguaje ensamblador la operacion inversa de la que hace el ensamblador Un desensamblador difiere de un decompilador en que este tiene como objetivo 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 este sea principalmente una herramienta de ingenieria inversa El codigo fuente en lenguaje ensamblador generalmente permite el uso de constantes y comentarios del programador Estos son generalmente eliminados por el ensamblador del codigo ensamblado a codigo de maquina De esta manera un desensamblador operando sobre el codigo de maquina produciria el desensamblado careciendo de estas constantes y comentarios la salida desensamblada se vuelve mas dificil de ser interpretada por un humano que el codigo fuente con comentarios original Algunos desensambladores hacen uso de la informacion de depuracion simbolica presente en los archivos objeto tales como el ELF En una sesion interactiva el Interactive Disassembler permite al usuario humano colocar simbolos mnemonicos para valores o regiones de codigo la intuicion humana aplicada al proceso de desensamblado a menudo va en paralelo con la creatividad humana en el proceso de la escritura del codigo El desensamblado no es una ciencia exacta En las plataformas CISC con instrucciones de ancho variable o en presencia de codigo automodificable es posible para un simple programa tener dos o mas desensamblados razonables Determinar que instrucciones serian encontradas realmente durante una ejecucion del programa reduce al problema de parada probado no solucionable El programa desensamblador a utilizar por trabajar con lenguaje maquina y ensamblador depende exclusivamente del microprocesador que estamos usando para que pueda reconocer las instrucciones del codigo binario de la arquitectura de la maquina y del sistema operativo en uso no es lo mismo Microsoft Windows que GNU Linux Indice 1 Que hace un desensamblador 2 Que no hace un desensamblador 3 Uso de los desensambladores 4 Programas desensambladores 5 Vease tambien 6 Referencias 7 Enlaces externos Que hace un desensamblador EditarEl desensamblador transforma el codigo binario en instrucciones basicas 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 codigo binario ya que la maquina no usa nombres asi 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 dependen del sistema en el que se ejecute el programa a desensamblar Bajo sistemas como DOS la mayoria de las veces puede indicar las funciones que se llaman llamar a una funcion requiere normalmente una llamada a una interrupcion con valores especificos en los registros que deben ser consultados si no son provistos por el programa desensamblador Por ejemplo para imprimir un texto en pantalla mov ax 0009 mov dx offset TEXTO int 21 h En cambio bajo sistemas operativos modernos como Windows las funciones se llaman por nombres y esto suele ser bastante autoexplicativo Esto resulta cierto para la mayoria de las funciones provistas por el sistema operativo y llamados externos en las bibliotecas de enlace dinamico Por ejemplo las funciones CreateFile o ReadFile Que no hace un desensamblador EditarUn desensamblador no puede Rescatar los nombres de las variables o las funciones nombradas por el programador Recuperar los comentarios Rescatar codigo fuente perdido Existe una salvedad a todo esto y es cuando el que compilo el programa ha habilitado una opcion que es incluir la informacion de depuracion en el programa usualmente se trata de programas en fase de desarrollo y no de programas finales Uso de los desensambladores EditarLos desensambladores son ampliamente utilizados para crackear programas y para realizar ingenieria inversa Tambien son utilizados por desarrolladores de software investigadores o estudiantes Programas desensambladores EditarCualquier depurador interactivo incluira una alguna forma de ver el desensamblado del programa que esta siendo depurado A menudo la misma herramienta de desensamblado sera empaquetada como un desensamblador independiente distribuido junto con el depurador Por ejemplo el objdump parte del GNU Binutils esta relacionado con el depurador interactivo gdb Interactive Disassembler IDA ILDASM es una herramienta contenida en el SDK del NET Framework Puede ser usado para desensamblar los archivos PE conteniento codigo 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 PICVease tambien EditarLenguaje ensamblador Lenguaje ensamblador x86 Anexo Listados de instrucciones x86 Compilador Ensamblador Decompilador Depurador Interpretador Emulador BOCHS Ingenieria inversa Grafico de control de flujo Analisis de flujo de datos Interactive DisassemblerReferencias EditarL Vinciguerra L Wills N Kejriwal P Martino and R Vinciguerra An Experimentation Framework for Evaluating Disassembly and Decompilation Tools for C and Java Proc of 10th Working Conference on Reverse Engineering WCRE 2003 B Schwarz S Debray and G Andrews Disassembly of Executable Code Revisited Proc of 9th Working Conference on Reverse Engineering WCRE pp 45 54 2002 Enlaces externos EditarLista de desensambladores en transformation Wiki en ingles Lista de desensambladores en The free country gratuitos en ingles OpenRCE Varios Disassemblers recursos y plug ins Datos Q279650Obtenido de https es wikipedia org w index php title Desensamblador amp oldid 133292347, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos