Création d'un trainer pour cheater : ecriture dans un process.

Soyez le premier à donner votre avis sur cette source.

Vue 32 306 fois - Téléchargée 1 616 fois

Description

Voici mon premier tutorial sur le GameHacking,
Il est très simple mais il introduit les bases.

Le tutorial est scindé en trois parties :
1) Création d'un FakeGame.
2) Désasemblage.
3) Création du trainer.

Bonne lecture ! ;)

Source / Exemple :


Trainer et Fake Game créer par Krust
====================================

Les trainers sont des programmes qui "Hack" les jeux essentielement afin d'avoir vie infinies, munitions, etc.
Voici un exemple de comment créer votre propre Cheat (Cheat = trainer).

1)Création du Fake Game (émulation d'un jeu).
---------------------------------------------

NE dite pas, ouais il sert à rien ton jeu car Oui effectivement il sert à rien.
Le but est d'arrêter le decende des points de vies, imaginons que les ennemis tirent toutes les 300ms sur notre héro...
Donc voilà c'est un simple programme qui affiche les pv qui diminue jusqu'à arrivé à Zero, le moment ou le hero meurt.
Si vous ne comprenez pas sa conception, il n'est pas nécéssaire de continuer à lire cette exemple.

2)Désasemblage du Fake Game.
----------------------------

Voilà, nous sommes devant un jeu où on ne sait pas gagné, voilà qui est embêtant,...
Mais nous sommes assez malin que pour réussir ce jeu.

Premièrement on désasemble le programme avec un désasembleur (n'importe lequel fera l'affaire).
Prenez par exemple Windasm 9 qui est bien pour débuter.
On ouvre l'exe et on attend qu'il génere le code en assembleur.

Voilà le listing est affiché (voir Fake_Game-DASM.txt qui est le fichier Désasembler sauver en fichier texte)
Le code est maintenant lisible !

J'expliquerais les étapes du débugage plus tard, dans un autre tutorial.

Mais si on se débrouille on tombe sur ces lignes de code :

:00401079 837DFC00                cmp dword ptr [ebp-04], 00000000  	// On compare l'address pointer par Ebp+4 à zero (notre int i)  -notre while()
:0040107D 765C                    jbe 004010DB				// Si i <=0 alors on saute vers 004010DB			-
:0040107F 8B4DFC                  mov ecx, dword ptr [ebp-04]		// Aussi non, on met dans le regsitre ecx le contenu de notre i
:00401082 83E901                  sub ecx, 00000001			// On soustrait 1 à ecx
:00401085 894DFC                  mov dword ptr [ebp-04], ecx		// On met ecx à la place de la valeur actuelle de i. (i=i-1)

Il y a maintenant plusieurs possibilitées pour éviter de perdre des vies (i).
LA plus simple est sans doute de NOPer l'instruction "sub ecx,00000001" qui est codé sur 3 Bytes.
C-a-d, de mettre l'instruction NUL (NOP, 0x90) à la place.
Comme elle est codé sur 1byte, il va faloir en mettre 3 (NOP NOP NOP) :p.
le code patché sera alors :

:00401079 837DFC00                cmp dword ptr [ebp-04], 00000000  	// On compare l'address pointer par Ebp+4 à zero (notre int i)
:0040107D 765C                    jbe 004010DB				// Si i <=0 alors on saute vers 004010DB
:0040107F 8B4DFC                  mov ecx, dword ptr [ebp-04]		// Aussi non, on met dans le regsitre ecx le contenu de notre i
:00401082 90	                  NOP					// On fait rien
:00401083 90	                  NOP					// On fait rien
:00401084 90	                  NOP					// On fait rien
:00401085 894DFC                  mov dword ptr [ebp-04], ecx		// On met ecx à la place de la valeur actuelle de i. (i=i)

Et voilà i ne sera plus désacrémenté ! et donc nous aurons toujours le même nombre de vies ;).
Avant de faire un trainer, il est préférable de tester notre patch, pour ça on met un BreakPoint sur notre ligne 00401082.
On lance le processus dans le debuger et quand il pop, on patch notre code en insérant les 3 NOPs.
Victoire ça marche !

On va pouvoir passer à la programmation de notre trainer.

3)Création du trainer.
----------------------

Les étapes:

1) Trouver notre handle de fenêtre. FindWindow(ClassName,WindowsText)
2) Chercher son process ID par son handle. GetWindowThreadProcessId(Handle,&ProcessID)
3) Ouvire le process OpenProcess(AccessType,NULL,ProcessID)
4) écrire dans la mémoire WriteProcessMemory (ProcessID, AddresToModify, PATCH, NbByteToWrite ,&NbWrittenByte)

Regardez dans la source, elle est très bien commentée.

4)The End.
----------

Voilà, c'est fini, le trainer a été créer et il marche !

Si le trainer fonctionne correctement, vous devriez avoir ceci qui s'affiche :

Game Hack V1.0 By Krust
-----------------------

Appuyez sur une touche pour continuer...

[+] Game Found ! :)
-->Finding Process ID...
[+] Process Id found : 0x000009CC On Thread ID : 5960
-->Opening Process...
[+] Process successfuly opened!
-->Writting Process...
[+] Game Patched!
-->You should Have Unlimited Live now !

Appuyez sur une touche pour continuer...

Krust, le 25 juin 2004.

Conclusion :


Voilà j'esper que ça vous aura plus,
j'ai compilé tout ça avec VC++ 6 sans problème.
je pense que c'est un tutorial de qualité même si il est assez superficiel sur la 2ème étape (debug).

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
143
Date d'inscription
jeudi 27 mars 2008
Statut
Membre
Dernière intervention
3 septembre 2011

wow c'est génial comme tutoriel sa ressemble au cracking merci et bonne continuation 10/10
Messages postés
1
Date d'inscription
samedi 5 septembre 2009
Statut
Membre
Dernière intervention
5 septembre 2009

je suis membre privé e je peux pas télécharger les fichers comment je fait?
Messages postés
1
Date d'inscription
mardi 6 mars 2007
Statut
Membre
Dernière intervention
20 mars 2007

Ton code est bien mais tu quand tu ouvres un Handle, tu devrais le fermer par la suite sinon ça laisse des fuites de mémoire importantes.

Par exemple, avant d'exécuter WriteProcessMemory je te conseillerais avant d'exécuter SuspendThread, c'est plus sur et après avoir exécuter WriteProcessMemory, tu devrais peut-être y rajouter un FlushInstructionCache pour plus de sûreté.

Termine ensuite avec CloseHandle.
Messages postés
104
Date d'inscription
vendredi 5 novembre 2004
Statut
Membre
Dernière intervention
11 septembre 2008

10/10 Merci à toi.
Messages postés
2
Date d'inscription
mardi 21 novembre 2000
Statut
Membre
Dernière intervention
12 juillet 2005

c'est beaucoup plus rapide avec fscanf !!
Afficher les 20 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.