Ida Tips para Usuarios de Ollydbg
Ida Tips para Usuarios de Ollydbg
Ida Tips para Usuarios de Ollydbg
OLLYDBG
En el camino de ir aprendiendo cracking y reversing la mayoría de los actuales lectores ha
dado sus primeros pasos con OLLYDBG dado que tiene una curva de aprendizaje suave y
es mucho más simple de usar y entender al menos en un comienzo que el IDA PRO.
Por eso la idea de este tute es mostrar algunas diferencias, algunos tips para poder
adaptarse más fácilmente después de tanto tiempo de estar acostumbrado al OLLYDBG.
Así que este tute es una pequeña recopilación de tips y cosas que nos vamos dando cuenta
con el tiempo y que pueden ayudar a los que recien estan comenzando con IDA PRO.
Lo primero que debemos saber de IDA es que podemos configurar la interfase a gusto
nuestro con lo que queremos que esté visible por default y por supuesto el resto lo
abriremos cuando necesitemos.
IDA tiene dos configuraciones separadas para cuando trabajamos con el desensamblador a
la cual llama LOADER y cuando estamos debuggeando obvio llamado DEBUGGER, ambas
configuraciones son independientes.
Esta es una vista del LOADER, por supuesto cada uno puede cambiar el tamaño de las
ventanas agregar cosas quitar otras y una vez que termine de ajustar todo va a WINDOWS-
SAVE DESKTOP y allí pone la tilde en default y la configuración cambiará para siempre,
obviamente si hacemos lo mismo cuando estamos debuggeando cambiaremos solo la vista
de DEBUGGER de esta forma lograremos adaptarlo a nuestro gusto, en cada caso.
Una de las cosas que no encuentran los usuarios que recién comienzan y que extrañan del
OLLY es la función de la tecla menos y más para ir al lugar anterior con la tecla menos, o
para adelante con la tecla más.
Con ello no solo podremos ir hacia atrás y adelante sino también desplegar el menú hacia
abajo y elegir dónde ir, de los lugares visitados.
En OPTIONS otra opción que viene bien agregarla por default es LINE PREFIXES.
Eso agrega las direcciones delante de las instrucciones lo cual es bastante cómodo.
En algunos ejercicios y programas sobre todo los que tienen símbolos van a ver nombres de
las funciones bastante feos, a veces tienen el comentario al lado para aclarar, pero esta
bueno ir a OPTIONS-DEMANGLE NAMES y allí poner la opcion en NAMES.
Esto no queda cambiado para siempre si se guarda el escritorio, pero a veces se ve mucho
mejor a simple vista, como vemos abajo los nombres de las funciones quedan más sencillos
y no se complica tanto la visión.
PREFIJOS
IDA usa varios prefijos que antepone a valores numéricos y direcciones para informarnos
algo más de ellos, el tema es tratar de acordarse, o sino consultar en la página de IDA
porque suele ayudar bastante.
Mencionaremos aquí algunos con algunas imágenes para ilustrar.
sub_
Indica al estar delante de una dirección, que dicho número es el inicio de una función o
subrutina detectada.
locret_
Si IDA muestra una instrucción o comentario donde hay una dirección que es un return
como en este caso en ese salto al return, adelante de la dirección le colocara locret_.
loc_
dword_
Si hacemos doble click en 0x5127c vemos que el contenido de dicha dirección de memoria
contiene un cero
Por lo tanto dicha instrucción es similar a
Lo que pasa es que en las instrucciones con direcciones numericas, IDA no usa corchetes
para mostrar que usará el contenido y no la dirección, se supone que al ver el prefijo
dword_ delante vos ya sabes que está buscando el contenido de la dirección 0x5127c y
que dicho contenido es un DWORD.
off_
También en este caso esta buscando el contenido de la dirección pero el valor obtenido es
un offset o sea un puntero a algún dato detectado por IDA.
por lo tanto en la instrucción al poner el prefijo off_ estamos pidiendo el contenido o sea
comparara 0x4bc84 contra EDI.
Sería equivalente a
offset delante (no confundir con off_) significa que no hay que hallar el contenido o sea que
es la direccion directamente
Sería equivalente a
Por supuesto off_4FBE8 significa que esa dirección es puntero a algo (en este caso a una
string)
asc_
IDA detecta que esa dirección contiene directamente una string ascII.
Viendo los bytes vemos que ya la dirección que mueve contiene esa string ascII, el hecho
de tener OFFSET delante hace que obtenga la dirección o sea que pushee 0x4328d0 ya
que no busca contenido.(si no tuviera el offset delante ya estaría pusheando los bytes de la
string directamente)
seg_
Se utiliza para direcciones que son el inicio de un segmento cuando hay que tomar el
mismo para una instrucción o sumarle una constante a partir del inicio del segmento.
seg_rdata + 55
Podría ser un ejemplo no encuentro uno a mano ahora donde suma el inicio del segmento
rdata más la constante 55.
Vemos todos los prefijos que buscan contenidos, y dichos contenidos pueden ser diferentes
tipos de datos, ya vimos off_ (puntero) , seg_ (dirección de un segmento), asc_ (dirección
que contiene una string), byte_(dirección que contiene un byte), word_, dword_ etc, que
usandolos como prefijo sabremos que el contenido es de ese tipo, como dijimos antes si
antes de estos prefijos aparece la palabra OFFSET delante, hace que se obtenga la
dirección de memoria y no su contenido.
flt_
unk_
en este ejemplo
al tener offset delante mueve el valor 0x51774 a EAX y el contenido además no apunta a
nada explorado o existente.(El contenido es cero)
Luego si queremos volver al original el click derecho tiene la opción y nos muestra la
instrucción original para volver.
Por lo tanto aca esta la lista en la página del IDA salvo los tres primeros que se usan
normalmente para marcar ciertos tipos de instrucción determinada el resto son tipos de
datos que al verlos delante de una dirección sabremos que debemos buscar el contenido y
dentro estara dicho tipo, salvo que delante se anule con la palabra OFFSET que usara la
dirección sin buscar contenido.
Cualquiera puede buscar ejemplos en ejecutables usando el serach de texto y poniendo los
prefijos y comparándolos con el mismo ejecutable abierto en OLLY para practicar.
Aca se complica un poco más a veces usando la letra Q nos ayudamos mejor
En la instrucción del IDA el prefijo byte_ como vimos me dije que tengo que buscar el
contenido que es un byte
Voy pivoteando por una tabla de bytes cuyo inicio es e 0x153d0 y cuya key es EAX la cual
se suma a 0x153d0 y se halla el contenido.
Los reto a que practiquen buscando instrucciones complejas y que vayan practicando
entenderlas, primero con la ayuda de Q cuando se puede o con el OLLY y luego tratando de
hacerlo solo con IDA.
Espero que a alguien le sirva y que digan opiniones y si tienen alguna instrucción que tienen
dudas que la manden a la lista así vemos de ayudar y entender entre todos.
Saludos a todos
ricnar