Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: .:UND3R:. en 1 Junio 2012, 21:44 pm



Título: Duda con FindWindow, FindWindowEx, SendMessage
Publicado por: .:UND3R:. en 1 Junio 2012, 21:44 pm
Hola a todos, estoy un poco complicado en cuanto a lo que quiero hacer:
Me gustaría como ejemplo intentar enviar un clic a notepad, exactamente a:

Archivo -> Abrir

Pero tengo muchas duda con respecto a esto, por ejemplo se que en primera instancia tengo que llamar a la función FindWindow, especifico la clase de este ("Notepad"), y me devuelve un manejador, luego investigando en Internet, tengo que obtener el manejador de la ventana secundaria. y ahí ya me pierdo. Ya que al ver las clases Abrir. Nuevo, guardar, tienen la misma clase, por lo que no le encuentro la lógica de seguir ya que no se está especificando de alguna manera el botón a hacer clic con SendMessage, a ver si me pueden orientar con todo esto, soy nuevo por lo que les pido comprensión. Saludos


Título: Re: Duda con FindWindow, FindWindowEx, SendMessage
Publicado por: _Enko en 1 Junio 2012, 22:09 pm
Es que no solo  tienes que buscar la ventana del Notepad, sino la ID del menu. Con reshack por ejemplo puedes saber la ID de cada item del menu del Notepad.
Entonces:
Consigues el HWND (FindWindows o lo que sea)
Consigues la ID del item del menu, depurando el notepad o reshack
Envias
Código:
 SendMessage(hwndNotepad, WM_COMMAND, idMenuAbrir, NULL)
El ID del  menu de abrir es el 2.


Saludos.


Título: Re: Duda con FindWindow, FindWindowEx, SendMessage
Publicado por: .:UND3R:. en 1 Junio 2012, 22:32 pm
Gracias _Enko, ya entendí más menos la idea pero con el reshack, no logro obtener los menú. Podrías darme una mano?, saludos


Título: Re: Duda con FindWindow, FindWindowEx, SendMessage
Publicado por: _Enko en 1 Junio 2012, 22:51 pm
Citar
1 MENU
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
{
POPUP "&File"
{
   MENUITEM "&New\tCtrl+N",  1
   MENUITEM "&Open...\tCtrl+O",  2
   MENUITEM "&Save\tCtrl+S",  3
   MENUITEM "Save &As...",  4
   MENUITEM SEPARATOR
   MENUITEM "Page Set&up...",  5
   MENUITEM "&Print...\tCtrl+P",  6
   MENUITEM SEPARATOR
   MENUITEM "E&xit",  7
}
POPUP "&Edit"
{
   MENUITEM "&Undo\tCtrl+Z",  16
   MENUITEM SEPARATOR
   MENUITEM "Cu&t\tCtrl+X",  768,  GRAYED
   MENUITEM "&Copy\tCtrl+C",  769,  GRAYED
   MENUITEM "&Paste\tCtrl+V",  770,  GRAYED
   MENUITEM "De&lete\tDel",  771,  GRAYED
   MENUITEM SEPARATOR
   MENUITEM "&Find...\tCtrl+F",  21
   MENUITEM "Find &Next\tF3",  22
   MENUITEM "&Replace...\tCtrl+H",  23
   MENUITEM "&Go To...\tCtrl+G",  24
   MENUITEM SEPARATOR
   MENUITEM "Select &All\tCtrl+A",  25
   MENUITEM "Time/&Date\tF5",  26
}
POPUP "F&ormat"
{
   MENUITEM "&Word Wrap",  32
   MENUITEM "&Font...",  33
}
POPUP "&View"
{
   MENUITEM "&Status Bar",  27
}
POPUP "&Help"
{
   MENUITEM "&Help Topics",  64
   MENUITEM SEPARATOR
   MENUITEM "&About Notepad",  65
}
}

el de Abrir, es el nro 2.
o sea

Código:
 invoke   SendMessage, hwndNotepad, WM_COMMAND, 2, 0

No te  confundas con el handler del menu, lo que necesitas es el ID del item del menu. Simplemente un 0x02 para el caso.


Título: Re: Duda con FindWindow, FindWindowEx, SendMessage
Publicado por: .:UND3R:. en 1 Junio 2012, 22:58 pm
Perfecto, todo entendido, muchísimas gracias por la explicación _Enko, saludos


Título: Re: Duda con FindWindow, FindWindowEx, SendMessage
Publicado por: _Enko en 1 Junio 2012, 23:17 pm
De nada


Título: Re: Duda con FindWindow, FindWindowEx, SendMessage
Publicado por: .:UND3R:. en 2 Junio 2012, 22:18 pm
Vuelvo a molestar, el problema que tengo es que estoy trabajando con un programa que está empaquetado bajo la protección "Enigma" + Winlicence, el cual no logro vencer, pero ese es otro tema. Mi pregunta es: ¿Como puedo capturar el ID de Menu?, si este no puede ser abierto por Reshacker?.

Eso saludos


Título: Re: Duda con FindWindow, FindWindowEx, SendMessage
Publicado por: _Enko en 2 Junio 2012, 23:03 pm
Hay varias opciones.
Desempaquetando la ejecutable. Si no tiene el recurso del menu, entonces toca depurar. Cuando haces click en el menu, algo tiene que suceder... buscas eso algo y pones te fijas el codigo de la constante
Código:
 switch (msg)                  /* manipulador del mensaje */
    {
        case WM_COMMAND:
           switch(LOWORD(wParam)) {
              case CM_MENU_BUSCADO:
                        ..... aqui el codigo que se ejecuta en el menu
tienes que obtener el valor de CM_MENU_BUSCADO.

Eso si usa la winapi para los menu. Si es una aplicacion de Delphi, utiliza la vcl, es distinto. Si es VisualBasic por ejemplo, ni idea como trata los menu.