Capturer les données d'un jeu avec Gameshock
Tutorial : capturer les données d'un jeu avec Gameshock
Quelle est la différence entre un bon et un mauvais chasseur ? Hum... C'est connu ça, bien que fait par les Inconnus ! Mais je vais quand même vous apprendre à chasser les donner d'un jeu. Il vous faudra vous munir de plusieurs atouts : de la patience, de l'agilité, de l'adresse. Et accessoirement un éditeur de RAM comme le logiciel Gameshock !
Qu'est-ce que la RAM ?
Quand un jeu est lancé, certaines données sont lues directement depuis la ROM (Read Only Memory) : les données ne pouvant pas être modifiées. En gros, c'est tout ce qui touche aux données du jeu, comme la manière dont les dégâts sont calculés, la musique ou savoir si un décor bloque le personnage. Ce qui nous intéresse se toruve plutôt dans la RAM (Random Access Memory). La RAM est un endroit temporaire où sont stockées les données provisoires du jeu. Par exemple, quand un monstre apparaît devant vous, le jeu stocke dans la RAM sa position, ses points de vie et de magie... Bref tout ce qui est suceptible de changer. Notez que cela est aussi stocké dans la ROM (logique, il faut bien qu'il sorte les infos de quelque part), mais il est très difficile de fouiller la ROM pour extraire des données ! Donc nous nous intéresserons uniquement à la RAM.
A quoi ressemble la RAM ?
La RAM, c'est un gros fouilli à première vue. Des hautes herbes dans lesquelles les données sont bien cachées. En voici un exemple :
Le premier coup d'oeil peut faire un peu peur, c'est normal ! La première colonne (004009A0) représente l'adresse en mémoire, une sortie d'index pour que le jeu puisse retrouver ses données. Les quatre colonnes suivantes sont les données. Elles sont stockées par deux nombre hexadécimaux (des nombres allant de 0 à 16, les chiffres supérieurs à 9 étant notés de A à F). Enfin, la dernière colonne montre le rendu en terme de caractères lisibles. Ca n'a pas souvent d'utilité pour les jeux, mais on ne sait jamais.
En bas sont indiqués la correspondance en décimal. Attention, cette partie est très importante pour comprendre comment sont stockées les données.
Les données ne sont pas stockées au hasard, le jeu utilise des adresses pour s'y retrouver. Dans l'exemple ci-dessus, on pourrait imaginer par exemple que le cadre rouge les là où sont stockés les PV du monstre, le cadre orange son niveau, le jaune ses points de magie etc. Ce que j'essaie de montrer, c'est que les adresse peuvent marcher par paquet si le nombre est grand.
FF = 255
FFFF = 65535
FFFFFF = 16777215
Ca monte assez vite ! Si vous recherchez le niveau du monstre, il faut supposer que celui-ci sera composé d'un seul groupe de variables vu qu'il ne dépasse que rarement 255. Donc le niveau sera stocké sur un octet. Les points de vie pourraient monter bien au delà, mettont jusqu'à FFFFFF. Donc trois octets. Le nombre en bas de la fenêtre en face du "1" vous indiquent justement à quoi correspond l'emplacement mémoire sélectionné. Les nombres en face du 2, 3 etc. correspondent à la valeur de l'emplacement mémoire et de ceux situés à droite de l'emplacement sélectionné, donc quand les adresses fonctionnent par paquet pour obtenir des nombres plus grands.
Un exemple concret
Prenons par exemple le jeu Rudora no Hihou, lançons le premier combat puis faisons un "Save State" (une sauvegarde rapide, pour pouvoir revenir au début du combat). Le but est de connaître les points de vie des monstres. Pour cet exemple, j'utilise Zsnes.
Dans gameshock, faites donc "Find", puis sélectionnez "Zsnes" dans les processus en cours. Le champ d'à côté, "Type", détermine la taille de la variable, de la plus petite à la plus grande.
Byte : 1 à 255
Word : 1 à 65535
3Bytes : 1 à 16777215 etc.
A mon avis, les points de vie des monstres dans Rudora doivent être compris entre 1 et 65535 donc c'est "Word" qui correspond au type de variable. Dans "Search for", sélectionnez "Unknown value" pour dire que vous cherchez une variable dont vous ne connaissez pas la valeur. Enfin, cliquez sur "Initialize". Là commence la phase de recherche. Gameshock va mémoriser toutes les variables de type "Word" du jeu. Le but sera de réussir à isoler cette variable. Pour cela, tappez une fois sur le monstre.
NOTE : dans les jeux SNES, il me semble que les variables sont toujours positives. Dans la fenêtre de recherche, allez dans "Advance Config" et décochez "Signed Integer".
Là, je sais que je lui ai fait 20 de dégâts, donc sélectionnez "Decreased by" puis entrez "20" dans le champ Value. La liste des variables en dessous se mettra à jour et supprimera toutes les lignes dont la valeur de la mémoire n'a pas été baissée de 20. On voit qu'il reste beaucoup de variables disponibles encore, mais une revient notre attention.
La première ligne donne une valeur qui pourrait bien être le nombre de points de vie de notre ennemi. Pour savoir si nous avons réussi, donnons un autre coup au monstre. Celui-ci meurt, et on voit que la variable est passée à "0". C'est donc sûrement ça ! Nous allons donc demander à Gameshock de nous afficher la variable correspondante en permanence. Double-cliquez sur la ligne puis décochez la case "Active" (cette case sert à tricher en fixant la variable à une valeur donnée, idéal pour avoir des points de vie infini par exemple !). Entrez une description et puis validez. Vous avez votre première variable d'affichée en permanence, dans la colonne "Read" !
NOTE : les points de vie des monstres sont variables dans Rudora no Hihou, il se peut donc que vous n'ayez pas les mêmes nombres que moi.
NOTE 2 : si vous n'avez pas réussi à trouver la variable (ce qui arrive dans 99% des cas), vous pouvez taper une autre fois sur le monstre et indiquer à Gameshock que les points de vie de l'ennemi ont encore baissé, ou bien faire un chargement rapide pour revenir au début du combat et indiquer à Gameshock que les points de vie du monstre auront augmenté, dans mon cas de 20. Réitérez ces opérations jusqu'à ce que vous trouviez la précieuse variable !
Relançons le combat, mais cette fois avec deux ennemis. Gameshock vous indique bien les points de vie du premier monstre, mais vous n'avez pas ceux du deuxième. Vous pourriez répéter l'opération mais il y a plus simple. Fais "Clic droit" sur la ligne affichée sur Gameshock puis "Browse". Cela vous ammène directement dans la mémoire, à l'endroit des points de vie du monstre.
Normalement, les données sont classées logiquement, vous devriez donc trouver les points de vie du deuxième ennemi pas trop loin de ceux du premier. Or, en fouillant assez près, vous trouverez facilement qu'il y a un autre "32" un peu plus loin dans la mémoire. Faites Clic droit puis "New" dessus. Remplissez les informations comme précédemment et vous devriez avoir une deuxième ligne qui s'affiche sur la fenêtre principale de Gameshock.
En frappant chacun des monstre une fois, vous pouvez à présent voir leurs points de vie varier !
NOTE : il se peut que vous ne voyez pas les points de vie varier pour l'un des deux monstres. Dans Rudora, il peut y avoir 3 ou 4 ennemis à la fois, donc il se peut que cette fois-ci, la variable soit à un autre emplacement, assez proche comme vu précédemment. C'est un petit jeu de recherche mais ça vient assez rapidement et ça permet de trouver les stats des ennemis de manière assez simple !
Voilà, j'espère que ça pourra vous aider à monter des dossiers de jeux. Si vous avez des suggestion, des critiques ou remarques, n'hésitez pas afin que j'étoffe cet article !
Quelle est la différence entre un bon et un mauvais chasseur ? Hum... C'est connu ça, bien que fait par les Inconnus ! Mais je vais quand même vous apprendre à chasser les donner d'un jeu. Il vous faudra vous munir de plusieurs atouts : de la patience, de l'agilité, de l'adresse. Et accessoirement un éditeur de RAM comme le logiciel Gameshock !
Qu'est-ce que la RAM ?
Quand un jeu est lancé, certaines données sont lues directement depuis la ROM (Read Only Memory) : les données ne pouvant pas être modifiées. En gros, c'est tout ce qui touche aux données du jeu, comme la manière dont les dégâts sont calculés, la musique ou savoir si un décor bloque le personnage. Ce qui nous intéresse se toruve plutôt dans la RAM (Random Access Memory). La RAM est un endroit temporaire où sont stockées les données provisoires du jeu. Par exemple, quand un monstre apparaît devant vous, le jeu stocke dans la RAM sa position, ses points de vie et de magie... Bref tout ce qui est suceptible de changer. Notez que cela est aussi stocké dans la ROM (logique, il faut bien qu'il sorte les infos de quelque part), mais il est très difficile de fouiller la ROM pour extraire des données ! Donc nous nous intéresserons uniquement à la RAM.
A quoi ressemble la RAM ?
La RAM, c'est un gros fouilli à première vue. Des hautes herbes dans lesquelles les données sont bien cachées. En voici un exemple :
Le premier coup d'oeil peut faire un peu peur, c'est normal ! La première colonne (004009A0) représente l'adresse en mémoire, une sortie d'index pour que le jeu puisse retrouver ses données. Les quatre colonnes suivantes sont les données. Elles sont stockées par deux nombre hexadécimaux (des nombres allant de 0 à 16, les chiffres supérieurs à 9 étant notés de A à F). Enfin, la dernière colonne montre le rendu en terme de caractères lisibles. Ca n'a pas souvent d'utilité pour les jeux, mais on ne sait jamais.
En bas sont indiqués la correspondance en décimal. Attention, cette partie est très importante pour comprendre comment sont stockées les données.
Les données ne sont pas stockées au hasard, le jeu utilise des adresses pour s'y retrouver. Dans l'exemple ci-dessus, on pourrait imaginer par exemple que le cadre rouge les là où sont stockés les PV du monstre, le cadre orange son niveau, le jaune ses points de magie etc. Ce que j'essaie de montrer, c'est que les adresse peuvent marcher par paquet si le nombre est grand.
FF = 255
FFFF = 65535
FFFFFF = 16777215
Ca monte assez vite ! Si vous recherchez le niveau du monstre, il faut supposer que celui-ci sera composé d'un seul groupe de variables vu qu'il ne dépasse que rarement 255. Donc le niveau sera stocké sur un octet. Les points de vie pourraient monter bien au delà, mettont jusqu'à FFFFFF. Donc trois octets. Le nombre en bas de la fenêtre en face du "1" vous indiquent justement à quoi correspond l'emplacement mémoire sélectionné. Les nombres en face du 2, 3 etc. correspondent à la valeur de l'emplacement mémoire et de ceux situés à droite de l'emplacement sélectionné, donc quand les adresses fonctionnent par paquet pour obtenir des nombres plus grands.
Un exemple concret
Prenons par exemple le jeu Rudora no Hihou, lançons le premier combat puis faisons un "Save State" (une sauvegarde rapide, pour pouvoir revenir au début du combat). Le but est de connaître les points de vie des monstres. Pour cet exemple, j'utilise Zsnes.
Dans gameshock, faites donc "Find", puis sélectionnez "Zsnes" dans les processus en cours. Le champ d'à côté, "Type", détermine la taille de la variable, de la plus petite à la plus grande.
Byte : 1 à 255
Word : 1 à 65535
3Bytes : 1 à 16777215 etc.
A mon avis, les points de vie des monstres dans Rudora doivent être compris entre 1 et 65535 donc c'est "Word" qui correspond au type de variable. Dans "Search for", sélectionnez "Unknown value" pour dire que vous cherchez une variable dont vous ne connaissez pas la valeur. Enfin, cliquez sur "Initialize". Là commence la phase de recherche. Gameshock va mémoriser toutes les variables de type "Word" du jeu. Le but sera de réussir à isoler cette variable. Pour cela, tappez une fois sur le monstre.
NOTE : dans les jeux SNES, il me semble que les variables sont toujours positives. Dans la fenêtre de recherche, allez dans "Advance Config" et décochez "Signed Integer".
Là, je sais que je lui ai fait 20 de dégâts, donc sélectionnez "Decreased by" puis entrez "20" dans le champ Value. La liste des variables en dessous se mettra à jour et supprimera toutes les lignes dont la valeur de la mémoire n'a pas été baissée de 20. On voit qu'il reste beaucoup de variables disponibles encore, mais une revient notre attention.
La première ligne donne une valeur qui pourrait bien être le nombre de points de vie de notre ennemi. Pour savoir si nous avons réussi, donnons un autre coup au monstre. Celui-ci meurt, et on voit que la variable est passée à "0". C'est donc sûrement ça ! Nous allons donc demander à Gameshock de nous afficher la variable correspondante en permanence. Double-cliquez sur la ligne puis décochez la case "Active" (cette case sert à tricher en fixant la variable à une valeur donnée, idéal pour avoir des points de vie infini par exemple !). Entrez une description et puis validez. Vous avez votre première variable d'affichée en permanence, dans la colonne "Read" !
NOTE : les points de vie des monstres sont variables dans Rudora no Hihou, il se peut donc que vous n'ayez pas les mêmes nombres que moi.
NOTE 2 : si vous n'avez pas réussi à trouver la variable (ce qui arrive dans 99% des cas), vous pouvez taper une autre fois sur le monstre et indiquer à Gameshock que les points de vie de l'ennemi ont encore baissé, ou bien faire un chargement rapide pour revenir au début du combat et indiquer à Gameshock que les points de vie du monstre auront augmenté, dans mon cas de 20. Réitérez ces opérations jusqu'à ce que vous trouviez la précieuse variable !
Relançons le combat, mais cette fois avec deux ennemis. Gameshock vous indique bien les points de vie du premier monstre, mais vous n'avez pas ceux du deuxième. Vous pourriez répéter l'opération mais il y a plus simple. Fais "Clic droit" sur la ligne affichée sur Gameshock puis "Browse". Cela vous ammène directement dans la mémoire, à l'endroit des points de vie du monstre.
Normalement, les données sont classées logiquement, vous devriez donc trouver les points de vie du deuxième ennemi pas trop loin de ceux du premier. Or, en fouillant assez près, vous trouverez facilement qu'il y a un autre "32" un peu plus loin dans la mémoire. Faites Clic droit puis "New" dessus. Remplissez les informations comme précédemment et vous devriez avoir une deuxième ligne qui s'affiche sur la fenêtre principale de Gameshock.
En frappant chacun des monstre une fois, vous pouvez à présent voir leurs points de vie varier !
NOTE : il se peut que vous ne voyez pas les points de vie varier pour l'un des deux monstres. Dans Rudora, il peut y avoir 3 ou 4 ennemis à la fois, donc il se peut que cette fois-ci, la variable soit à un autre emplacement, assez proche comme vu précédemment. C'est un petit jeu de recherche mais ça vient assez rapidement et ça permet de trouver les stats des ennemis de manière assez simple !
Voilà, j'espère que ça pourra vous aider à monter des dossiers de jeux. Si vous avez des suggestion, des critiques ou remarques, n'hésitez pas afin que j'étoffe cet article !
- 115 lectures

