Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: noele1995 en 12 Septiembre 2013, 21:25 pm



Título: Hooks sin dll
Publicado por: noele1995 en 12 Septiembre 2013, 21:25 pm
Se que algunos me vais a decir que no se puede, dado que en la MSDN pone esto:
Citar
A global hook procedure can be called in the context of any application in the same desktop as the calling thread, so the procedure must be in a separate DLL module.

Bueno por mucho que en la información de la MSDN diga que no se pueden hacer hooks globales sin una dll es mas que posible y algo real. Ya lo hice antes en otro lenguaje (VB6).

El problema es el siguiente aunque se parece ser que se instalan bien los hooks mi callback fuction nunca es llamada y ademas el ordenador se ralentiza. Estoy intentado hacer los hooks desde un programa de consola, y creo que es aqui donde reside el problema ya que encontre un codigo donde enseñaba a hacer los hook sin dll pero usaba tambien una interfaz grafica, al modificar ese codigo para que el programa fuese simplemente de consola empezo a dar los mismos problemas que mi programa.

Aqui el code para hacer el hook sin dll: http://www.mpcforum.com/showthread.php?78344-SRC-Global-Hook-without-dll-(C-) (http://www.mpcforum.com/showthread.php?78344-SRC-Global-Hook-without-dll-(C-))

Aqui mi code:
Código
  1. #define _WIN32_WINNT 0x0400
  2.  
  3. #include <windows.h>
  4. #include <iostream>
  5.  
  6. HHOOK hook;
  7.  
  8. __declspec(dllexport) LRESULT CALLBACK KeyboardHookProc (int nCode,WPARAM wParam,LPARAM lParam)
  9. {
  10.    if  ((nCode == HC_ACTION) && ((wParam == WM_KEYDOWN) || (wParam == WM_SYSKEYDOWN)))
  11.    {
  12.        KBDLLHOOKSTRUCT hookstruct = *((KBDLLHOOKSTRUCT*)lParam);
  13.  
  14. //............. codigo manejador del hook
  15.  
  16.    }
  17.    return CallNextHookEx(hook, nCode, wParam, lParam);
  18. }
  19.  
  20. int main()
  21. {
  22. hook = SetWindowsHookEx(WH_KEYBOARD_LL,(HOOKPROC)KeyboardHookProc,GetModuleHandle(NULL),NULL);
  23.  
  24. system("pause");
  25.  
  26. UnhookWindowsHookEx(hook);
  27.  
  28. return 1;
  29. }

Basicamente hace lo mismo que el codigo que habia en el link solo que sin la interfaz asique estoy un poco confundido de porque no funciona y como arreglarlo. Primero crei que habia que crear el callback como si fuese una funcion de una DLL  y he definido la funcion como lo hacian en el otro code pero eso sigue sin funcionar. ¿Alguna idea? Gracias por adelantado, llevo mas de una semana comiendome el coco con esto XD


Título: Re: Hooks sin dll
Publicado por: Eternal Idol en 12 Septiembre 2013, 22:02 pm
No estas procesando los mensajes ... no te llegan nunca, bloqueas todo en system. Proba con el tipico bucle de mensajes:

Código
  1. BOOL bRet;
  2.  
  3. while( (bRet = GetMessage( &msg, hWnd, 0, 0 )) != 0)
  4. {
  5.    if (bRet == -1)
  6.    {
  7.        // handle the error and possibly exit
  8.    }
  9.    else
  10.    {
  11.        TranslateMessage(&msg);
  12.        DispatchMessage(&msg);
  13.    }
  14. }
  15.  


Título: Re: Hooks sin dll
Publicado por: noele1995 en 12 Septiembre 2013, 22:35 pm
Oh vale ahi esta el problema jeje, bueno los hooks aunque los pase a un proyecto aparte los pensaba incluir en el troyano que estoy programando, pero yo ya tengo un bucle que esta procesando el envio y recibo de los sockets, ¿deberia crear un thread aparte para el bucle de los mensajes verdad? Muchas gracias no habia caido en eso XD


Título: Re: Hooks sin dll
Publicado por: Eternal Idol en 13 Septiembre 2013, 01:12 am
De nada y no es mala idea usar un hilo.