anun1

martes, 4 de marzo de 2025

Usando Las Apis ReadProcessMemory y WriteProcessMemory en C++

Hola amigos hoy les traigo un nuevo programa es como usar las apis mensionadas en el titulo ReadProcessMemory y WriteProcessMemory  en c++ yo ya habia hecho un video y un programa en vb6 pero el video me lo tumbaron de la plataforma de youtube ya que me bloquearon la cuenta en fin ahora lo traigo en c++ es sencillo, antes que nada se bajan el dev c++ si no lo tienen y le dan clic en  

declaramos las librarias a usar que son 2 y la ultima linea es para no estar escribiendo std:: a cada rato

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

using namespace std;

enseguida de eso declaramos el main y la variable pid como variable DWORD y le pedimos al usuario que nos de el pid del proceso

int main()

{

   DWORD pid;

   cout<<"dame el pid del preceso: ";

   cin>>pid; 

para saber el pid de un ejecutable entran al administrador de tareas y fijais en el pid, si no les aparece solo den clic derecho en la barra de arriba  y palamean la opcion pid asi


para los que no saben sacar el administrador de tareas solo dan clic en la tecla windows + R y teclean taskmgr asi


ahora tecleamos lo siguiente en el codigo

char texto[64]; 

void *direccion;

HANDLE Proceso=OpenProcess(PROCESS_ALL_ACCESS,0,pid);

lo que hace esta parte es declarar una variable char llamada texto con 64 espacios de memoria donde cada espacio ocupara una letra asi que ustedes le pueden poner mas de 64 si quieren leer mas bytes de memoria yo solo puse 64 para el ejemplo le pueden poner mas.

declaramos la variable direccion como void y usamos la api OpenProcess para abrir el proceso o ejecutable que vamos a leer, otra cosa yo aqui no estoy usando las apis

 FindWindow, GetProcessId y GetWindowThreadProcessId  

para buscar el preceso en ejecucion por su nombre y luego abrirlo no, aqui usaremos el administrador de tareas y el usuario nos dara el pid del ejecutable, lo puedo hacer asi pero lo quise hacer mas sencillo y sin tanto rollo seguimos

if(Proceso)

{

    cout<<"Dame la direccion: ";

    cin>>direccion;

ReadProcessMemory(Proceso,direccion,&texto,sizeof(texto),0);

cout<<"El texto: "<<texto<<"  a sido encontrado ingrese el nuevo texto: ";

cin>>texto;

    WriteProcessMemory(Proceso,direccion,&texto,sizeof(texto),0);

    

    cout<<"El texto a sido ingresado correctamente";

}

}

ponemos un if si el preceso lo abrio devolvera un true y entra al if, despues de eso le pedimos al usuario que nos de la direccion de memoria que vamos a leer, para buscar la direccion de memoria usaremos el cheat engine lo pueden descargar si no lo tienen, despues usando la api ReadProcessMemory leemos la posicion de memoria pasandole el proceso, la direccion, el array de char que la llamamos texto y la longitud de el con sizeof(texto) que es 64

de la api WriteProcessMemory no es nesesario explicar funciona igual pero en ves de leer escribe y se le pasan los mismos datos asi que el codigo completo queda asi


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

using namespace std;

int main()
{
   DWORD pid;
   cout<<"dame el pid del preceso: ";
   cin>>pid;
  	
   char texto[64]; 
   void *direccion;
   HANDLE Proceso=OpenProcess(PROCESS_ALL_ACCESS,0,pid);
   	
	if(Proceso)
	{	
	    cout<<"Dame la direccion: ";
	    cin>>direccion;
		
		ReadProcessMemory(Proceso,direccion,&texto,sizeof(texto),0);
		
		cout<<"El texto: "<<texto<<"  a sido encontrado ingrese el nuevo texto: ";
		cin>>texto;
		
	    WriteProcessMemory(Proceso,direccion,&texto,sizeof(texto),0);
	    
	    cout<<"El texto a sido ingresado correctamente";
	}
	
}


ya despues lo compilamos y ejecutamos aqui




nos pide el pid del ejecutable yo para este ejemplo usare el crackme de hendrix este y en el cuadro de texto le pondre polomon


abro el administrador de tareas en mi pc y miro que el pid es 3184


asi que lo tecleo en mi programa para leer


ahora antes de seguir busco la posicion de memoria de la palabra polomon que teclee en el programa de hendrix con el cheat engine asi


y buscamos el preceso aqui esta


damos clic en open y buscamos la palabra polomon asi


aparece lo siguiente


damos enter donde pusimos el pid y tecleamos la direccion de memoria asi


damos enter y nos arroja lo siguiente



 ahora para el nuevo texto que pondre sera 1234567890 y damos enter y me arroja lo siguiente


como ven solo escribio 7 digitos los mismos digitos que tiene polomon, en fin falta mucho que perfeccionar este simple codigo es para que se vallan familiarizando con estas apis...otra cosa este codigo no lee cadenas de unicode si tratan de leer solo leera la primera letra pero en fin eso para otro tema

saludos flamer y espero les halla gustado este simple codigo 


No hay comentarios.:

Publicar un comentario