Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - TomaSs

#21
Hola chicos.

Pues vengo a preguntarles una duda para ver si pueden echarme una mano.
La duda es la siguiente, os pongo en situación:
Estoy inyectando una dll a un proceso, el cual tiene múltiples ventanas en el mismo hilo, el tema es que yo estoy intentando que cada vez que la ventana principal se activa (HCBT_ACTIVATE) me avise, y lo hace sin ningún problema, pero claro, como el mismo hilo tiene varias ventanas pues me avisa cada vez que se activa cada una de ellas. ¿Saben como podría hacer para que solo me detecte una de ellas?
Decir que yo inyecto con SetWindowsHookEx en el hilo mencionado.

Muchas gracias ;)
#22
Hola chicos.

Pues vengo a haceros una preguntilla para ver si me podéis echar una manita ;)
El tema es que estoy probando con la calculadora de windows a ver si conseguía lograr lo que digo en el título de este hilo. La cuestión sería clicar en cualquier botón de la calculadora y que esta reciba los clics y responda a los botones presionados, pero que no se active su ventana (que la ventana no coja el foco).
Estoy tratando de hacer un hook a WH_CALLWNDPROC para capturar cuando se llama a WM_ACTIVATEAPP y seguidamente ya intentaría invalidarlo, pero el tema es que no me hace el hook.

Este sería parte del código que estoy utilizando, pero no se porqué no me engancha el hook, a ver si sabríais decirme que estaría mal:


private void Iniciar_Hook()
       {
           try
           {
               HookProc HookDelegado = new HookProc(HookProcHandler);

               if (hook.Equals(IntPtr.Zero))
               {
                   Console.Beep();
                   IntPtr hwndWindow = FindWindowByCaption(IntPtr.Zero, "Calculadora");
                   //MessageBox.Show(hwndWindow.ToString());
                   hook = SetWindowsHookEx(HookType.WH_CALLWNDPROC, HookDelegado, hwndWindow, 0);
                   MessageBox.Show(hook.ToString()); //Muestra 0
                   bt_boton1.Text = "STOP";
               }
               else
               {
                   UnhookWindowsHookEx(hook);
                   hook = IntPtr.Zero;
                   bt_boton1.Text = "GO";
               }
           }
           catch (Exception e)
           {
               MessageBox.Show("Error en el Hook: \n" + e.Message);
           }
       }

private IntPtr HookProcHandler(int code, WM wParam, KBDLLHOOKSTRUCT lParam)
       {
           try
           {
               MessageBox.Show("hola1");
               if (code >= 0 && (lParam.Equals(WM.ACTIVATEAPP) || lParam.Equals(WM.ACTIVATE)))
               {
                   //MessageBox.Show("hola2");
                   //Console.Beep();
               }
               return CallNextHookEx(IntPtr.Zero, code, wParam, lParam);
           }
           catch (Exception e)
           {
               MessageBox.Show("Error en el Hook: \n" + e.Message);
           }
           return (IntPtr)1;
       }


También decir que me ejecuta el programa y tal, por lo que la declaración de funciones etc no es problema, el tema es que no me hace el hook. No se si será que los parámetros de HookProcHandler deberían ser otros al tratarse de hacer un hook a WH_CALLWNDPROC o no se, porque cuando hago el hook a WH_KEYBOARD_LL si que me lo hace perfectamente...

Muchas gracias como siempre!!! ;)
#23
Hola.

Pues quería preguntaros eso, sabrían decirme cual sería la forma más segura de guardar todas las contraseñas de los diferentes servicios de internet, etc???

Actualmente lo hago con un rar, en el cual comprimo un txt donde están todas las contraseñas y le pongo una contraseña bastante larga.
Sería más seguro hacerme un programilla que me genere un fichero cifrado y a través del cual también pueda desencriptarlo?
He pensado en esto, ya que el método con el cual encriptaría desde mi programa sería privado, y sin el propio programita supongo que sería imposible que descifraran el propio contenido del fichero cifrado, no es así?

Un saludo! ;)
#24
Scripting / Re: cerrar una aplicación ahk
9 Marzo 2013, 11:18 AM
Para salir de tu script y cerrarlo automáticamente usa el comando ExitApp

;)
#25
Pues al final he conseguido hacer algo con un lenguaje de scripts, que no puedo mandar la pulsación a la ventana en concreto, y no puedo mandarle la pulsación cuando está minimizada, pero si que me simula las pulsaciones correctamente y el juego responde sin problemas.
A! El lenguaje en cuestión es AutoHotkey, que es bastante interesante para estas cosillas la verdad...

