Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: W0lFy en 31 Diciembre 2009, 13:32 pm



Título: Como puedo Unhookear las APis de user32.dll?
Publicado por: W0lFy en 31 Diciembre 2009, 13:32 pm
Bueno pos esa es mi duda . Un saludo!


Título: Re: Como puedo Unhookear las APis de user32.dll?
Publicado por: Hendrix en 31 Diciembre 2009, 13:45 pm
Hace tiempo hice un programita en C que hacia esto mismo (https://foro.elhacker.net/seguridad/hook_detector_by_hendrix-t221586.0.html). El método que usé fue el siguiente:

  • Analizar todas las API's que usa el proceso (Sacaba la IAT del ejecutable)
  • Una vez tenía la IAT, sacaba la dirección en donde empezaba la API (GetProcAddress (http://msdn.microsoft.com/en-us/library/ms683212%28VS.85%29.aspx) + GetModuleHandle (http://msdn.microsoft.com/en-us/library/ms683199%28VS.85%29.aspx)) y verificara que no hubiera algún salto (Yo usaba el opcode E9, aquí (http://www.itis.mn.it/linux/quarta/x86/jmp.htm) una lista).
  • Si había salto, cargaba la libreria que contenía la API (en tu caso, si solo quieres reparar User32.dll solo tendras que cargar esta) y copiaba los 20 primeros bytes de la API (los originales)
  • Una vez tenia los primeros 20 bytes originales de la API, los pegaba directamente sobre la dirección de memoria hookeada, con los que se reparaba el Hook (ya que sobreescribía el salto que había por los opcodes originales de la API).


Este método solo funciona si el primer opcode de la instrucción es un salto, en otros casos no funcionaría.

Ahora te toca a ti codear esto  :)

Un Saludo  :)


Título: Re: Como puedo Unhookear las APis de user32.dll?
Publicado por: Karcrack en 31 Diciembre 2009, 14:44 pm
Hendrix, no seria mas efectivo comparar los primeros 20bytes del API supuestamente hookeada directamente?  Envez de buscar un salto? Ya que hay mas formas de saltar que con un JMP absoluto...

Si no me equivoco Steve (de HackHound) hizo un codigo que hacia esto en C, comparaba los primenos n Bytes en memoria del API con los mismo bytes que tenia el API en el disco duro... (recorriendo la EAT, etc...)


Título: Re: Como puedo Unhookear las APis de user32.dll?
Publicado por: ntaryl en 1 Enero 2010, 00:44 am
Happy  new year
Sandsprite  have a nice tool Hook explorer 
u  will see interesting  code 


Título: Re: Como puedo Unhookear las APis de user32.dll?
Publicado por: Hendrix en 1 Enero 2010, 17:18 pm
Hendrix, no seria mas efectivo comparar los primeros 20bytes del API supuestamente hookeada directamente?  Envez de buscar un salto? Ya que hay mas formas de saltar que con un JMP absoluto...

Si no me equivoco Steve (de HackHound) hizo un codigo que hacia esto en C, comparaba los primenos n Bytes en memoria del API con los mismo bytes que tenia el API en el disco duro... (recorriendo la EAT, etc...)

Bueno, yo lo hacia así, hay algunas apis que por defecto tienen un salto en su primer opcode y mi programa lo detectaba como hook, pero al repararlo quedaba igual, pero bueno...

Un Saludo  :)


Título: Re: Como puedo Unhookear las APis de user32.dll?
Publicado por: YST en 1 Enero 2010, 17:59 pm
Lo que no se es si esto funciona con apis hookeadas desde un driver , me podrias contestar eso Hendrix ?

Salu2

Gracias


Título: Re: Como puedo Unhookear las APis de user32.dll?
Publicado por: Hendrix en 1 Enero 2010, 21:54 pm
Lo que no se es si esto funciona con apis hookeadas desde un driver , me podrias contestar eso Hendrix ?

Salu2

Gracias

El modo de Hooking es diferente, ya que mi aplicación repara una modificación del código de la API del proceso, en modo kernel, lo que se hookea es la SSDT. Pero bueno, si se hookea alguna función de algún otro driver o alguna IOCTL si se funcionaria este mismo método para reparar la modificación.

Un Saludo  :)


Título: Re: Como puedo Unhookear las APis de user32.dll?
Publicado por: W0lFy en 4 Enero 2010, 14:33 pm
muy bueno probare... ya posteare con lo ocurrido.. Mil Gracias!