[C++]Memory Editing

    Publicités

Users Who Are Viewing This Thread (Total: 1, Members: 0, Guests: 1)

Nayres

Membre Banni
Apr 15, 2012
3,431
0
341
Quelque part.
Hello communeauté,
Vous avez peut-être vu mon précédent tutoriel en C++, qui consiste à créer une GUI dans notre DLL, pour enfin l'injecter. Cette fois-ci, je compte vous montrer, comment peut-on utiliser ceci pour faire du gamehacking, ou en d'autre terme un cheat.

Comme dans l'autre tutoriel on va utiliser VC++, puisqu'il est le plus approprié à créer une GUI, après avoir créer votre GUI injectable, on va la modifier un peu.

Requis : 1 Checkbox.

Tout d'abors on crée un header, nommez le cheat.h.

On aura besoin des fichiers en-têtes suivant


PHP:
#include <windows.h>
#include <tlhelp32.h>

Maintenant on définit la fonction GetPidByName trouvable simplement avec google.

Voici la fonction :


PHP:
DWORD GetPIDbyName(char* szProcess)
{
    HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    PROCESSENTRY32 PE;
    PE.dwSize = sizeof(PE) ;
    Process32First(hSnap, &PE);

    while (Process32Next(hSnap, &PE))
    {
        char Converted[100] = "\0";
        wcstombs(Converted, PE.szExeFile, sizeof(Converted));
        if (strcmp(Converted, szProcess) == 0)
        {
            return PE.th32ProcessID;
        }
    }
    return 0;
}
 //On définit la fonction GetPidByName, pour pouvoir avoir le PID de notre cible avec le nom du process.

Et maintenant pour notre fonction, nommons la GodModeFunc par exemple, ajoutez ceci :


PHP:
void TutorielFunction(bool fEnable) // Vous voyez qu'il y a une boucle que j'ai mise dans les paramètres de ma fonction, la fonction sera soit en 'activé soit en 'désactivé'
{
	DWORD PID = GetPIDbyName("Game.exe"); //On cherche le PID du process.
        HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID); // on ouvre la mémoire
      {
            	int newvalue = 3135869072; // Les values dépendent de votre application.
		int anciennevalue = 3135833466;
                int GodModAdress = 0x0051C635;
                // On définit nos value, nos addresses, j'ai mis 2 values puisqu'on activera puis désactivera la checkbox.
                        if(fEnable) // Voila pourquoi on avait besoin d'un paramètre booléan
                        {
                               WriteProcessMemory (hProc, (LPVOID)GodModAdress, (LPVOID) &newvalue, sizeof(&newvalue), NULL); // On écrit dans notre mémoire, et on la modifie par notre nouvelle value.
                         }
                         else
                         {
                                WriteProcessMemory (hProc, (LPVOID)GodModAdress, (LPVOID) &anciennevalue, sizeof(&anciennevalue), NULL); // pour remettre la value initial.
                          }
      }
      return; // aucune value en return puisque c'est une fonction void
}


Maintenant on relie notre fonction à notre checkbox.
Allez dans votre GUI, double cliquez sur votre checkbox, vous verrez un code comme ceci :


PHP:
private: System::Void checkBox1_CheckedChanged(System::Object^  sender, System::EventArgs^  e) {
		 }
};
}

On supprime les {} se trouvant après et vous ajoutez un ;

Vous aurez comme ceci :


PHP:
checkBox1_CheckedChanged(System::Object^  sender, System::EventArgs^  e);
};
}

On retourne au .cpp de notre form, si vous l'avez nommé MyForm, allez à MyForm.cpp

Vous incluez cheat.h comme ceci


PHP:
#include "Cheat.h"

Et enfin

PHP:
void MyForm::checkBox1_CheckedChanged(System::Object^  sender, System::EventArgs^  e)
{
          TutorielFunction(this->checkBox1->Checked);
}

Et enfin votre cheat est prêt à être utiliser .
 
Last edited:

Hutigh

Membre d'Honneur
V
Apr 10, 2010
1,543
6
954
27
Salut tous d'abords merci pour ce tuto très bien expliqué, mais vc++ me trouve une erreur dans cette partie du code :

PHP:
void TutorielFunction(bool fEnable); 
{ 
    DWORD PID = GetPIDbyName("Game.exe"); //On cherche le PID du process. 
        HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID); 
        DWORD proccess_ID; 
      { 
                int newvalue = 3135869072; // Les values dépendent de votre application. 
        int anciennevalue = 3135833466; 
             DWORD newvaluesize = sizeof(newvalue); 
        DWORD anciennevaluesize = sizeof(anciennevalue); 
                int GodModAdress = 0x0051C635; 
                // On définit nos value, nos addresses, j'ai mis 2 values puisqu'on activera puis désactivera la checkbox. 
                        if(fEnable) // Le code représente, que si notre checkbox est coché. 
                        { 
                               WriteProcessMemory (hProc, (LPVOID)GodModAdress, (LPVOID) &newvalue, sizeof(&newvalue), NULL); // On écrit dans notre mémoire, et on la modifie par notre nouvelle fonction. 
                         } 
                         else 
                         { 
                                WriteProcessMemory (hProc, (LPVOID)GodModAdress, (LPVOID) &anciennevalue, sizeof(&anciennevalue), NULL); // pour remettre la value initial. 
                          } 
      } 
      return 0; 
}

L'erreur exacte et celle ci :
c:\users\**\documents\visual studio 2010\projects\testdll\testdll\Cheat.h(9): error C2447: '{'*: en-tête de fonction manquant (liste formelle à l'ancien format*?)

Peux tu m'éclaircir sur cette erreur s'il te plait ? :).
 
Last edited:

Nayres

Membre Banni
Apr 15, 2012
3,431
0
341
Quelque part.
Ajoute un } à la fin.
Je n'ai pas débug le code donc quelques erreurs simples pourrait intervenir.
 
Last edited:

Hutigh

Membre d'Honneur
V
Apr 10, 2010
1,543
6
954
27
Salut, merci de la réponse, malheureusement j'ai déjà essayé de rajouter un } à la fin mais l'erreur reste la même.
Si tu ne sais pas d'où cela pourrais venir pas grave :).
 

Nayres

Membre Banni
Apr 15, 2012
3,431
0
341
Quelque part.
Tu compile en unicode ou MBCS ?
Si tu es en unicode change vers MBCS, propriété du projet, général, et change unicode à MBCS.
 

Hutigh

Membre d'Honneur
V
Apr 10, 2010
1,543
6
954
27
eBvvg.png

L'erreur est toujours la même, merci de m'aider en tous cas c'est bien gentil j'y ai ajouté un screen pour que peut-être tu puisse encore m'aider :).

Comme je me connais ça dois être une erreur grotesque de ma part mais bon :).
 

Hutigh

Membre d'Honneur
V
Apr 10, 2010
1,543
6
954
27
Super c'étais bien ça, mais du coup d'autres erreurs fonds leurs apparitions

c:\users\**\documents\visual studio 2010\projects\testdll\testdll\Cheat.h(10): error C3861: 'GetPIDbyName'*: identificateur introuvable
1>c:\users\**\documents\visual studio 2010\projects\testdll\testdll\Cheat.h(30): error C2562: 'TutorielFunction'*: fonction 'void' retournant une valeur
1> c:\users\**\documents\visual studio 2010\projects\testdll\testdll\Cheat.h(8)*: voir la déclaration de 'TutorielFunction'

Si jamais tu es dispo pour en discuter sur skype pour que je ne pollue plus ce sujet n'hésite pas à me parler sur skype je te ferais un partage d'écran, et bonne chance pour ton projet ! :).