Foro de elhacker.net

Programación => Ingeniería Inversa => Mensaje iniciado por: pepeBocachancla en 16 Julio 2010, 00:03 am



Título: Problemas con SendMessage
Publicado por: pepeBocachancla en 16 Julio 2010, 00:03 am
Estoy teniendo problemas con la función SendMessage. Os cuento
Estos días estaba haciendo unas pruebas de simulacion depulsaciones mediante una dll inyectada. Estos días, para hacer la prueba utilizé simplemente Notepad en un Windows XP sp2. El caso es que anteayer tube que formatear el ordenador y me cambie a windows 7. La misma prueba me funcionó correctamente con el Notepad.
El problema me vino cuando decidí probar con el GuildWars. El caso es que envía el mensaje correctamente (retorna bien y GetLastError == 0) pero parece que no llegan pasar por TranslateMessage (esto lo comprobé depurando).
Al principio, pensé que podía ser la UIPI, pero luego me di cuenta de que no podía ser porque como la funcionalidad está inyectada en el propio proceso, no debería dar problemas. Me equivoco en este razonamiento?

Alguien tiene alguna pista?

Os dejo la función que utilizo para enviar los mensajes, no creo que esté mal porque con otros programas funciona a la perfeción, pero nunca se sabe:
Código:
void send_char(char c) {
unsigned vkcode, scancode, keydata;

vkcode = LOBYTE(VkKeyScan(c));
scancode = MapVirtualKey(vkcode,0);

keydata = scancode << 16;
keydata += 1;
SendMessage(h_main_window, WM_CHAR, (WPARAM) c, (LPARAM) keydata);
}
h_main_window contiene el valor correcto.


Título: Re: Problemas con SendMessage
Publicado por: bizco en 16 Julio 2010, 00:18 am
creo que es porque usa directinput, por eso puede que se ignore tu pulsacion.


Título: Re: Problemas con SendMessage
Publicado por: Eternal Idol en 16 Julio 2010, 10:07 am
¿Seguro que h_main_window es valido?


Título: Re: Problemas con SendMessage
Publicado por: pepeBocachancla en 16 Julio 2010, 17:38 pm
sip, capturo el valor del handle con un hook en TranslateMessage. Además lo he comprobado con el InmunityDBG y siempre funciona
Código:
BOOL WINAPI fake_TranslateMessage(const MSG *lpMsg) {
if (lpMsg->message == WM_CHAR) {
h_main_window = lpMsg->hwnd;
}
return orig_TranslateMessage(lpMsg);
}