Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: rubeng en 18 Agosto 2007, 17:09 pm



Título: presionar boton de aplicacion ajena sabiendo su hwnd clase y caption
Publicado por: rubeng en 18 Agosto 2007, 17:09 pm
pues eso alguien sabe como presionar un boton de otra aplicacion? tengo su hwnd class y caption? alguna idea?
salu2


Título: Re: presionar boton de aplicacion ajena sabiendo su hwnd clase y caption
Publicado por: nhaalclkiemr en 18 Agosto 2007, 21:02 pm
Pienso que tienes que utilizar la API SendMessage pero no estoy seguro


Título: Re: presionar boton de aplicacion ajena sabiendo su hwnd clase y caption
Publicado por: NekroByte en 18 Agosto 2007, 21:10 pm
Pienso que tienes que utilizar la API SendMessage pero no estoy seguro
Sí, con esa  :P


Título: Re: presionar boton de aplicacion ajena sabiendo su hwnd clase y caption
Publicado por: rubeng en 18 Agosto 2007, 23:26 pm
buske al respecto por lo que se ve se hace con BM ¿ pero como es la estructura yo tengo el hwnd de la ventana donde se encuentra el boton 526962 y la clase #32770 y el  del boton hwnd: 264734 caption : &No type : button como haria para que se presione el boton no de ese msgbox? salu2
gracias


Título: Re: presionar boton de aplicacion ajena sabiendo su hwnd clase y caption
Publicado por: LeandroA en 19 Agosto 2007, 00:58 am
Hola

Código:
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal Hwnd As Long, ByVal Msg As Long, wParam As Any, lParam As Any) As Long
Private Const WM_LBUTTONDOWN = &H201
Private Const WM_LBUTTONUP = &H202

Private Sub Click(Hwnd As Long)
lRetValue = PostMessage(Hwnd, WM_LBUTTONDOWN, ByVal CLng(0), ByVal CLng(0))
lRetValue = PostMessage(Hwnd, WM_LBUTTONUP, ByVal CLng(0), ByVal CLng(0))
End Sub

Private Sub Command1_Click()
Click Command2.Hwnd
End Sub

Private Sub Command2_Click()
Beep
End Sub


Saludos


Título: Re: presionar boton de aplicacion ajena sabiendo su hwnd clase y caption
Publicado por: rubeng en 19 Agosto 2007, 02:02 am
bien eso es para usarlo dentro de la misma aplicacion ahora com ose hace para usarlo en otra aplicacion? donde pongo el handle y eso?
salu2


Título: Re: presionar boton de aplicacion ajena sabiendo su hwnd clase y caption
Publicado por: LeandroA en 19 Agosto 2007, 02:16 am
hola el Handle o hwnd  es el ejemplo del command2 osea donde dice Command2.Hwnd pones el handle que tienes tu, el de la aplicacion externa


Título: Re: presionar boton de aplicacion ajena sabiendo su hwnd clase y caption
Publicado por: HaDeS, - en 19 Agosto 2007, 02:49 am
Es facil, descargate el Ollydbg, lo instalas, y despues te metes a esta pagina http://www.openrce.org/downloads/details/104/WindowJuggler y descargas el WindowJuggler, lo metes en la carpeta de plugins del olly, sacas el olly, le das Plugins -> WindowJuggler -> WindowJuggler.
Ahi te aparece una ventana con varios titulos, Wnd Handle, Wnd Id, entre otros, el importante en este caso es el Wnd Handle.
Presionas el Shift, y llevas con el puntero del mouse hasta donde esta el boton al que le queres dar click, y en Wnd Handle aparece el handle de ese boton (El mismo window juggler trae la opcion para darle click, cerrar, mostrar, esconder, entre otros).
Te sale por ejemplo 0xB095A.

El codigo de la aplicacion en Visual
Código
  1. 'Debes agregar una caja de texto que el nombre sea Text1.text (La de por defecto)
  2. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  3. Const WM_CLICK = &HF5
  4.  
  5. Private Sub Command1_Click()
  6.   i = SendMessage("&H" & Text1.Text, WM_CLICK, Me.hwnd, 0)
  7. End Sub
  8.  

Ese seria el codigo, en la caja de texto en vez de meter 0xB095A, metes  B095A, tenes que quitarle el 0x
Creo que es asi como se hace :P
saludos!


Título: Re: presionar boton de aplicacion ajena sabiendo su hwnd clase y caption
Publicado por: rubeng en 19 Agosto 2007, 16:51 pm
la verdad que no me funciona tiene que estar activa la ventana que contiene el boton?


Título: Re: presionar boton de aplicacion ajena sabiendo su hwnd clase y caption
Publicado por: HaDeS, - en 19 Agosto 2007, 23:57 pm
Sip, si queres me pasas la aplicacion con la que estas ensayando, yo pruebo tambien, para que el codigo que publique pueda funcionar, tanto la ventana como el boton deben estar activos. Ese plugin que te dije, el WindowJuggler, te permite hacer lo que queras, tambien podes activar la ventana, activar botones, maximizar ventanas, esconderlas, entre otras.

Saludos


