¿Que es un desensamblador?

Esencialmente, un desensamblador es exáctamente 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.

Dado que la mayoría de los lenguages ensambladores tienen una correspondencia uno a uno con instrucciones máquina subyacentes, el proceso de desensamblado es relativamente sencillo, y un desensamblador básico puede a menudo ser implementado simplemente leyendo bytes, y efectuando una búsqueda en una tabla. Por supuesto, desensamblar tiene sus propios problemas y escollos, que serán cubiertos mas adelante en este capítulo.

Muchos desensambladores tienen la opción de producir instrucciones en lenguage ensamblador usando la sintaxis de Intel, AT&T, o (ocasionalmente) HLA.

Desensambladores para Windows
Por conveniencia, separaremos lo desensambladores Windows en 2 categorias: Herramientas Comerciales (que cuestan dinero), y Herramientas Gratuitas (que son gratis y/o libres).

Herramientas Comerciales:
IDA Pro: es un desensamblador profesional (léase: caro) extremadamente potente. La parte mala es su elevado precio. Por lo tanto, y aunque ciertamente merece su precio, este wikibook no considera IDA Pro específicamente porque su precio es exclusivista. Dos versiones gratuitas existen; mira abajo.
http://www.hex-rays.com/idapro/

PE Explorer: es un desensamblador que “se centra en facilidad de uso, claridad y navegación”. No es tan completo como IDA Pro, pero tiene un precio mas bajo.
http://www.heaventools.com/PE_Explorer_disassembler.htm

W32DASM: es un excelente desensamblador 16/32 bit para Windows.
http://members.cox.net/w32dasm/

Herramientas Gratuitas:
IDA 3.7: Esta es una herramienta para DOS con GUI parecida a IDA Pro, pero considerablemente mas limitada. Puede desensamblar código para procesadores Z80, 6502, Intel 8051, Intel i860, y PDP-11, así como instrucciones x86 hasta el 486.
http://www.simtel.net/product.php

IDA Pro Freeware 4.1: Se comporta casi como IDA Pro, pero solo desensambla código para procesadores Intel x86, y solo funcions en Windows. Puede desensamblar instrucciones para aquellos procesadores disponibles a fecha de 2003.
http://www.themel.com/idafree.zip

IDA Pro Freeware 4.3:
Mejor interfaz gráfico que la versión previa.
http://www.datarescue.be/idafreeware/freeida43.exe

BORG Disassembler: BORG es un excelente desensamblador con interfaz gráfico para Win32.
http://www.caesum.com/

HT Editor: Un desensamblador analizador para instrucciones x86. La última versión corre como un programa de interfaz gráfico de consola en Windows, pero hay versiones compiladas para Linux también.
http://hte.sourceforge.net/

diStorm64: diStorm es una librería de desensamblador de stream altamente optimizada para 80×86 y AMD64.
http://ragestorm.net/distorm/

Desensambladores para Linux
Bastard Disassembler: Bastard es un potente y programable desensamblador para Linux y FreeBSD.
http://bastard.sourceforge.net/

ciasdis: El nombre oficial de ciasdis es computer_intelligence_assembler_disassembler. Esta herramienta basada en Forth permite construir conocimiento sobre un cuerpo de código de manera interactiva e incremental. Es único en que todo el código desensamblado puede ser re-ensamblado exactamente al mismo código. Soporta 8080, 6809, 8086, 80386, Pentium I y DEC Alpha. Facilidades de scripting ayudan en al análisis de cabeceras de fichero Elf y MSDOS y hacen esta herramienta extensible. ciadsis para Pentium I está disponible como imagen binaria, las otras están en código fuente, cargables sobre lina Forth, disponible del mismo sitio.
http://home.hccnet.nl/a.w.m.van.der.horst/ciasdis.html

objdump: viene de manera estandar, y es tipicamente usada para inspección genérica de ficheros binarios. Presta atención a las opciones de relocation y dynamic symbol table.

gdb: viene de manera estandar, como depurador, pero es usado muy a menudo para desensamblar. Si tienes un bloque arbitrario de datos en hexadecimal que quieres desensamblar, simplemente introdúcelo (interactivamente) o compilalo en un programa como una cadena de texto así: char foo[] = {0x90, 0xcd, 0x80, 0x90, 0xcc, 0xf1, 0x90};

lida linux interactive disassembler: un desensamblador interactivo con algunas funciones especiales como un criptoanalizador. Muestra referencias a cadenas, hace análisis de flujo de código, y no depende de objdump. Usa la librería de desensamblage Bastard para descodificar instrucciones individuales.
http://lida.sourceforge.net

ldasm: LDasm (Linux Disassembler) es un interfaz gráfico basado en Perl/Tk para objdump/binutils que intenta imitar el aspecto de W32Dasm. Busca referencias cruzadas (por ejemplo cadenas), convierte el código de GAS a un estilo parecido a MASM, traza programas y mucho mas. Viene con PTrace, un logger para flujo de procesos.
http://www.feedface.com/projects/ldasm.html

Mac OS X:
gdb: viene de manera estándar, como depurador, pero es usado muy a menudo para desensamblar. Si tienes un bloque de datos hexadecimales para desensamblar, introdúcelo (interactivamente) encima de otra cosa o compílalo en un programa como cadena de esta manera: char foo[] = {0x90, 0xcd, 0x80, 0x90, 0xcc, 0xf1, 0x90};

Machonist: Machonist es realmente más que un potente desensamblador. Contiene funciones para ejecutar el programa bajo GDB, grabar y cargar parches, añadir comentarios a un desensamblaje, parchear, hacer el de-mangling de los nombres de funciones C++, y mucho más. Es una aplicación con interfaz gráfica, así que los usuarios nuevos encontrarán más fácil acostumbrarse.
http://mach.ioctl.eu/index.html

otool: otool es un analizador binario muy potente que contiene funciones para desensamblar el código de ejecutables.

–I think it comes as part of the Apple Developer Tools, but I’;m not sure. Sorry. –Macpunk 21:36, 7 January 2007 (UTC)

ndisasm: Desensamblador simple para x86, que simplemente desensambla un fichero binario sin conocimiento del formato objeto. Útil para desensamblar binarios de otras plataformas. Viene estándar con las Apple Developer Tools.
http://developer.apple.com/documentation/Darwin/Reference/ManPages/man1/ndisasm.1.html

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *