Accueil > > > CHEAT POUR PINBALL DE WINDOWS
CHEAT POUR PINBALL DE WINDOWS
Information sur la source
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
- 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
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
Historique
- 25 décembre 2005 16:20:17 :
- Mis à jour des offsets.
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Debugage assembleur [ par crocejf2000 ]
Salut,Qq'un pourrai il peut etre m'aider, j'ai une méchante érreur et jmy connais pas trop en assembleur, Borland c++ 5 me renvoi ceci : Il s'arrete a
mettre de l'assembleur en ligne sous Visual C++ [ par alain34270 ]
alainBonjour,Voilà. J'ai un problème avec mon disque dur. je voudrais lire les secteurs physiques de mon disque dur, si possible à partir de visual C+
récupérer code assembleur [ par none77 ]
Bonjour,j'aimerai savoir si lorsque je programme en C il m'est possible de récupérer le code assembleur automatiquement.Je demande ca car je dois util
Macro assembleur pour microcontroleur [ par Tyozhebes ]
Bonjour à tous ! Je suis actuellement sur la programmation d'un 68HC11 et, pour des raisons de mémoire (seulement 2ko), il me faut le programmer en
[Asm][Devc++] [ par Gonath ]
Bon voilà, je programme sur devc++ depuis peu. Je voudrais y insérer des codes en assembleur vu que je connais l'assembleur. Mais le prob, c qu'il n'a
interruprion assembleur [ par seito ]
SVP est ce que quelqu'un sait comment éxecuter les interuptions assembleurs dans Visual Cmerci
Pb avec l'assembleur dev-cpp [ par 6co ]
Voici une source vue sur cppfrance et corrigée pour l'assembleur de Dev-Cpp#include <iostream>#include <stdlib.h>#include <conio.c>#
ecriture dans un fichier en assembleur [ par ptitchep ]
bonjourje voudrais écrire dans un fichier texte en assembleur. j'ai réussi à l'ouvrir à le lire mais quand je veux y écrire des données, l'interruptio
assembleur dans du code c [ par guillaume80 ]
bjour a tous,dans un code c récupéré, j'ai pris le code pr le compiler sauf qu'il y a eu des soucis, il m'en reste un, c'est le suivant :char *ecran =
Intégrer de l'assembleur dans du C. [ par alekine ]
Bonjour,voilà déjà quelques minute que je cherche du code et un tutorial sur l'intégration d'asm dans du code C. Que ce soit sur le site ou google, je
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
MATRICE TEMPLATEMATRICE TEMPLATE par hjr2610
Cliquez pour lire la suite par hjr2610 RE : SAC A DOS RE : SAC A DOS par hadjkaddour
Cliquez pour lire la suite par hadjkaddour
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|