Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: .:UND3R:. en 23 Enero 2015, 08:42 am



Título: Leer salida de un comando en MASM
Publicado por: .:UND3R:. en 23 Enero 2015, 08:42 am
Hola a todos me gustaría saber como puedo leer la salida de un comando ejecutado en la consola, me explico:

Mi programa -> Lanza el comando cmd.exe -> el programa recibe en un buffer lo que mostró es decir:
Citar
Microsoft Windows XP [Versión 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

Tengo el siguiente código, solo tomen importancia en donde he comentado:
Código
  1. .386
  2. option casemap:none
  3. .model flat,stdcall
  4. include c:\masm32\include\windows.inc
  5. include c:\masm32\include\kernel32.inc
  6. include c:\masm32\include\user32.inc
  7. include c:\masm32\include\shlwapi.inc
  8. includelib c:\masm32\lib\kernel32.lib
  9. includelib c:\masm32\lib\user32.lib
  10. includelib c:\masm32\lib\shlwapi.lib
  11.  
  12. .const
  13.  
  14. .data
  15. lpString2 byte "NOTE",0
  16. lpCmdLine1 byte "wget.exe http://www.pagina.com/new.php?start=yes&key=111022212 --delete-after",0
  17. lpCmdLine2 byte "wget.exe http://www.pagina.com/register.php?key=1093211 --delete-after",0
  18. lpCmdLine3 byte "cmd",0
  19. lpCmdLine4 byte 100 dup(?)
  20. lpCmdLine4_size byte ?
  21.  
  22. .data?
  23. lpString byte 80 dup(?)
  24. hWnd HANDLE ?
  25. lpOut byte 40 dup(?)
  26.  
  27. sinfo STARTUPINFO <>
  28. pinfo PROCESS_INFORMATION <>
  29. sattb SECURITY_ATTRIBUTES <>
  30.  
  31. hReadPipeOut HANDLE ?
  32. hWritePipeOut HANDLE ?
  33. .code
  34. main PROC
  35. invoke Sleep,20000d
  36. invoke WinExec,addr lpCmdLine1,SW_HIDE
  37. bucle:
  38. .WHILE(TRUE)
  39. invoke Sleep,3000d
  40. invoke GetForegroundWindow
  41. mov hWnd,eax
  42. .IF hWnd!=NULL
  43. invoke GetWindowText,eax,addr lpString, sizeof lpString
  44. mov edi,offset lpString
  45. mov eax,dword ptr ds:[lpString2]
  46. mov ecx,lengthof lpString
  47. cld
  48. repne scasb
  49. jnz bucle
  50. dec edi
  51. mov edi,dword ptr ds:[edi]
  52. cmp eax,edi
  53. jnz bucle
  54. invoke WinExec,addr lpCmdLine2,SW_HIDE
  55. ; ---AQUI LO QUE ESTOY INTENTANDO REALIZAR---
  56. mov sattb.nLength,sizeof sattb
  57. mov sattb.bInheritHandle,TRUE
  58. mov sattb.lpSecurityDescriptor,NULL
  59. invoke CreatePipe,addr hReadPipeOut,addr hWritePipeOut,addr sattb,0
  60.  
  61. invoke SetHandleInformation,hReadPipeOut,HANDLE_FLAG_INHERIT,NULL
  62.  
  63. mov eax,hReadPipeOut
  64.  
  65. mov sinfo.cb,sizeof sinfo
  66. mov sinfo.dwFlags,STARTF_USESTDHANDLES
  67. mov sinfo.hStdOutput,eax
  68. mov sinfo.hStdOutput,eax
  69. mov sinfo.hStdError,eax
  70. invoke CreateProcess,NULL,addr lpCmdLine3,NULL,NULL,TRUE,0,NULL,NULL,addr sinfo,addr pinfo
  71.  
  72. invoke ReadFile,hReadPipeOut,addr lpCmdLine4,sizeof lpCmdLine4,addr lpCmdLine4_size,NULL
  73. ; ------ FIN DE LO QUE ESTOY INTENTANDO REALIZAR -----
  74. invoke Sleep,1200000d
  75. .ENDIF
  76. .ENDW
  77. main ENDP
  78. END main

Problema: Luego de llamar a ReadFile nunca retorna y su buffer no contiene la salida de cmd.

A ver si me ayudan, saludos


Título: Re: Leer salida de un comando en MASM
Publicado por: Eternal Idol en 23 Enero 2015, 12:53 pm
Creating a Child Process with Redirected Input and Output (https://msdn.microsoft.com/en-us/library/ms682499%28v=vs.85%29.aspx).