FindWindow() funciona bien bajo win Vista?

Iniciado por Debci, 16 Agosto 2010, 10:30 AM

0 Miembros y 1 Visitante están viendo este tema.

Debci

Buenas a todos, recientemente hice un pequeño codigo en C++ para dopar una aplicacion, bajo windows XP funciona perfectamente pero cuando la quiero correr en Vista nada:

Código (cpp) [Seleccionar]

#include <iostream>
#include <windows.h>

using namespace std;

int main()
{
HWND hVentana;

if (!(hVentana = FindWindow(NULL,"ProgramaCrackeado")))
{
MessageBox(NULL,"No se pudo encontrar la ventana","Error",MB_OK);
return -1;
}
}

Necesito conseguir el Handle de la ventana para obtener el PID del proceso y modificar sectores concretos de su memoria.

Lo que ocurre es que parece no encontrar la ventana puesto que el nombre es correcto, porque lo hago con la calculadora de windows y ocurre exactamente lo mismo, nunca encuentra la ventana, asi que puse el parametro del nombre como null y segun MSDN deben coincidir todas las ventanas con esa "Busqueda" pero ocurrian cosas indeseadas pues injectaba en memoria de procesos que no queria injectar.


Como lo mas probable es que este deprecated o en Vista no funcione, queria preguntar si existe alguna otra manera de obtener el PID de un proceso en ejecucion.


Littlehorse

A simple vista debería funcionar, llama a GetLastError luego de FindWindow para tener una idea de donde proviene el error.

En cuanto al PID, hay demasiadas formas para obtenerlo, un ejemplo básico podría ser este:

Código (cpp) [Seleccionar]
DWORD ProcessID;   
HANDLE Handle;
PROCESSENTRY32 ProcI;

Handle=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
ProcI.dwSize=sizeof(PROCESSENTRY32);

while(Process32Next(Handle,&ProcI))
     if(!strcmp(ProcI.szExeFile,"ejemplo.exe"))
        ProcessID=ProcI.th32ProcessID;
     
std::cout<<ProcessID<<std::endl;
CloseHandle(Handle);


Por supuesto agregándole los chequeos que corresponden.

CreateToolhelp32Snapshot
Process32First
Process32Next

Pero obviamente hay infinidad de métodos y combinaciones, por ejemplo utilizando funciones como:

GetWindowThreadProcessId
GetProcessId
OpenProcess
EnumProcesses

Incluso llamadas nativas como ZwQueryInformationProcess. Un largo etc.

También hay que tener en cuenta el contexto de seguridad de cada proceso y los privilegios de acceso. Podes leer sobre eso aquí

Saludos
An expert is a man who has made all the mistakes which can be made, in a very narrow field.

Debci

Muchisimas gracias, excelente respuesta, en cuanto a la seguridad del proceso creo eso ocurre cuando intento escribir o leer memoria, pero por lo que veo hay maneras de saltarlo.

Saludos

Garfield07



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo