SoloCodigo

Programación General => ASM (Ensamblador) => Mensaje iniciado por: mayel2002 en Miércoles 29 de Abril de 2009, 06:25

Título: hook en una ventana (explorador de windows)
Publicado por: mayel2002 en Miércoles 29 de Abril de 2009, 06:25
Hola a todos, es mi primera vez que entro a este foro y está muy bien, bueno pues tengo una duda que no se cómo resolver ya anduve por toda la red y no encuentro nada al respecto :( , bueno al grano, lo que quiero hacer es un hook en ensamblador para Windows que ganche el explorador de Windows y me diga los archivos que hay en esa ventana ya sea .exe .bat .txt etc.. y si entra a otra ventana igual.
Que es lo que necesito la clase de la ventana o qué?  :brickwall:
Título: Re: hook en una ventana (explorador de windows)
Publicado por: Eternal Idol en Miércoles 29 de Abril de 2009, 08:13
No se que queres hacer exactamente; pero podes buscar informacion sobre:

SetWindowsHookEx
Windows Shell Namespace Extensions
Subclassing
etc.
Título: Re: hook en una ventana (explorador de windows)
Publicado por: mayel2002 en Miércoles 29 de Abril de 2009, 08:37
Lo que quiero hacer exactamente es que cuando un usuario abra una ventana por ejemplo  
c:mis _documentos  en esa ventana estén archivos exe txt etc.., que el propio hook detecte estos archivos, bueno más o menos como lo hacen los antivirus  que cundo abres una ventana(explorador) que tiene un virus el antivirus lo detecta, supongo que por medio de hooks.
Supongo que    invoke SetWindowsHookEx,WH_SHELL,addr ventanas,hInstance,NULL
Este parámetro “WH_SHELL” es el que busca en ventanas?.
PD: ya se como manejar un hook por medio de DLL para el MOUSE pero no para ventanas :(
Título: Re: hook en una ventana (explorador de windows)
Publicado por: Eternal Idol en Miércoles 29 de Abril de 2009, 09:13
No, un antivirus tiene un modulo de modo Kernel (llamados comunmente drivers y escritos en C/C++) de tipo filtro del file system, no necesita ningun hook para interceptar el intento da apertura o ejecucion de un archivo.

Busca en la MSDN pero no creo que WM_SHELL te sirva exactamente para lo que buscas, una extension para el Explorer es probable que si pero claro son objetos COM ... tal vez quieras hacer un hook de codigo (tipo Detour) sobre las funciones de archivos tipo CreateFile* o ZwCreateFile/ZwOpenFile ...
Título: Re: hook en una ventana (explorador de windows)
Publicado por: mayel2002 en Miércoles 29 de Abril de 2009, 23:28
Bueno gracias por la ayuda, entonces esto quiere decir para hacer lo que quiero necesito aprende a programar drivers en c o c++ tal como leí un una entrada que el titulo es programación de drivers,  pues si no hay de otra voy a tener que empezar a programar drivers.
Bueno un hook no puede sacar la ruta de la ventana abierta?
Y si no se puede pues de antemano muchas gracias y a empezar a programar drivers.  :D
Título: Re: hook en una ventana (explorador de windows)
Publicado por: Eternal Idol en Miércoles 29 de Abril de 2009, 23:43
Todo dependera de COMO lo quieras hacer; como poder me imagino que hasta lo podes hacer sin hooks usando EnumWindows o FindWindow/Ex ...
Título: Re: hook en una ventana (explorador de windows)
Publicado por: mayel2002 en Jueves 30 de Abril de 2009, 08:57
Bueno ya llevo un poco de avance gracias por guiarme, tengo una pregunta más puedo sacar la ruta de la carpeta que este abierta, mediante un handle o nombre de la clase?.
Y se se puede cuales son las api para hacerlo?
Como seria FindFirstFile y FindNextFile pero creo que con estas no se puede porque primero deberías llenar la estructura WIN32_FIND_DATA con FindFirstFile y debes de pasarle la ruta de la carpeta para que llene dicha estructura y luego llamar FindNextFile pero así no es posible. :brickwall:
Título: Re: hook en una ventana (explorador de windows)
Publicado por: Eternal Idol en Jueves 30 de Abril de 2009, 09:17
La clase es esta: CabinetWClass, buscala en Google. En el Visual Studio viene un programita llamado Spy++ podes usarlo para ir viendo las ventanas ...

FindFirstFile y FindNextFile las podes usar una vez que obtengas la ruta para obtener los archivos y directorios que contiene.
Título: Re: hook en una ventana (explorador de windows)
Publicado por: mayel2002 en Viernes 1 de Mayo de 2009, 04:55
Se me ocurrió otra cosa a ver si se puede hacer, haber,  si el nombre de la clase de una ventana es CabinetWClass, pero cuando paso el puntero de ratón (con hook) donde están los ítems(archivos) de la carpeta abierta  me parece que la clase es SysListView32 junto con su handle, en vez de pasa   CabinetWClass puedo pasarle mejor SysListView32 para encontrar la ruta de esos archivos  ya sea con sendmessage.
Título: Re: hook en una ventana (explorador de windows)
Publicado por: mayel2002 en Martes 12 de Mayo de 2009, 23:18
Ya me adentre más en el tema pero pues me falta algo, bueno lo que hago es sacar el handle de SysListView32 luego  hago esto:
invoke GetWindowThreadProcessId,handle,pid
mov tid,eax
invoke OpenProcess ,PROCESS_ALL_ACCESS , FALSE, tid
Para que me de acceso al proceso, sale eax=0 en Olly.
No tendrá permisos de lectura?
Título: Re: hook en una ventana (explorador de windows)
Publicado por: Eternal Idol en Miércoles 13 de Mayo de 2009, 00:06
Estas pasando el tid y no el pid.

Igual siempre mira la documentacion en la MSDN para ver los valores de retorno y errores:
If the function fails, the return value is NULL. To get extended error information, call GetLastError.