Como puedo Unhookear las APis de user32.dll?

Iniciado por W0lFy, 31 Diciembre 2009, 13:32 PM

0 Miembros y 1 Visitante están viendo este tema.

W0lFy

K@NuT0

Hendrix

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 + GetModuleHandle) y verificara que no hubiera algún salto (Yo usaba el opcode E9, aquí 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  :)
"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián

Karcrack

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...)

ntaryl

Happy  new year
Sandsprite  have a nice tool Hook explorer 
u  will see interesting  code 

Hendrix

Cita de: 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...)

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  :)
"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián

YST

Lo que no se es si esto funciona con apis hookeadas desde un driver , me podrias contestar eso Hendrix ?

Salu2

Gracias


Yo le enseñe a Kayser a usar objetos en ASM

Hendrix

Cita de: 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

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  :)
"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián

W0lFy

muy bueno probare... ya posteare con lo ocurrido.. Mil Gracias!
K@NuT0