elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Mov edi, edi
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Mov edi, edi  (Leído 5,583 veces)
hosuko

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Mov edi, edi
« en: 15 Enero 2011, 21:26 pm »

Hola que tal?, soy nuevo en esto del ensamblador y al mirar que hacia la libreria user32.dll cuando le llamas a MessageBox usando OllyDbg, me encontré con este código:
.  Mov edi, edi

Cuando lo ejecuto carga los datos que puse en la pila. ¿Acaso mov no se limita a mover los datos de un argumento a otro?.
   Si alguien me pudiera explicar el porqué de esa instrucción y su funcionamiento, gracias.


En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Mov edi, edi
« Respuesta #1 en: 16 Enero 2011, 00:13 am »

No pasa eso que decis, depura de nuevo, cuando lo ejecutas no cambia nada, esa instruccion mueve al registro edi el valor contenido en el registro edi, esta ahi para otra cosa (hotpatching) que sinceramente no viene al caso.


En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Karcrack


Desconectado Desconectado

Mensajes: 2.416


Se siente observado ¬¬'


Ver Perfil
Re: Mov edi, edi
« Respuesta #2 en: 16 Enero 2011, 00:35 am »

Código:
http://msmvps.com/blogs/kernelmustard/archive/2005/04/25/44413.aspx
En línea

hosuko

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Mov edi, edi
« Respuesta #3 en: 16 Enero 2011, 10:02 am »

     Gracias por las respuestas.

     Creo que lo entiendo. En realidad mov edi, edi no sirve para nada, según entendí, mi inglés tampoco es para tirar flores, lo que ocurre es que si hay un 'hook' sustituye esa linea y las 5 anteriores en las que no hay código, solamente NOP, por un salto a otra función que es la encargada de realizar la lectura de la pila o lo que sea.

     Si no entendí mal, el HotPaching lo que hace es sustituir o actualizar código binario sin necesidad de reiniciar. El echo de poner mov edi, edi y no dos nop es porque resulta más rápido leer una instrucción de 2 bytes que no 2 nop, de modo que si no se necesita realizar el hotpaching es más rápido de esa manera.

     Me queda una duda. ¿Es posible mirar a donde salta y lo que hace?.
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Mov edi, edi
« Respuesta #4 en: 16 Enero 2011, 11:17 am »

¿Que tiene que ver la pila? La funcion hara todo lo que tiene que hacer, eso es un detalle, puede no tener parametros y obviar el uso de la pila. En lugar de comprender tu primera duda te pones a investigar un tema avanzado ... mejor lee sobre la pila (instrucciones push, pop, registros esp y ebp, etc).

Y si, con el depurador podes ver a que direccion van ambos saltos, el primero (el de mov edi, edi) es uno corto que va al segundo y este (el que se pone en los nop's) va al hook.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
hosuko

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Mov edi, edi
« Respuesta #5 en: 16 Enero 2011, 12:14 pm »

     Gracias por responder tan rápido. Lo de la pila lo digo porque esa era la duda. Todo viene a que no me di cuenta que añade a la pila datos, creo que necesito gafas  :rolleyes:.
 
     Ahora que estaba escribiendo aquí el contenido de la pila ya lo he visto, vaya que fallo. Este es el contenido de la pila, ahora ya lo entiendo  :P:

     Antes del mov edi, edi:

6FFB0    0401014    Call to MessageBoxA from 2.0040100E
6FFB4    0000000    hOwner = 0
6FFB8    0402000    Text = "Hola"
6FFBC    040200C   Title = "Titulo"
6FFC0    00000000  Style = MB_OK | MB_APPLMODAL
6FFC4    7C817077  Return to kernel32.7C817077
6FFC8    7C920228  ntdll.7C920228

     Después de ejecutar dicha linea:
6FFB0    0401014 Return to 2.0401014 from user32.MessageBoxA
6FFB4    0000000
     Añade estas 2 lineas.


   
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Mov edi, edi
« Respuesta #6 en: 16 Enero 2011, 16:21 pm »

Lee con atencion, no añade nada de nada y el contenido es exactamente el mismo:

6FFB0    0401014    Call to MessageBoxA from 2.0040100E
6FFB4    0000000    hOwner = 0
6FFB8    0402000    Text = "Hola"
6FFBC    040200C   Title = "Titulo"
6FFC0    00000000  Style = MB_OK | MB_APPLMODAL
6FFC4    7C817077  Return to kernel32.7C817077
6FFC8    7C920228  ntdll.7C920228

     Después de ejecutar dicha linea:
6FFB0    0401014 Return to 2.0401014 from user32.MessageBoxA
6FFB4    0000000

Lo que figura como texto es simplemente una ayuda del OllyDbg.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Space.Medafighter.X

Desconectado Desconectado

Mensajes: 24



Ver Perfil
Re: Mov edi, edi
« Respuesta #7 en: 21 Enero 2011, 01:42 am »

En realidad mov edi, edi no sirve para nada

Claro que sirve, sirve de relleno para facilitar el "hotpatching" o "hooking" -como quieran llamarlo- y completar un tamaño determinado al comienzo del API.

Si no entendí mal, el HotPaching lo que hace es sustituir o actualizar código binario sin necesidad de reiniciar.

No, en este caso sería para que una aplicación X ejecute código cuando llame al API.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines