You are on page 1of 26

Desensamblador

 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.
DEFINICIÓN
 El código fuente en lenguaje ensamblador
generalmente permite el uso de constantes y
comentarios del programador. Éstos son
generalmente removidos, 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.
 El programa desensamblador a utilizar, por trabajar con
lenguaje máquina y ensamblador, depende
exclusivamente del microprocesador que estamos
usando
¿Qué hace un desensamblador?

 El desensamblador transforma el código binario en


instrucciones básicas de la 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".
¿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.

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

 • 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 desensamblador de 32 bits y un
analizador de archivos PE de Windows libre.
 • unPIC es un desensamblador para los
microcontroladores PIC

Problemas del desensamblador

 Separación de código y datos


Como consecuencia, no es posible escribir un
desensamblador que separe correctamente datos de código
para todos los programas de input. La ingeniería Inversa está
llena de tales limitaciones teóricas,
DEPURADOR
 Un depurador (en inglés, debugger), es un programa
usado para probar y depurar (eliminar los errores) de
otros programas (el programa "objetivo").
DEFINICIÓN
 Algunas depuradores ofrecen dos modos de operación -
la simulación parcial o completa, para limitar este
impacto.

 Si es un depurador de nivel de fuente o depurador
simbólico, comúnmente ahora visto en entornos de
desarrollo integrados, cuando el programa "se
estrella" o alcanza una condición predefinida, la
depuración típicamente muestra la posición en el
código original. Si es un depurador de bajo nivel o un
depurador de lenguaje de máquina, muestra la línea
en el fuente desensamblado (a menos que también
tenga acceso en línea al código fuente original y
pueda exhibir la sección apropiada del código del
ensamblador o del compilador). Un "estrellamiento"
sucede cuando el programa no puede continuar
normalmente debido a un error de programación.
 Típicamente, los depuradores también ofrecen funciones
más sofisticadas tales como correr un programa paso
a paso (un paso o animación del programa), parar el
programa (breacking), es decir, pausar el programa
para examinar el estado actual en cierto evento o
instrucción especificada por medio de un breakpoint,
y el seguimiento de valores de algunas variables.
 Algunos depuradores tienen la capacidad de modificar el
estado del programa mientras que está corriendo, en
vez de simplemente observarlo. También es posible
continuar la ejecución en una posición diferente en el
programa bypaseando un estrellamiento o error
lógico.
 La importancia de un buen depurador no puede ser
exagerada. De hecho, la existencia y la calidad de tal
herramienta para un lenguaje y una plataforma dadas
a menudo puede ser el factor de decisión en su uso,
incluso si otro lenguaje/plataforma es más adecuado
para la tarea
 La misma funcionalidad que hace a un depurador útil
para eliminar errores permite ser usado como
herramienta de craqueo de software para evadir la
protección anticopia, la gestión de derechos digitales,
y otras características de protección de software. A
menudo también lo hace útil como herramienta
general de verificación de pruebas, cobertura de
fallas, o analizador de desempeño, especialmente si
son mostradas las longitudes de trayectoria de
instrucción.
Dependencia del lenguaje

 Algunos depuradores operan en un simple lenguaje


específico mientras que otros pueden manejar
múltiples lenguajes transparentemente. Por ejemplo si
el programa objetivo principal es escrito en COBOL,
pero llama a subrutinas en assembler y también
subrutinas en PL/1, el depurador puede cambiar
modos dinámicamente para acomodar los cambios en
el lenguaje a medida que ocurren.
Protección de memoria

 Algunos depuradores también incorporan protección de


memoria para evitar violaciones del almacenamiento
tales como desbordamiento de búfer. Esto puede ser
extremadamente importante en los ambientes de
procesamiento de transacciones donde la memoria es
dinámicamente asignada desde "pools" de memoria
en una base de tarea por tarea.
 El depurador lanza el programa a depurar. Éste se
ejecuta normalmente hasta que el depurador
detiene su ejecución, permitiendo al usuario
examinar la situación. se depuradoran los errores
de los programas
 El depurador permite detener el programa en:
 • Un punto determinado mediante un punto de
ruptura.
 • Un punto determinado bajo ciertas
condiciones mediante un punto de ruptura
condicional.
Uso

 • Un momento determinado cuando se cumplan


ciertas condiciones.
 • Un momento determinado a petición del
usuario.
 Durante esa interrupción, el usuario puede:
 • Examinar y modificar la memoria y las variables del
programa.
 • Examinar el contenido de los registros del procesador.
 • Examinar la pila de llamadas que han desembocado en la
situación actual.
 • Cambiar el punto de ejecución, de manera que el
programa continúe su ejecución en un punto diferente al punto
en el que fue detenido.
 • Ejecutar instrucción a instrucción.
 • Ejecutar partes determinadas del código, como el interior
de una función, o el resto de código antes de salir de una
función.
uso

 El depurador depende de la arquitectura y sistema en el que se


ejecute, por lo que sus funcionalidades cambian de un sistema a
otro. Aquí se han mostrado las más comunes.

Información de depuración

 Para poder aprovechar todas las posibilidades de


depuración es necesario que, al compilar el programa
a depurar, se indique al compilador que debe incluir
instrucciones e información extra para la depuración
del código. Dicha información extra consiste
básicamente en la correspondencia entre las
instrucciones del código ejecutable y las instrucciones
del código fuente que las originan, así como
información sobre nombres de variables y funciones.
 Un depurador también puede usarse para realizar
ingeniería inversa o evitar protecciones de copia.
Mediante el uso del depurador se puede conocer el
funcionamiento interno del programa examinado,
ayudando al proceso de ingeniería inversa o
permitiendo desarrollar técnicas para evadir las
restricciones impuestas por el programa.
Otros usos
Es importante notar que un programa que está siendo
Efectos secundarios


depurado puede presentar un comportamiento
diferente a si se ejecuta en solitario debido a que el
depurador cambia ligeramente los tiempos internos
del programa. Estos cambios en los tiempos de
ejecución afectan especialmente a complejos sistemas
distribuidos.
Ejemplos de depuradores

 • Visual DuxDebugger — Debugger


Disassembler for Windows 64-bit
 • GNU Debugger (gdb)
 • SoftICE
 • OllyDbg
 • Trw2000
 • Ida Pro
 • Cheat Engine

You might also like