Perdonad que esto no tenga nada que ver con .NET, ya que en principio buscaba algo para .NET, pero al final conseguí esto, pero podéis moverlo a la categoría de Scripting sin problemas.
#26
Pues cuando consigas algo interesante te agradecería que lo postearas, ya que me parece útil, y podrá venirme bién en un futuro.

Suerte ;)
#27
Pues nunca lo he hecho, pero supongo que tendrás que hacerlo así, pasarlas de una en una o todas juntas con alguna marca de separación o algo así, supongo...
Al final que más dará sueltas que todas juntas, ya que si todas ocupan, por ejemplo, 20 bytes, tendrás que pasar 20 bytes si o si, separadas o juntas.
No se, supongo...
#28
Pues muchas gracias fiera ;) y si, a ver si alguien nos da un poco de luz :D

Gracias!
#29
pues vaya... mi idea no era hacer un cheat la verdad... pensé que sería algo mucho más fácil, pero tampoco termino de entenderlo, si realmente cuando se pulsa una tecla en el teclado se manda una instrucción al SO, no? como no va a poderse hacer sin hookear el juego? xd
entonces debería poderse hacer hookeando el keyboard o algo así, no? porque lo que es el "evento" en general, parte del teclado al pulsar la tecla :S

pues vaya...
#30
Pues mi comprobación ha ido más allá, el tema es el siguiente:

Me he dado cuenta de que en el juego, cuando pulsas shift para comenzar a andar, y dejarlo pulsado, obtengo con spy++ lo siguiente:

Pulsando shift en el juego:
00020528 P WM_KEYDOWN nVirtKey:VK_SHIFT cRepeat:1 ScanCode:2A fExtended:0 fAltDown:0 fRepeat:0 fUp:0 [wParam:00000010 lParam:002A0001 time:5:27:04.800]
00020528 P WM_KEYDOWN nVirtKey:VK_SHIFT cRepeat:1 ScanCode:2A fExtended:0 fAltDown:0 fRepeat:1 fUp:0 [wParam:00000010 lParam:402A0001 time:5:27:05.502]
00020528 P WM_KEYDOWN nVirtKey:VK_SHIFT cRepeat:1 ScanCode:2A fExtended:0 fAltDown:0 fRepeat:1 fUp:0 [wParam:00000010 lParam:402A0001 time:5:27:05.549]
00020528 P WM_KEYDOWN nVirtKey:VK_SHIFT cRepeat:1 ScanCode:2A fExtended:0 fAltDown:0 fRepeat:1 fUp:0 [wParam:00000010 lParam:402A0001 time:5:27:05.596]
00020528 P WM_KEYDOWN nVirtKey:VK_SHIFT cRepeat:1 ScanCode:2A fExtended:0 fAltDown:0 fRepeat:1 fUp:0 [wParam:00000010 lParam:402A0001 time:5:27:05.643]
00020528 P WM_KEYDOWN nVirtKey:VK_SHIFT cRepeat:1 ScanCode:2A fExtended:0 fAltDown:0 fRepeat:1 fUp:0 [wParam:00000010 lParam:402A0001 time:5:27:05.690]
00020528 P WM_KEYDOWN nVirtKey:VK_SHIFT cRepeat:1 ScanCode:2A fExtended:0 fAltDown:0 fRepeat:1 fUp:0 [wParam:00000010 lParam:402A0001 time:5:27:05.736]


Y lo que he apreciado es que como se puede ver, nada más pulsar el shift, manda el fRepeat a 0, y los siguientes a 1 (y por consiguiente el lParam también cambia).
Por lo que he probado a mandar desde mi programa así, primero el lParam tal cual se ve la primera instrucción y los siguientes pues como todos los siguientes, y tampoco...

Así pues, me he fijado más y le he añadido para que me saque la hora en los mensajes, y he visto que la diferencia de tiempo entre la primera llamada (lParam:002A0001) y la segunda (lParam:402A0001) es de 0'702, y siempre que empiezo la pulsación esa es la diferencia de tiempo, y las diferencias de tiempo entre todas las demas, todas las de lParam:402A0001, es de 0'047.
Esto es lógico que siempre sea la misma diferencia por el buffer del teclado o lo que sea supongo, pero, no podrá ser que el juego chekee eso y que tal vez yo tenga que tratar de meter un delay de ese mismo tiempo???

EDITO: pues ya he simulado casi perfecto ese tiempo y nada, no hace nada, asik a saber...