Il y a longtemps, sur la première PlayStation, j’avais acheté un Action Replay qui permettait de modifier la mémoire à chaud pour « tricher » ou changer le comportement d’un jeu.
Il est possible de faire la même chose sous GNU/Linux grâce à scanmem, qu’il faut installer :
sudo apt-get install scanmem
Nous allons le tester sur Gnometris (le Tetris-like intégré à Gnome) pour exploser le record.
Lançons le jeu, et récupérons son pid :
$ gnometris & [1] 30814
Démarrons scanmem avec comme paramètre le pid de Gnometris :
sudo scanmem 30814
(oui, il faut être root pour lire et écrire la mémoire des autres programmes lancés, c’est plutôt rassurant)
On obtient un joli prompt :
0>
Il va falloir tout d’abord trouver où se trouve en mémoire la variable à modifier (celle qui contient le score courant). Pour cela, c’est très simple, vu que le score est affiché à l’écran, il suffit d’indiquer à scanmem sa valeur. Pour l’instant, mon score est de 0, je rentre donc 0 :
0> 0 info: 01/126 searching 0x621000 - 0x623000...........ok info: 02/126 searching 0x1f9d000 - 0x2f4e000...........ok … info: 125/126 searching 0xe83f9000 - 0xe83fa000.ok info: 126/126 searching 0xdab4b000 - 0xdab67000.ok info: we currently have 12352024 matches. 12352024>
Il y a donc 12352024 variables dans la mémoire utilisée par Gnometris qui sont à 0 (pas étonnant).
Je joue un peu, histoire de faire évoluer le score… tac tac tac tac… Voilà, j’ai 100 points (j’ai fait 2 lignes), je tape donc 100 :
12352024> 100 info: we currently have 36 matches. 36>
Il y a 36 variables qui étaient à 0 tout à l’heure et qui sont à 100 maintenant. Je rejoue, je fais 1 ligne, j’ai 140 points, je tape donc 140 :
36> 140 info: we currently have 1 matches. info: match identified, use "set" to modify value. info: enter "help" for other commands.
Voilà, j’ai trouvé la variable qui contient le score, maintenant je peux la modifier :
1> set 12345678 info: setting *0x22e38f0 to 0xbc614e...
Rien ne se passe dans le jeu, c’est normal : pour Gnometris, le score n’a pas pu changer, le label de l’interface graphique contenant le score n’a donc pas été rafraîchi. Il suffit de gagner quelques points pour s’apercevoir que la modification a bien été prise en compte :

Ça fonctionne bien évidemment sur tous les programmes, mais c’est plus intéressant pour les jeux


#1 par Il Palazzo-sama à 20 décembre 2009 - 23 h 05 min
Citation
Je suis fan. XD
Mais je vais éviter de l’utiliser pour ça, en fait. Ne serait-ce que pour garder une chance de battre mes propres records. ^^’
#2 par Edouard à 21 décembre 2009 - 0 h 52 min
Citation
C’est cool ce truc
#3 par Yann à 21 décembre 2009 - 1 h 17 min
Citation
Ce truc est génial, un grand merci! BIen utile pour du debug
#4 par Billou à 21 décembre 2009 - 3 h 02 min
Citation
C’est vrai que c’est assez sympathique, à tester pour le fun !
J’ai testé avec World Of Goo, ça fonctionne du tonnerre, mais pas en ligne (évidemment
), Lbreakout2 a une fonction empêchant la triche, quand on modifie le score, il revient à ce qu’il était initialement, et pour chromium-bsu, ça fonctionne bien, et en faisant peter le score à 1000 millions, ça fait « bugger » le jeu et permet de rester invincible durant la montée du compteur du score (et ça dure plus longtemps qu’un niveau).
Bien pour faire joujou mais faut pas en abuser, ça casse tout sinon
#5 par Kervala à 21 décembre 2009 - 11 h 08 min
Citation
Ah, ça me fait penser à Gamewizard sous DOS
C’était exactement le même principe, ça me rappelle de bons souvenirs :p
Merci pour l’astuce
#6 par Indyana à 21 décembre 2009 - 11 h 15 min
Citation
C’est nul!
Tout logiciel permettant de tricher n’offre aucun intérêt pour les joueurs!..L’intérêt d’un jeu c’est vaincre la difficulté, si il y a moyen et envie de la contourner, pourquoi jouer?…
#7 par ®om à 21 décembre 2009 - 11 h 42 min
Citation
Ce qui est intéressant, ce n’est pas de tricher, c’est de savoir comment faire techniquement (ce qui est un but en soi)…
Ça a un autre intérêt, celui de prendre conscience qu’il est toujours possible d’avoir la main sur un programme exécuté localement, et que la sécurité ne peut pas être apportée en fournissant un binaire à l’utilisateur.
#8 par Logos à 21 décembre 2009 - 12 h 13 min
Citation
Lol, super sympa comme utilisation…
Euhhh, ca marcherait pour changer la variable solde créditeur de mon compte en banque???
Laquelle variable pourra être trouvé au fur et à mesure des dépenses faites?
=====>[/] (parti très très loin)
#9 par djib à 21 décembre 2009 - 14 h 55 min
Citation
Indyana, ce genre d’outil peut être très pratique. Tu peux typiquement modifier la FOV (champ de vision) si tu as la chance de posséder un écran très large pas adapté au format standard des jeux.
®om je me demande par contre comment un programme est capable de travailler dans l’espace mémoire d’un autre sans qu’il n’y ait de protection par l’OS…
#10 par Gligli à 21 décembre 2009 - 15 h 08 min
Citation
C’est pour ça qu’il faut le lancer en root
#11 par wido à 21 décembre 2009 - 15 h 52 min
Citation
Salut, je viens de le compiler (arch)
ça fonctionne du tonnerre,
mais il te manque quelque commande comme la fonction
« list »
pour afficher les variables
ou pour simplifier la recherche du pid:
scanmem –pid `pidof ton programme`
http://taviso.decsystem.org/scanmem.html
et une petite démo sur le jeu « robots »:
http://taviso.decsystem.org/smdemo.html (animation en flash)
@Gligli, sous ma distribution, je n’ai pas besoin de le lancer en root
#12 par djib à 21 décembre 2009 - 17 h 11 min
Citation
Effectivement ®om, tout s’explique
#13 par mikedafunk à 26 décembre 2009 - 21 h 24 min
Citation
Sympa, ça m’a rappellé l’Amiga.
j’y avais un action replay software qui me permettait de tricher dans les jeu, mais aussi de récupérer les banques d’images et les musiques présentes en ram..
ça m’a donné envie de tricher avec les jeux en flash (histoire de rigoler sur facebook)
Vu que ça n’a pas fonctionné, j’ai cherché un autre moyen, je viens de tomber sur le module firefox tamper data, je teste…
A+
#14 par B-boy Silver à 18 janvier 2010 - 16 h 22 min
Citation
coucou tout le monde je vient de découvrir scanmem, et j’ai voulus essayer sur firefox mais au moment de taper la value de mon score il analyse et me dit qu’il y en a 0 quelqu’un aurait-il une solution a ce problème
#15 par Ouranos à 18 avril 2010 - 9 h 22 min
Citation
Ça peut marcher avec des émus ? Sous VisualBoyAdvance, il trouve toujours 2 valeurs, donc je peux pas éditer…