Exécution de code arbitraire

De Poképédia
(Redirigé depuis Bug du 7ème Étage)
Aller à la navigation Aller à la recherche

L'exécution de code arbitraire, plus couramment désignée sous son acronyme anglais ACE (Arbitrary Code Execution), fait référence, en informatique, à l'exécution de code de manière libre dans un programme par un utilisateur.

Dans la très grande majorité des cas, ce terme désigne un utilisateur exploitant une faille dans un logiciel afin de s'affranchir des limitations imposées par les développeurs d'origine, de façon à pouvoir écrire et exécuter son propre code au sein dudit programme.

Dans les jeux vidéo Pokémon, l'ACE désigne à la fois cette pratique et le(s) bug(s) permettant de la mettre en place ; elle est réalisable sur les jeux de la première à la troisième génération, et possiblement dans les jeux de quatrième génération.

Première génération[modifier]

Dans Pokémon Rouge, Bleu et Jaune, l'ACE est majoritairement utilisé pour modifier les valeurs associées aux différentes adresses mémoires du jeu (par exemple le nom du joueur, sa quantité d'argent, l'espèce du troisième Pokémon de son équipe, etc) sans utiliser de matériel externe de triche ou d'édition de code.

La mise en place de l'ACE s'effectue en quatre grandes étapes :

  • le choix de la méthode d'exécution ;
  • la préparation de l'environnement où le code va être exécuté ;
  • l'écriture du code au sein du programme ;
  • l'exécution dudit code.
Choix de la méthode[modifier]

Plusieurs méthodes permettent d'exécuter du code dans Pokémon Rouge, Bleu et Jaune. Néanmoins, la plus connue et utilisée (notamment en raison de sa praticité) est le Glitch Item ACE. Il consiste en l'utilisation d'un objet bug permettant d'exécuter du code. Là encore, cette propriété s'applique à plusieurs objets bug, et en fonction de celui que le joueur choisit, la marche à suivre pour effectuer correctement l'ACE va varier.

Deux méthodes sont décrites sur cette page, la première fonctionnant sur les versions Rouge et Bleue, et l'autre fonctionnant sur la version Jaune, en sachant qu'elles ne suivent pas le même procédé et ne fonctionnent pas avec le même objet bug.

Dans Pokémon Rouge et Bleu[modifier]

La méthode la plus connue sur ces versions, dite 8F Code Execution ou Bug du 7e étage, exploite l'objet bug d'identifiant hexadécimal $5D, nommé "7EME ETAGE".

Celui-ci permet d'exécuter du code depuis l'adresse mémoire $D168, qui est notamment liée au nombre de Pokémon dans l'équipe du joueur.

On se sert alors de l'objet bug en préparant une certaine équipe précise afin que le code soit exécuté depuis l'inventaire du joueur, plutôt que depuis l'équipe Pokémon.

À partir de là, le joueur doit préparer exactement et dans le bon ordre l'équipe suivante :

Une fois l'équipe prête, le setup est prêt et lorsque le joueur utilise l'objet bug, le jeu cherche à exécuter du code depuis l'inventaire.

Dans Pokémon Jaune[modifier]

La méthode la plus utilisée sur cette version exploite l'objet bug d'identifiant hexadécimal $63, appelé "ws*l'||lm||".

Le fonctionnement du setup est globalement similaire à celui des versions Rouge et Bleue, néanmoins les Pokémon utilisés ne sont pas les mêmes. Pour préparer le setup, la boîte 1 du PC de Léo doit être active et contenir les Pokémon suivants :

Une fois l'équipe prête, le setup est prêt et lorsque le joueur utilise l'objet bug, le jeu cherche a exécuter du code depuis l'inventaire.

Préparation de l'inventaire et exécution[modifier]

