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

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

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.