Novedades

Guia Obtener lista de identificadores de procesos en C++



c0de

Administrador
Desde
19 Abr 2020
Mensajes
329
En este hilo, cubriré cómo obtener una lista de identificadores de procesos. ¡Podrás hacer esto desde el modo de usuario, que es lo que lo hace tan genial! En realidad, hay bastantes aplicaciones de esto en el mundo de la piratería de juegos. Por ejemplo, podría verificar si el juego o el módulo anti-trampas tiene un identificador abierto para su trampa. También es interesante en general ver todas las manijas que están abiertas en su computadora. Todo esto funciona llamando a funciones NT no documentadas (ntdll), debido a esto, el código puede requerir alguna pequeña modificación para ejecutarse en su sistema en particular. Si el código no funciona, es probable que deba modificar las estructuras internas. SystemInfo.h.

Cómo obtener una lista de identificadores de procesos​

Para comenzar a enumerar a través de identificadores, primero debemos resolver las ubicaciones en la memoria de las funciones ntdll que usaremos. Dado que todo lo que queremos hacer es obtener una lista de identificadores de objetos, podemos hacerlo llamando a NtQuerySystemInformation. Dado que no hay un encabezado ntdll oficial, necesitaremos crear las plantillas de función nosotros mismos. Así es como podrían verse para algunas de nuestras funciones:

C++:
Por favor, Acceder o Regístrate para ver el contenido de los códigos!

Simplemente podemos llamar a GetModuleHandle y GetProcAddress para resolver la dirección virtual de estas funciones en nuestro programa. Eso podría ser algo como esto:

C++:
Por favor, Acceder o Regístrate para ver el contenido de los códigos!

¡Ahora podemos comenzar a obtener nuestra lista de identificadores de procesos! Lo primero que hacemos es llamar a NtQuerySystemInformation y pasarle un puntero a nuestro
Estructura SYSTEM_HANDLE_INFORMATION. La primera vez que lo llamamos solo para saber el tamaño de la información que estamos consultando. Con esa información, ahora podemos asignar nuestra estructura SYSTEM_HANDLE_INFOROMATION para que tenga el tamaño exacto que la necesitamos. A partir de ahí, podemos consultar todos los objetos del sistema llamando a las funciones una vez más. Así es como se vería ese código

C++:
Por favor, Acceder o Regístrate para ver el contenido de los códigos!

Ahora repasaré cómo enumerar a través de nuestra estructura SYSTEM_HANDLE_INFORMATION. El primer miembro de la estructura es el número de identificadores y el segundo miembro es una matriz que contiene todos los identificadores. Esto hace que recorrerlos sea bastante autoexplicativo. Podrías hacer un bucle for que se vea así.

C++:
Por favor, Acceder o Regístrate para ver el contenido de los códigos!

Y aquí está la estructura de SYSTEM_HANDLE

C++:
Por favor, Acceder o Regístrate para ver el contenido de los códigos!

¡Eso concluye este tutorial, y debe saber cómo obtener una lista de identificadores de procesos! ¡Con suerte, ustedes pueden hacer algunos proyectos geniales con esto! Asegúrese de consultar la fuente adjunta para obtener más ejemplos. Un enorme agradecimiento a Zoltan Csizmadia por hacer que esta información sea tan accesible.

Creditos
Rake
 
Última edición:
Atrás
Arriba