Une fois l'équipe préparée correctement, lorsque le joueur utilise l'objet 7EME ETAGE (cela s'applique à tous les objets bug exécutant du code, à partir du moment où le setup est correctement préparé), le jeu cherche à exécuter du code à partir de l'inventaire. Celui-ci doit alors être préparé de la manière suivante (les quantités au-dessus de 100 peuvent être obtenues en rencontrant MissingNo.) :

Les quantités de Limonade, de Précision + et de Carbone varieront en fonction de l'effet le joueur cherche à produire.

Pour savoir quelles valeurs utiliser, il faut savoir que :

  • Le nombre de Limonade représente la valeur à inscrire dans la mémoire ;
  • Le nombre de Carbone correspond aux deux premiers chiffres de l'adresse mémoire à modifier ;
  • Le nombre de Précision + correspond aux deux derniers chiffres de l'adresse mémoire à modifier.

Le joueur doit cependant convertir toutes les valeurs hexadécimales contenues dans le code en décimal.

Par exemple, exécuter le code 0134DDCF avec l'ACE nécessite l'inventaire suivant :

  • Un objet au choix ;
  • 7EME ETAGE (ou un autre objet bug, selon la méthode suivie) ;
  • Limonade x52 (34 converti depuis l'hexadécimal)
  • Précision + x207 (les deux derniers chiffres de l'adresse mémoire, CF, converti en décimal)
  • Carbone x221 (les deux premiers chiffres de l'adresse mémoire, DD, converti en décimal)
  • Poké Ball x119
  • Eau Fraîche x201

En suivant l'exemple ci-dessus, utiliser l'objet bug inscrit la valeur 52 à l'adresse mémoire $CFDD.

Changer les valeurs en convertissant correctement les données du code permet alors d'exécuter n'importe quel code et d'inscrire n'importe quelle valeur dans la mémoire du jeu.

Notes[modifier]
  • Pour obtenir certains objets précis (7EME ETAGE par exemple), il est nécessaire d'exploiter d'autres bugs tels que l'Item Underflow Glitch.
  • Pour obtenir les Pokémon nécessaires à la préparation du setup, il est recommandé d'utiliser le Ditto Glitch.

Deuxième génération[modifier]

Dans Pokémon Or, Argent et Cristal, les développeurs ont rempli tous les emplacements vides de l'index des objets par un placeholder : un objet inutile destiné uniquement à combler ces espaces vides. Cet objet est appelé Teru-sama, et outre le fait qu'il se revende assez cher, il ne sert à rien. Le Glitch Item ACE est donc impossible à effectuer sur ces jeux.

Néanmoins, l'exécution de code arbitraire y existe quand même, et s'effectue par d'autres moyens. Là encore, plusieurs méthodes existent, mais la plus utilisée est dénommée TM Code Execution : elle permet d'exécuter du code à partir d'une CT placée dans la mauvaise poche du Sac. En effet, lorsqu'une CT n'est pas utilisée depuis la poche CT/CS, celle-ci ne va pas fonctionner correctement, mais elle va à la place exécuter du code à partir d'une certaine adresse mémoire, qui change en fonction de la CT et de la version (en somme, le fonctionnement de l'ACE en lui-même est identique à la première génération). À partir de cette propriété, différents tests ont été effectués et deux CT ont été désignées pour servir à l'ACE : la CT17 pour Pokémon Or et Argent, et la CT15 pour Pokémon Cristal.

Une fois la CT obtenue dans la mauvaise poche, le fonctionnement est le même que dans la première génération :

  • Le joueur doit préparer un setup précis dans son équipe pour que l'environnement soit apte à l'exécution de code ;
  • Il doit aussi préparer un inventaire précis correspondant à l'effet qu'il souhaite déclencher ;
  • Enfin, il doit utiliser la CT depuis la mauvaise poche pour exécuter le code.

Troisième génération[modifier]

Sur les jeux de troisième génération, et bien qu'ils soient sortis en 2003, la méthode permettant la mise en place de l'ACE n'a été découverte que tardivement, et est toujours étudiée en 2022.

Il ne fonctionne pour le moment que sur Pokémon Émeraude et Pokémon Rouge Feu et Vert Feuille, et exploite une variante du Bug de la Baie Grena.

Néanmoins, il reste expérimental, évolue constamment et est encore assez compliqué à mettre en place pour le moment[1].

Notes[modifier]

  • La mise en place de l'ACE peut demander beaucoup de temps et d'investissement : il est recommandé de suivre les étapes en plusieurs fois, y compris pour éviter de sauter des étapes.
  • Par précaution, il est recommandé de sauvegarder avant et après chaque manipulation "sensible".
  • Si le setup n'est pas préparé correctement, l'utilisation de l'objet bug peut faire planter le jeu (cela n'est pas dangereux outre mesure).
  • Il est recommandé de vérifier minutieusement l'inventaire avant chaque exécution de code : si une des valeurs n'est pas renseignée correctement, cela peut modifier une autre adresse mémoire que celle escomptée ou écrire une valeur différente de celle souhaitée, et causer des effets plus ou moins dangereux ou inattendus sur la partie.

Références[modifier]

  1. https://www.prama-initiative.com/index.php?page=ace-3G L'Arbitrary Code Execution en troisième génération, sur PRAMA Initiative