Cheat pour pinball de windows

Soyez le premier à donner votre avis sur cette source.

Vue 48 554 fois - Téléchargée 932 fois

Description

Voici mon deuxième tutorial, qui est un exemple plus concret de la création d'un cheat, la partie Debug y est beaucoup plus apronfondie ;).

Source / Exemple :


Creation du trainer pour PinBall (flipper de windows)
=====================================================

Dans cet exemple je vais montrer comment créer un gamehack à partir
d'un programme inconnu ( car dans mon précédent essai j'ai pris un jeu dont je connaissais le code)

Outils & compétence nécessaires:

1) TSearch (http://fly.to/mtc)
2) Un Désasembleur (Olydbg ou WinDasm)
2) Une connaissance en Assembleur (peut être très basique)

1)T-Search
----------

A. Lancer T-Search (ça devrait aller pour le moment)

B. Lancer PinBall.

C. Jouer un petit peu afin d'obtnir un score (peu importe du moment qu'il dépasse les 10 000) et on met pause (F3)

D. Selectionner le processus dans T-Search (Pinball bien sur)

E. Click sur la loupe dans le mémory searcher

F. Cherché pour les values qui sont égales à votre score, comme les score dépassent les millions
on cherche dans une valeur codée sur 4 bits (ulong,uint,...)