Título: Re: presionar boton de aplicacion ajena sabiendo su hwnd clase y caption
Publicado por: rubeng en 20 Agosto 2007, 04:07 am
weno voy a explicar todo desde cero para que se entienda :P
lo que quiero es cerrar un msgbox de un programa ajeno que q es del tipo SI NO lo que quiero hacer es que se presione el boton no paso los datos del msgbox
hwnd : 526962
class : #32770
y los del boton No
hwnd : 264734
type : button
caption : &No
pd: se me cierra el ollydbg =S de donde lo puedo bajar?


Título: Re: presionar boton de aplicacion ajena sabiendo su hwnd clase y caption
Publicado por: HaDeS, - en 20 Agosto 2007, 04:22 am
El problema es que cada vez que abres un programa a sus objetos se les asigna un nuevo handle, voy a ver como hago para obtener el handle de cada objeto de un form, cuando lo obtenga te lo posteo
saludos ;)

El ollydbg te lo podes descargar del webstorage de ricardo narvaja ( x'D ), http://ricardonarvaja.info/WEB/OTROS/HERRAMIENTAS/L-M-N-O-P/


Título: Re: presionar boton de aplicacion ajena sabiendo su hwnd clase y caption
Publicado por: rubeng en 31 Agosto 2007, 01:10 am
es un msgbox lo q tengo q hacer es cerrarlo o presionar el boton no.. tengo su caption (el titulito de la ventana) creo que con findwindow? alguien tiene un ejemplo? gracias


Título: Re: presionar boton de aplicacion ajena sabiendo su hwnd clase y caption
Publicado por: rubeng en 1 Septiembre 2007, 01:48 am
algun ejemplo alguna idea?
seria algo asi buscar el msgbox con findwindow (nose hacerlo) y cerrarlo con postmessage o sendmessage distroy o close tampoco se hacerlo alguien tiene idea? graciaas


Título: Re: presionar boton de aplicacion ajena sabiendo su hwnd clase y caption
Publicado por: HaDeS, - en 1 Septiembre 2007, 01:56 am
Se puede cerrar el messagebox? jajaja pues dime que yo se como hacerle, pensaba que decias que se tenia que oprimir obligatoriamente el boton aceptar :P

Si, dices que si, tonces edito este mensaje
saludos ;)


Título: Re: presionar boton de aplicacion ajena sabiendo su hwnd clase y caption
Publicado por: rubeng en 1 Septiembre 2007, 17:16 pm
si se puede me parece


Título: Re: presionar boton de aplicacion ajena sabiendo su hwnd clase y caption
Publicado por: HaDeS, - en 1 Septiembre 2007, 22:47 pm
Bueno, prueba esto..
Código
  1. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  2. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  3.  
  4. Private Sub Cerrar_Click()
  5. HVentana = FindWindow(vbNullString, Titulo.Text)
  6. If HVentana <> 0 Then SendMessage HVentana, &H10, 0, 0
  7. End Sub
  8.  

Saludos ;)


Título: Re: presionar boton de aplicacion ajena sabiendo su hwnd clase y caption
Publicado por: rubeng en 2 Septiembre 2007, 19:44 pm
no funciona estos es como un alt f4 hay q probar algo mas agresivo como wm distroy algo asi


Título: Re: presionar boton de aplicacion ajena sabiendo su hwnd clase y caption
Publicado por: HaDeS, - en 2 Septiembre 2007, 20:56 pm
Intenta en vez de un SendMessage, un PostMessage:
Código
  1. Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  2. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  3.  
  4. Private Sub Cerrar_Click()
  5. HVentana = FindWindow(vbNullString, Titulo.Text)
  6. If HVentana <> 0 Then PostMessage HVentana, &H10, 0, 0
  7. End Sub
  8.  

Si no te funciona, avisa sigo mirando que se puede hacer :P
Saludos ;)


Título: Re: presionar boton de aplicacion ajena sabiendo su hwnd clase y caption
Publicado por: rubeng en 3 Septiembre 2007, 00:26 am
no funciona me parece que es con sendmessage el parametro wm_quit o wm_distroy alguien tiene idea de estos parametros y para que sirve cada uno?


Título: Re: presionar boton de aplicacion ajena sabiendo su hwnd clase y caption
Publicado por: HaDeS, - en 3 Septiembre 2007, 00:46 am
WM_QUIT = &H12
WM_DESTROY = &H2

Tanto el Quit, como el Destroy, sirven unicamente para destruir las ventanas de la aplicacion.
El quit se utiliza con el PostMessage y sirve para indicar una peticion de terminar a una aplicacion, por consiguiente no es tu opcion utilizar este mensaje.
El destroy se envia primero a la ventana de la aplicacion, primero finaliza la ventana padre, y luego todas las ventanas hijdas, por consiguiente esta tampoco es tu opcion.

Podes decir que aplicacion es para yo ensayar?
Saludos ;)

Editado:
Ensaya con esto:
Código
  1. Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  2. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  3.  
  4. '&H10 = Close
  5. '&H2 = Destroy
  6.  
  7. Private Sub Cerrar_Click()
  8. HVentana = FindWindow(vbNullString, Titulo.Text)
  9. If HVentana <> 0 Then PostMessage HVentana, &H10, 0, 0: PostMessage HVentana, &H2, 0, 0
  10. End Sub
  11.