J'avais pensé essayer de droper les formules de calcul du jeu ( taux de déplacement en fonction du terrain, formule pour toucher, formule de dégats, etc ) mais ça m'as l'air un poil chaud à extraire dans ce cas... sauf si quelqu'un connait un autre moyen de savoir comment on peut trouver ça, va falloir s'y coller, si c'est possible par cette méthode ( genre choper les variable qui stock les pourcentage de chance de toucher avec tel arme et tel capacité de tir et tel niveau de Tir sur le bras équipé ... ).
Cela parait réaliste ou trop complexe avec ce procédé ?
Je vais essayer ça avec SD3
Edit
Est-ce que c'est un logiciel payant?
Quelqu'un a t'il un site à me donner en mp?
Edit:S'il vous plait j'en ai besoin pour le dossier de Bahamut Lagoon. 0)
Surtout que même moi j'ai compris alors ça veut dire que c'était vachement bien expliqué
Pour répondre aux questions :
MasterMana : il est possible que ces données soient bien stockées dans la RAM, mais je ne garanti pas que ce soit facile à extraire. Il faudra compter sur le fait que toutes les données d'un même personnage soient stockées dans la même zone de mémoire, et faire un max de tests.
Lifeless : hélas oui, c'est un logiciel payant, mais offrant 30 jours d'essai. Si quelqu'un trouve l'équivalent gratuit, je veux bien avoir le lien !
Anthony : je t'ai transmis le lien par MP. Bon courage !
20/20 pour ton tuto Senki et bravo.
Ajouter un commentaire