Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: juancaa en 2 Febrero 2013, 19:06 pm



Título: Problema Función "OpenProcess"
Publicado por: juancaa en 2 Febrero 2013, 19:06 pm
Al llamar a la función OpenProcess(PROCESS_ALL_ACCESS, 0, pid) esta me devuelve NULL es decir no es capaz de abrir el proceso. Utilizando la función getLastError() esta me devuelve 5, es decir, problemas Administrativos por lo que tengo entendido (Lectura, Escritura). La cosa esta en como puedo solucionar esto para que si me sea posible obenter el proceso??

Nota: Estoy utilizando Microsoft Visual Studio C++ y Windows 8.

Para que se hagan una mejor idea aqui les dejo mi codigo:

Código
  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <Windows.h>
  4.  
  5. using namespace std;
  6.  
  7. int _tmain(int argc, _TCHAR* argv[])
  8. {
  9.  
  10. HWND hwnd = FindWindow(0, _T("NOMBRE_VENTANA"));
  11.  
  12. HANDLE hProcess;
  13.  
  14. DWORD pid;
  15.  
  16. if (!hwnd) {
  17. cout << "ERROR 1\n\n";
  18. } else {
  19. GetWindowThreadProcessId(hwnd, &pid);
  20.  
  21. cout << "PID = " << pid << "\n\n";
  22.  
  23. hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, pid); //PROBLEMA AQUI!!!
  24.  
  25. if (!hProcess) {
  26.                        cout << "ERROR = " << GetLastError() << "\n\n"; //OBTENEMOS ERROR = 5 (PRIVILEGIOS)
  27. } else {
  28. cout << "PROCESS OPENED\n\n";
  29.  
  30.                        //GESTIONAR...
  31. }
  32.  
  33. CloseHandle(hProcess);
  34.  
  35. }
  36.  
  37. cin.get();
  38. return 0;
  39. }
  40.  

A ver si alguien puede echarme una mano pues no se como salir adelante...
Saludos y gracias de antemano!!


Título: Re: Problema Función "OpenProcess"
Publicado por: naderST en 2 Febrero 2013, 19:41 pm
Qué proceso estás intentado abrir?

EDIT:

Mira este enlace http://social.msdn.microsoft.com/Forums/en-US/windowssdk/thread/f7488a42-ce3a-449b-a1d1-02af97365df4/


Título: Re: Problema Función "OpenProcess"
Publicado por: juancaa en 2 Febrero 2013, 20:27 pm
Gracias por tu respuesta naderST, estoy intentando abrir un juego, en mi caso el WC3 para leer y modificar la memoria, pero el caso es que el problema se repite con cualquier ventana que quiera leer : Codigo de Error = 5... He leido el enlace que me has facilitado y la verdad es que lo que dicen alli ya lo habia intentado sin exito. He probado cambiando el valor de PROCESS_ALL_ACCESS por PROCESS_VM_READ pero sigue dando el mismo problema... Segun dicen debo habilitar algo de SeDebugPrivilege para lograr obtener privilegios.

Mirando sobre como activar o desactivar los privilegios en C he llegado a este enlace pero no acabo de lograrlo :
http://msdn.microsoft.com/en-us/library/aa446619.aspx (http://msdn.microsoft.com/en-us/library/aa446619.aspx)

He utilizado la funcion que especifico en el enlace setPrivileges sin exito...


Título: Re: Problema Función "OpenProcess"
Publicado por: naderST en 2 Febrero 2013, 20:49 pm
Intenta abrir el proceso con PROCESS_QUERY_INFORMATION y utiliza AdjustTokenPrivileges (http://msdn.microsoft.com/en-us/library/windows/desktop/aa375202(v=vs.85).aspx) para habilitar SeDebugPrivilege


Título: Re: Problema Función "OpenProcess"
Publicado por: juancaa en 2 Febrero 2013, 23:17 pm
Pufff... A ver he utilizado la funcion SetPrivileges  para ajustar los privilegios tal como dice la API, pero la funcion LookupPrivilegeValue me devuelve un codigo de error 1313 (ERROR_NO_SUCH_PRIVILEGE) que no tengo ni idea de como resolver... De verdad esto es tan complicado ?


Título: Re: Problema Función "OpenProcess"
Publicado por: juancaa en 2 Febrero 2013, 23:54 pm
Despues de horas y horas de insaciable busqueda he conseguido hallar la respuesta en un antiguo post del foro :
http://foro.elhacker.net/programacion_cc/openprocess_no_me_funciona_en_visual_c_2008-t262234.0.html (http://foro.elhacker.net/programacion_cc/openprocess_no_me_funciona_en_visual_c_2008-t262234.0.html)

Debido a que Visual Studio corre en modo usuario es necesario ejecutarlo con privilegios de administrador... Esto a solucionado mi problema finalmente. Gracias por tu ayuda naderST!