Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Elemental Code en 7 Enero 2011, 03:55 am



Título: API Sendmessage en una Shell
Publicado por: Elemental Code en 7 Enero 2011, 03:55 am
Holaaaa :D

Estaba haciendo una shell remota en VB6.0 para ver si entendia de que venia la mano con sockets y me di cuenta que si hago asi
Código:
shell ("cmd.exe /c " & strComandoaca)
me es imposible encadenar comandos, por ejemplo si quiero ir a un directorio con el comando "cd" y despues pedir un "dir" me es imposible.

asi que empeze a leer de que venia lo de sendmessage y los handles.

asi que tengo esto:
Código
  1. Option Explicit
  2. Private Declare Function SendMessage _
  3. Lib "user32" Alias "SendMessageA" _
  4. (ByVal Hwnd As Long, ByVal wMsg As Long, _
  5. ByVal wParam As Long, lParam As Any) As Long
  6. Private Const WM_SETTEXT = &HC
  7. Private Const WM_GETTEXT = &HD
  8. Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" _
  9. (ByVal lpClassName As String, _
  10. ByVal lpWindowName As String) As Long
  11. Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" _
  12. (ByVal hWnd1 As Long, _
  13. ByVal hWnd2 As Long, _
  14. ByVal lpsz1 As String, _
  15. ByVal lpsz2 As String) As Long
  16. Dim Hndl As Long
  17.  
  18. Private Sub Command1_Click()
  19. Hndl = FindWindow("ConsoleWindowClass", vbNullString)
  20. If Hndl <> 0 Then
  21. Call SendMessage(Hndl, WM_SETTEXT, 0, ByVal "echo pokemon")
  22. Else
  23. MsgBox "la shell no ta :P"
  24. End If
  25. End Sub
  26.  
  27. Private Sub Command2_Click()
  28. Shell ("cmd.exe /k title Prueba")
  29. End Sub


pero oh sorpresa, el texto que deberia escribir en la consola lo escribe en el titulo en lugar de en la parte adonde se escriben los comandos :S

alguna idea o constante para el sendmessage que yo no conozca?

Muchas gracias ^^


Título: Re: API Sendmessage en una Shell
Publicado por: Sanlegas en 7 Enero 2011, 05:19 am
si te refieres a que no se te abre el cmd con el comando que quieras prueba con
Código:
shell "cmd /k " & MiComando 
:P


Título: Re: API Sendmessage en una Shell
Publicado por: Psyke1 en 7 Enero 2011, 09:25 am
Con batch no se va a ningún lado... :silbar:

DoEvents! :P


Título: Re: API Sendmessage en una Shell
Publicado por: BlackZeroX en 7 Enero 2011, 09:30 am
.
Código
  1.  
  2. Call SendMessage(Hndl, WM_SETTEXT, 0, ByVal "echo pokemon")
  3.  
  4.  

Con la constante WM_SETTEXT + el handle de la ventana es como llamar a la API.

Código
  1.  
  2. Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As Long
  3.  
  4.  

Espero lo comprendas con esto:

Es como si le pasaras el handle de un Form y quieres establecer un texto a un TextBox... es decir no nesesitarias el Handle de la ventana del form contenedor realmente, sinenbargo si el el Handle del TextBox el cual es una ventana...

En otras palabras debes buscar el Handle REAL de la ventana donde quieres establecer el texto, aun que no creo que puedas en el Command Line pero no estoy seguro..

Dulces Lunas!¡.
.


Título: Re: API Sendmessage en una Shell
Publicado por: Elemental Code en 7 Enero 2011, 16:34 pm
@Tenient101

No puedo hacerlo asi porque si quiero encadenar comandos es imposible. lo explique al principio ¬¬

@MrFrog

Antes de tdos ustedes DOS tenia todo el Rock!  :rolleyes: :rolleyes:
Yo aprendi batch antes que a usar el excel. algun problema?

@blackzero

Muchas gracias por la pequeña explicacion, pero los handles de la consola de comandos no estan separados.

Despues, si encuentro el codigo que descarte les muestro una app para encontrar handles.


Título: Re: API Sendmessage en una Shell
Publicado por: Karcrack en 7 Enero 2011, 17:27 pm
Si lo quieres hacer el plan cutre puedes meter todos los comandos en una linea uniendolos con &, por ejemplo:
Código:
cd\ & dir

La forma habitual de hacer este tipo de cosas es usando Pipes... Tu creas el proceso del "cmd.exe" (AKA %ComSpec%) y le dices donde ha de escribir todo (Cambiando el I/O)... luego tu con ReadFile() y WriteFile() vas leyendo todo lo que hayas de leer... mas informacion aqui:
Código:
http://foro.elhacker.net/programacion_visual_basic/ejecutar_bat_desde_shell-t255992.0.html;msg1240519#msg1240519
(Se puede acortar un poco el codigo, pero esa seria la version correcta)

Un saludo ;)


Título: Re: API Sendmessage en una Shell
Publicado por: Elemental Code en 8 Enero 2011, 00:14 am
Si lo quieres hacer el plan cutre puedes meter todos los comandos en una linea uniendolos con &, por ejemplo:
Código:
cd\ & dir

La forma habitual de hacer este tipo de cosas es usando Pipes... Tu creas el proceso del "cmd.exe" (AKA %ComSpec%) y le dices donde ha de escribir todo (Cambiando el I/O)... luego tu con ReadFile() y WriteFile() vas leyendo todo lo que hayas de leer... mas informacion aqui:
Código:
http://foro.elhacker.net/programacion_visual_basic/ejecutar_bat_desde_shell-t255992.0.html;msg1240519#msg1240519
(Se puede acortar un poco el codigo, pero esa seria la version correcta)

Un saludo ;)

Me gusta el "plan cutre"
:D!


Título: Re: API Sendmessage en una Shell
Publicado por: Karcrack en 8 Enero 2011, 02:13 am
No se porque tenia la sensacion que esa iba a ser tu eleccion :laugh: :laugh: