Publicidad

sábado, 24 de mayo de 2008

Ingeniería Inversa/Desensambladores

Se denomina ingeniería inversa del software a la actividad que se ocupa de descubrir cómo funciona un programa, función o característica de cuyo código fuente no se dispone, hasta el punto de poder modificar ese código.La ingeniería inversa se trata de tomar algo (un dispositivo mecánico o electrónico, un software de computadora, etc.) para analizar su funcionamiento en detalle, generalmente para intentar crear un dispositivo o programa que haga la misma o similar tarea sin copiar la original.


Usos de la ingeniería inversa

  • La ingeniería inversa suele ser empleada por empresas, para analizar si el producto de su competencia infringe patentes de sus propios productos
  • Muchas veces, la ingeniería inversa es utilizada en el área militar para investigar (y copiar) las tecnologías de otras naciones, sin obtener planos ni detalles de su construcción o desarrollo.
  • En el software y en el hardware, la ingeniería inversa, muchas veces es empleada para desarrollar productos que sean compatibles con otros productos, sin conocer detalles de desarrollo de éstos últimos. En otras palabras, quien desarrolla los nuevos productos, no puede acceder a los detalles de fabricación de los productos de los que intenta ser compatibles
  • La ingeniería inversa también es empleada para comprobar la seguridad de un producto, generar Keygens de aplicaciones, reparación de productos, etc.

Ingeniería inversa de software

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 ensambldores 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 Linux

  • Bastard Disassembler: Bastard es un potente y programable desensamblador para Linux y FreeBSD.
  • ciasdis:
    El nombre oficiql 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.
  • 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
  • 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.

Nancy Nadlleli Muñoz Prado

http://www.alegsa.com.ar/Dic/ingenieria%20inversa.php

http://es.wikibooks.org/wiki/Ingenier%C3%ADa_Inversa/Desensambladores

1 comentario:

Anónimo dijo...

!!! Si la verdad la entrada es muy buena y esta interesante el tema;
buenos articulos..See you...!!