G. Tsearch va retourné 2 address's, AF2CCC et C6AEBA (ces address sont sans doute différentes 
chez vous car elles sont alloué dynamiquement (DMA = Dynamic Memory Allocation)
Vous avez donc 2 valeurs, mhhh la quelle est la bonne ?
On va donc continuer à jouer juste le temps de changer le score et on va remettre pause.
Là on va clické sur la loupe avec le _ à droite afin de rafiné notre selection.
On va donc cherché des valeurs qui sont égale à notre nouveau score.
Ha zut, les 2 address sont encore là,...
On peut refaire l'opération plusieurs fois vous obtienderais toujours ces 2 même address.
On va donc les selectionnées toutes les deux ( le + en vert) et les mettre dans la cheat list.
On modifie la Value de notre première address et on retourne dans le jeu et.... Non le score à pas changé :(
On modifie la seconde address et on retourne au jeu, à première vue ça ne change pas non plus mais lorsque que l'on gange quelques points surplémentaire Bam on obtien la valeur que l'on a attribué + les points gagnés.
L'affichage du score est donc actualisé à chaque fois que l'on gagne des points suplémentaires.
On connait donc notre address contenant notre score, voilà on se met 100 000 000 de points et on est premier :D.
(pour info la première address contient la screenValue c-a-d la valeur à afficher.)

H. certains seront satisfait, ils ont leur meilleur score, mais c'est pas fini !
En effet, à  cause de la DMA (Dynamic Memory Allocation) les address vont changée à chaque chargement du process :(.
Certains vont me dire, bah c'est fichu les trainers pour ce jeu...
Hé bien non !, car en effet il y a un moyen de contourner la DMA, c'est le code qui lui est static (car aussi non les jumps ne pointerais pas vers les bonnes address et ce serait la ***)

I. Voilà le grand avantage de T-Search, c'est son AutoHAck Tool !
Mettez le jeu en pause et ouvrez l'autohack windows (par le menu Auto-HAck)
Ensuite activé l'auto hack (par le même menu)
Faites un click droit sur la variable contenant notre score et clickez sur AutoHack (tout en bas)
Maintenant continuez à jouer et augmenter votre score,...
Poum, un ligne apparait dans la fenêtre de AutoHack : 
102038B: add[eax],esi  (ajouter à notre score (qui est pointé par eax) le contenu de esi)

Nous avons là notre code et son address qui va mettre à jour notre score !!

J. Ouvrez votre Debuger, et Dasm Pinball.
Aller à la ligne 102038B.
vous trouverez :
:0102038B 0130                          add dword ptr [eax], esi //Ajout du score
:0102038D 8B10                          mov edx, dword ptr [eax] //Mettre le contenue du score dans EDX.
:0102038F 81FA00CA9A3B                  cmp edx, 3B9ACA00 // LE comparer à 100 000 000
:01020395 0F8E4D5BFFFF                  jle 01015EE8 // SI >= alors sauter vers 01015EE8

Voilà le code n'est pas très dure à comprendre, les deux dernières lignes ne nous intéresse pas.

K. Le Patch
Nous savons maintenant que eax pointe vers notre variable (qui même si elle change de place, sera toujorus pointé par eax)
Il y a plusieurs game Patch possible mais contrairement à mon autre code, il ne suffit pas de NOPer tout ça car aussi non nous n'aurons jamais de points :p

Voici mon Patch :
Add esi,0007A120 //On ajoute 500 000 à Esi
add dword ptr [eax], esi //Ajout du score

Mon patch est très simple, on rajoute 500 000 à chaque fois que l'on gagne des points,...
Mais un grave problème arrive,... Où allons nous caser notre instruction Suplémentaire ?
Car en effet, il n'y a pas de place :(
Nous allons devoir alors 'Dévier notre code' avec un jump vers la fin du fichier qui contient plein de 00 (espace libre)
Nous avons de la chance, il y en a plein :)
Prenons donc une address au hazard : 01020385.
Nous allons donc remplacer :

:0102038B 0130                          add dword ptr [eax], esi //Ajout du score

par:

:01015ED5 E9ABA40000                    jmp 01020385 // Saut vers nos 0.

Là encore nous avons quelques problèmes, car notre Jmp est codé sur 5Bytes alors que notre Add est sur 2Bytes.
Nous allons donc devoir Ecraser les données qui suivent: 
:0102038D 8B10                          mov edx, dword ptr [eax] //Mettre le contenue du score dans EDX.
:0102038F 81FA00CA9A3B                  cmp edx, 3B9ACA00 // LE comparer à 100 000 000
:01020395 0F8E4D5BFFFF                  jle 01015EE8 // SI >= alors sauter vers 01015EE8

on met donc notre jmp puis on remplit de NOP les espaces restant (le mov et le add = 4Bytes puis on prend 1Byte de cmp mais alors il est modifier donc on met encore 5 Nop pour l'effacer entièrement)

Dans mon patch, j'avoue je n'ai pas été très ne finesse et j'ai aussi virer le jle,...
Le Patch donne donc:
:01015ED1 90                            nop
:01015ED2 90                            nop
:01015ED3 90                            nop
:01015ED4 90                            nop
:01015ED5 E9ABA40000                    jmp 01020385
:01015EDA 90                            nop
:01015EDB 90                            nop
:01015EDC 90                            nop

Maintenant que la déviation est terminée, il va faloir patch les Zeros apr le code désiré:

:01020385 81C620A10700                  add esi, 0007A120 //On ajoute les 500 000 points
:0102038B 0130                          add dword ptr [eax], esi //On les ajoutes au score
:0102038D 8B10                          mov edx, dword ptr [eax] // On met le score dans edx
:0102038F 81FA00CA9A3B                  cmp edx, 3B9ACA00 // On le compare à 100 000000
:01020395 0F8E4D5BFFFF                  jle 01015EE8 // On saute à 01015EE8 si >=
:0102039B E93D5BFFFF                    jmp 01015EDD // aussi non on retourne à l'opération suivant notre premier Patch.

nous avons donc fait ça :

     code.code.code.code.code.code
     code.code.code.code.code.code
     code.code.code.code.code.code
     code.code.code.code.code.code
     code.code.code.code.code.code
     code.code.code.code.code.code
     PATCH.PATCH.PATCH.PATCH.PATCH >-|
 |-> code.code.code.code.code.code   |
 |   code.code.code.code.code.code   |
 |   code.code.code.code.code.code   |
 |   00000000000000000000000000000   |
 |   00000000000000000000000000000   |
 |   PATCH.PATCH.PATCH.PATCH.PATCH <-|
 |-< PATCH.00000000000000000000000
     00000000000000000000000000000

Il est conseillé de tester ça avec le debuger avant de créer un trainer car on sait jamais qu'il y ai une erreur ;)

Maintenant notre Patch mis au point, il ne suffit plus qu'a le coder, prenons exemple sur mon Tutorial précédent (http://www.cppfrance.com/code.aspx?ID=24006)

Voir la source et l'exe pour un teste ;)

Voilà c'est fini, j'ai p-e été un peu rapide mais l'essentiel est là ;).

Krust

Conclusion :


Voilà donc la suite de mon tutorial, qui est un exemple concret de la création d'un cheat.

UPDATE :
Windows a mis à jour son Pinball (qui l'eu cru).
Rien de nouveau appart un légé décallage du code qui rendait l'ancien patch obsolète.

Voici les nouveaux patchs (Ce ne sont que les addrs qui ont changées)

BYTE PATCH1[] = "\x90\x90\x90\x90" //Nop Nop Nop
"\xE9\xAA\xAD\x00\x00" //Jmp 0102232F
"\x90\x90\x90"; //Nop Nop Nop

BYTE PATCH2[] = "\x81\xC6\x20\xA1\x07\x00" //add esi, 0007A120
"\x01\x30" //add dword ptr [eax], esi
"\x8B\x10" //mov edx, dword ptr [eax]
"\x81\xFA\x00\xCA\x9A\x3B" //cmp edx, 3B9ACA00
"\x0F\x8E\x4E\x52\xFF\xFF" //jle 01015EE8
"\xE9\x3E\x52\xFF\xFF"; //jmp 01015EDD

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
1
Date d'inscription
samedi 24 mars 2007
Statut
Membre
Dernière intervention
15 septembre 2009

Bonjour, j'ai essayer mais je n'y arrive pas. J'ai W32dasm et je ne sais pas comment modifier le code. Est-ce quelqu'un pourrais m'aider?
Merci
Messages postés
1
Date d'inscription
samedi 11 juillet 2009
Statut
Membre
Dernière intervention
11 juillet 2009

Bonjour, vraiment interessant, merci.
En parlant de Cheat Engine j'ai un problème,car sur un MMORG j'arrive a faire mon hack mais au bout d'une minute environ cela me déconnecte du jeu.Pouvez vous m'aidez svp =D
Messages postés
2
Date d'inscription
dimanche 9 avril 2006
Statut
Membre
Dernière intervention
3 juin 2008

Ou Cheat Engine, anglais, très puissant, et qui permet de fabriquer ses propres Cheats directement au lieu de se tapper du C++ :-) !

Merci en tout cas, très intéressant;
Messages postés
755
Date d'inscription
samedi 15 mai 2004
Statut
Membre
Dernière intervention
30 janvier 2011

merci
Messages postés
140
Date d'inscription
mercredi 3 juillet 2002
Statut
Membre
Dernière intervention
19 novembre 2006

Pour Tsearch :
http://www.krust-lab.be/Tsearch.rar

Ceci dit je te conseil GameHack qui est beaucoup beaucoup plus puissant mais demande un peu plus de skill :)

http://www.krust-lab.be/MemHack.rar

Voilà,

A plus.
Afficher les 27 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.