Tout d'abord , bonjour à tous.
Dans ce tutoriel , je vais vous expliquer , et apprendre comment écrire et lire dans la mémoire en utilisant le langage c++ (C'est dans le titre ok)
Nécéssaire
Un IDE :
Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!
Un cerveau :
Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!
Un minimum de bases en c++:
Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!
à lire avec la suite.
Tout d'abord , je met en garde les puristes de la programmation POO , mais je ne fais ce tutoriel rien que expliquer les fonctions, je n'écris donc en aucun cas
un code de manière "POO".
I . Le pID, le handle:
Pour pouvoir écrire dans un programme , il nous faut son pID (processID).
Tout d'abord , nous allons chercher notre fenêtre (Ici , Wow) :
Code:
HWND fenetre = FindWindow(NULL, "World of Warcraft");
"fenetre" contient ici le handle de la fenêtre de WoW.
Ensuite , nous allons chercher le pID
Nous devons donc déclarer une variable de type DWORD.
Code:
DWORD pID;
GetWindowThreadProcessId(fenetre, &pID);
Et on stocke le pid dans notre variable pID.
Ensuite , nous allons déclarer le handle qui nous servira à écrire /lire la mémoire tout le long du programme.
Code:
HANDLE handle
handle = OpenProcess(PROCESS_ALL_ACCESS, 0, pID);
On ouvre le processus qui a le pid "pID".
Voilà nous avons notre handle.
II. Le playerbase:
Pour trouver notre playerbase (PB) il nous faut lire dans la mémoire, le code étant assez long , pour une question de lisibilité , je l'écrirais d'une manière simple , mais longue.
Il nous faut tout d'abord déclarer nos pointeurs
Code:
long pointer = 0x12d4ea8,base,value,p1
pointer contient l'adresse où nous allons lire dans un premier temps.
Bon la question est , comment lire dans la mémoire en c++?
Il nous faut tout d'abord inclure une librairie :
Code:
#include <windows.h>
La fonction pour lire dans la mémoire est :
ReadProcesseMemory().
Exemple d'utilisation
Code:
ReadProcessMemory(handle,(LPVOID)pointer,&value,sizeof(value),NULL);
-Handle : représente "l'adresse de la fenêtre". Il indique dans quel programme nous lirons.
-pointer : contient l'adresse à laquelle nous allons lire.
-value : stock le contenue de l'adresse lu dans cette variable.
-Sizeof(value) : renvoit la valeur de la variable.
-Null : un argument qui ne nous intéresse pas.
Cependant , l'acquisition du playerbase se fait en 3 lectures.
On procède donc de cette manière :
Code:
ReadProcessMemory(handle,LPVOID)pointer,&value,sizeof(value),NULL);
ReadProcessMemory(handle,(LPVOID)(value + 0x34),&p1,sizeof(p1),NULL);
ReadProcessMemory(handle,(LPVOID)(p1+ 0x24),&base,sizeof(base),NULL);
Pour comprendre le fonctionnement d'acquisition du playerbase , référez vous au Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!
Nous avons maintenant notre playerbase dans la variable base.
III. Ecrire dans la mémoire:
On s'en serait douter , écrire dans la mémoire n'est pas bien plus compliquer une fois les étapes précédentes effectuées :
On utilise la fonction WriteProcessMemory().
Exemple d'utilisation:
Code:
WriteProcessMemory(handle,(LPVOID) (base + 0x798),&x,sizeof(x),NULL);
-Handle : représente "l'adresse de la fenêtre". Il indique dans quel programme nous écrirons.
-base + 0x798 : représente l'adresse à laquelle nous allons écrire.
Base est le playerbase (Ha bon?) et 0x798 est l'offset (position X du joueur).
-x : est la variable qui contient ce que nous écrivons .
-Sizeof(x): renvoit la taille de la variable
-Null : un argument qui ne nous intéresse pas.
IV. Conclusion :
Notre programme devrais avoir cette allure là : Code:
#include <windows.h>
#include <iostream>
using namespace std;
int main()
{
long pointer = 0x12d4ea8,base,value,p1;
HWND fenetre;
HANDLE handle;
DWORD pID;
fenetre = FindWindow(NULL, "World of Warcraft");
if (fenetre != 0)
{
GetWindowThreadProcessId(fenetre, &pID);
handle = OpenProcess(PROCESS_ALL_ACCESS, 0, pID);
ReadProcessMemory(handle,(LPVOID)pointer,&value,sizeof(value),NULL);
ReadProcessMemory(handle,(LPVOID)(value + 0x34),&p1,sizeof(p1),NULL);
ReadProcessMemory(handle,(LPVOID)(p1+ 0x24),&base,sizeof(base),NULL);
cout<<base;
// On lit / écrit la mémoire à partir d'ici.
}
return 0;
}
Le tutoriel s'achève ici , j'espère que vous aurez compris.
Si vous avez besoin d'aide , où un problème avec le tuto n'hésitez pas à me MP ou de répondre pour que les autres lecteurs en profitent.
N.B. la librairie nomad memory est basée sur ces fonctions , je ne sais pas pour blackmagic en revanche.
Dans ce tutoriel , je vais vous expliquer , et apprendre comment écrire et lire dans la mémoire en utilisant le langage c++ (C'est dans le titre ok)
Nécéssaire
Un IDE :
Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!
Un cerveau :
Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!
Un minimum de bases en c++:
Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!
à lire avec la suite.
Tout d'abord , je met en garde les puristes de la programmation POO , mais je ne fais ce tutoriel rien que expliquer les fonctions, je n'écris donc en aucun cas
un code de manière "POO".
I . Le pID, le handle:
Pour pouvoir écrire dans un programme , il nous faut son pID (processID).
Tout d'abord , nous allons chercher notre fenêtre (Ici , Wow) :
Code:
HWND fenetre = FindWindow(NULL, "World of Warcraft");
"fenetre" contient ici le handle de la fenêtre de WoW.
Ensuite , nous allons chercher le pID
Nous devons donc déclarer une variable de type DWORD.
Code:
DWORD pID;
GetWindowThreadProcessId(fenetre, &pID);
Et on stocke le pid dans notre variable pID.
Ensuite , nous allons déclarer le handle qui nous servira à écrire /lire la mémoire tout le long du programme.
Code:
HANDLE handle
handle = OpenProcess(PROCESS_ALL_ACCESS, 0, pID);
On ouvre le processus qui a le pid "pID".
Voilà nous avons notre handle.
II. Le playerbase:
Pour trouver notre playerbase (PB) il nous faut lire dans la mémoire, le code étant assez long , pour une question de lisibilité , je l'écrirais d'une manière simple , mais longue.
Il nous faut tout d'abord déclarer nos pointeurs
Code:
long pointer = 0x12d4ea8,base,value,p1
pointer contient l'adresse où nous allons lire dans un premier temps.
Bon la question est , comment lire dans la mémoire en c++?
Il nous faut tout d'abord inclure une librairie :
Code:
#include <windows.h>
La fonction pour lire dans la mémoire est :
ReadProcesseMemory().
Exemple d'utilisation
Code:
ReadProcessMemory(handle,(LPVOID)pointer,&value,sizeof(value),NULL);
-Handle : représente "l'adresse de la fenêtre". Il indique dans quel programme nous lirons.
-pointer : contient l'adresse à laquelle nous allons lire.
-value : stock le contenue de l'adresse lu dans cette variable.
-Sizeof(value) : renvoit la valeur de la variable.
-Null : un argument qui ne nous intéresse pas.
Cependant , l'acquisition du playerbase se fait en 3 lectures.
On procède donc de cette manière :
Code:
ReadProcessMemory(handle,LPVOID)pointer,&value,sizeof(value),NULL);
ReadProcessMemory(handle,(LPVOID)(value + 0x34),&p1,sizeof(p1),NULL);
ReadProcessMemory(handle,(LPVOID)(p1+ 0x24),&base,sizeof(base),NULL);
Pour comprendre le fonctionnement d'acquisition du playerbase , référez vous au Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!
Nous avons maintenant notre playerbase dans la variable base.
III. Ecrire dans la mémoire:
On s'en serait douter , écrire dans la mémoire n'est pas bien plus compliquer une fois les étapes précédentes effectuées :
On utilise la fonction WriteProcessMemory().
Exemple d'utilisation:
Code:
WriteProcessMemory(handle,(LPVOID) (base + 0x798),&x,sizeof(x),NULL);
-Handle : représente "l'adresse de la fenêtre". Il indique dans quel programme nous écrirons.
-base + 0x798 : représente l'adresse à laquelle nous allons écrire.
Base est le playerbase (Ha bon?) et 0x798 est l'offset (position X du joueur).
-x : est la variable qui contient ce que nous écrivons .
-Sizeof(x): renvoit la taille de la variable
-Null : un argument qui ne nous intéresse pas.
IV. Conclusion :
Notre programme devrais avoir cette allure là : Code:
#include <windows.h>
#include <iostream>
using namespace std;
int main()
{
long pointer = 0x12d4ea8,base,value,p1;
HWND fenetre;
HANDLE handle;
DWORD pID;
fenetre = FindWindow(NULL, "World of Warcraft");
if (fenetre != 0)
{
GetWindowThreadProcessId(fenetre, &pID);
handle = OpenProcess(PROCESS_ALL_ACCESS, 0, pID);
ReadProcessMemory(handle,(LPVOID)pointer,&value,sizeof(value),NULL);
ReadProcessMemory(handle,(LPVOID)(value + 0x34),&p1,sizeof(p1),NULL);
ReadProcessMemory(handle,(LPVOID)(p1+ 0x24),&base,sizeof(base),NULL);
cout<<base;
// On lit / écrit la mémoire à partir d'ici.
}
return 0;
}
Le tutoriel s'achève ici , j'espère que vous aurez compris.
Si vous avez besoin d'aide , où un problème avec le tuto n'hésitez pas à me MP ou de répondre pour que les autres lecteurs en profitent.
N.B. la librairie nomad memory est basée sur ces fonctions , je ne sais pas pour blackmagic en revanche.