Ida Tips para Usuarios de Ollydbg

December 14, 2022 | Author: Anonymous | Category: N/A
Share Embed Donate


Short Description

Download Ida Tips para Usuarios de Ollydbg...

Description

 

IDA TIPS OLLYDBG

PARA

USUARIOS

DE

En el camino de ir aprendiendo cracking y reversing la mayoría de los actuales lectores ha dado sus primeros pasos con yOLLYDBG dado queen tiene una curvaque de aprendizaje es mucho más simple de usar entender al menos un comienzo el IDA PRO.suave y Con el tiempo al ir experimentando e intentando desafíos más complejos sobre todo en el campo del reversing estático, nos vamos dando cuenta que OLLYDBG no nos proporciona las herramientas interactivas interactivas que sí nos permite 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 acostumbrado al OLLYDBG.  Así que este tute es una pequeña pequeña recopilación recopilación de tips y cosas que nos vamos dando 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 quitar otras y una vez que termine de ajustar todo va a WINDOWSSAVE 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 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.

Eso se puede agregar en el LOADER y en el DEBUGGER habrá que agregarlo nuevamente, por separado en ambas configuraciones, como hemos visto y guardarlo por default en ambas. VIEW-TOOLBARS-JUMP lo pone visible y si hacemos SAVE DESKTOP con la tilde de DEFAULT marcada obviamente quedará para siempre, sino lo deberemos agregar cada vez que lo necesitamos.

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_. locret_.   loc_   Cuando una dirección corresponde a una instrucción antepone el prefijo loc_

 

  Por lo tanto cada vez que tenga que mostrar una dirección de una instrucción le pondrá el loc_ delante. dword_    Acá se empieza empieza poco a poco a complicar complicar la cosa

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 mov eax, dword ptr [dword_5127C]  [dword_5127C]  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. Si con la tecla D voy cambiando el tipo de dato a byte

la instrucción también cambia

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.

 Allí vemos que compara compara el contenido contenido de 0x4fBe8 0x4fBe8 que es un puntero puntero

 

  vemos que en 0x4fBe8 existe guardado un puntero a una string, ese puntero vale si apretamos la Q para ponerlo en hexa 0x4bc84

O sea que el contenido de 0x4fBe8 es 0x4bc84 (puntero a string) 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 cmp dword ptr [off_4FBE8], edi  edi  en la otra instrucción más abajo

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) 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  55  Podría ser un ejemplo no encuentro uno a mano ahora donde suma el inicio del segmento rdata más la constante 55.

Mas tipos de datos. off_ seg_ asc_ byte_

data,

data, contains

contains segment data,

offset address

value value

ascii data,

string byte

 

  word_ dword_ qword_ byte3_ xmmword_ ymmword_ packreal_ data, packed real flt_ dbl_ tbyte_ stru_ structure custdata_ algn_ alignment directive

data, data, data, data, 3 data, data,

floating floating floating

point point point

custom

data, data, data, data

16-bit 32-bit 64-bit bytes 128-bit 256-bit

32-bit 64-bit 80-bit type

Vemos todos los prefijos que buscan contenidos, y dichos contenidos pueden ser diferentes tipos de datos, ya vimos off_  (puntero)   (puntero) , seg_  , seg_  (dirección   (dirección de un segmento), asc_   (dirección que contiene una string), byte_ (dirección (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_   Lo mismo ocurre con flt_ busca el contenido y el mismo es un float

unk_   Es un prefijo que apunta a una zona inexplorada

 

  si hago doble click alli no me lleva a ningún lado porque 0x373560 es una dirección no alocada o inexistente o no explorada. 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) Con la tecla Q vemos que equivale a

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 comparándolos con el mismo ejecutable ejecutable abierto en OLLY para practicar. Otra diferencia grande se da en instrucciones instrucciones más complejas, por ejemplo.

 Aca se complica un poco más a v veces eces usando la la letra Q nos ayudamos ayudamos mejor movzx eax, byte ptr [eax+153D0h] [eax+153D0h] En la instrucción del IDA 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. La de abajo también se puede aclarar un poco con la Q

 

 

 Allí el prefijo off_   me me dice que el contenido será un puntero o sea que estaré pivoteando por una tabla de punteros, y que la tabla que empieza en 0x15390 se pivoteara sumandole EAX*4. 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

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF