Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

GameCube Tooling: Difference between revisions

No edit summary
 
(6 intermediate revisions by 3 users not shown)
Line 1: Line 1:
[[Gotcha Force | ← Gotcha Force]]
[[Gotcha Force | ← Gotcha Force]]


== Outils ==
== Tools ==
=== [https://fr.dolphin-emu.org/download/ Emulateur Dolphin] ===
=== [https://fr.dolphin-emu.org/download/ Dolphin Emulator] ===
Dolphin permet l'extraction des fichiers de l'iso GameCube. On pourra l'utiliser en mode debug :
Dolphin allows for the extraction of GameCube ISO files. It can be used in debug mode for stepping through PowerPC instructions, setting breakpoints, memory inspection/dumping, and more.
Exécution pas à pas des instructions powerpc, breakpoints, inspection / dumps mémoires etc.
==== [https://github.com/aldelaro5/Dolphin-memory-engine Dolphin Memory Engine] ====
==== [https://github.com/aldelaro5/Dolphin-memory-engine Dolphin Memory Engine] ====
Dolphin Memory Engine se sert des dumps dolphin (en mode débug : ajoutez -d lors de l'exécution de dolphin) afin de mettre des noms sur des adresses mémoires fixes lors de l'exécution. Ceci permettra de partager des travaux de reverse engineering sur la mémoire du jeu.
Dolphin Memory Engine utilizes Dolphin dumps (in debug mode: add -d when running Dolphin) to assign names to fixed memory addresses during execution. This enables sharing reverse engineering work on the game's memory.


Doku sur la génération de symboles : https://github.com/sepalani/MHTrIDA/wiki/Symbols
Documentation on symbol generation: [https://github.com/sepalani/MHTrIDA/wiki/Symbols Symbols]


==== [https://github.com/Felk/dolphin Support python pour dolphin emulator] ====
==== [https://github.com/Felk/dolphin Python Support for Dolphin Emulator] ====
Support python pour le scripting d'IA / CPU. L'api permet entre autre de lire ou écrire en mémoire.
Python support for AI/CPU scripting. The API allows reading and writing to memory, among other capabilities.


=== [https://github.com/Virtual-World-RE/NeoGF/tree/main/gcmtool gcmtool.py] (Virtual World RE) ===
=== [https://github.com/Virtual-World-RE/NeoGF/tree/main/gcmtool gcmtool.py] (Virtual World RE) ===
gcmtool.py permet de manipuler les fichiers gamecube (format iso GCM). On pourra extraire l'ensemble des fichiers du jeu, ainsi que les fichiers relatif au fonctionnement du format GCM. Sa qualité principale, c'est de permettre de patcher la FST et le fichier boot.bin avec un nouveau fichier boot.[[DOL (Format de fichier)|dol]], un nouvel apploader.img, ainsi que des fichiers du jeu ajoutés, supprimés ou modifiés. Il permet d'aligner l'ensemble des offsets des fichiers selon une valeur passée en argument. On choisira un alignement de 4 par défaut. Les fichiers du DVD sont aussi positionnés de manière optimisée pour réduire la taille de l'iso GCM à son minimum.
gcmtool.py allows manipulation of GameCube files (GCM ISO format). It can extract all game files, as well as files related to GCM format operations. Its primary feature is patching the FST and the boot.bin file with a new boot.[[DOL_(File_format)|DOL]] file, a new apploader.img, and added, deleted, or modified game files. It aligns all file offsets according to a specified value, with a default alignment of 4. DVD files are also optimally positioned to minimize the GCM ISO size.


Open source & licence MIT.
Open-source & MIT license.


=== [https://github.com/Virtual-World-RE/NeoGF/tree/main/afstool afstool.py] (Virtual World RE) ===
=== [https://github.com/Virtual-World-RE/NeoGF/tree/main/afstool afstool.py] (Virtual World RE) ===
 
<div class="toccolours mw-collapsible mw-collapsed">
Script Python3 pour unpack/pack/rebuild le format de fichier [[AFS (Format de fichier)|AFS]]. La reconstruction de la Table of content (TOC) et du Filename directory (FD) est possible avec le contrôle de l'ensemble des paramètres possible du format.
Python3 script for unpacking/packing/rebuilding the [[AFS_(File_format)|AFS]] file format. Reconstruction of the Table of Contents (TOC) and Filename Directory (FD) is possible with control over all possible format parameters.
 
<div class="mw-collapsible-content">
==== Manuel Utilisateur ====
==== User Manual ====
'''Unpack source_afs.afs''' dans le nouveau dossier par défaut ''source_afs''. Si optional_dest_folder est précisé, on unpack dans ''optional_dest_folder''. Si l'AFS comporte un FD, on utilisera la date de modification (mtime) de l'OS pour stocker la date du fichier.
'''Unpack source_afs.afs''' into the new default folder ''source_afs''. If optional_dest_folder is specified, unpack into ''optional_dest_folder''. If the AFS has an FD, it will use the OS modification date (mtime) to store the file's date.


  afstool.py --unpack source_afs.afs optional_dest_folder
  afstool.py --unpack source_afs.afs optional_dest_folder


Pack '''source_folder''' dans le nouveau dossier par défaut ''source_folder.afs''. Si optional_dest_file.afs est précisé, on pack dans ''optional_dest_file.afs''. Si l'AFS comporte un FD, on utilisera la date de modification (mtime) de l'OS pour mettre à jour la date du fichier dans l'AFS. La taille maximal de chaque fichier est déterminée par l'offset suivant dans l'[[AFS (Format de fichier)|AFS]] (fichier ou fichier système). Sans FD, il n'y a pas de restriction sur la taille du dernier fichier de l'[[AFS (Format de fichier)|AFS]]. Les noms dans le FD restent inchangés par cette commande.
Pack '''source_folder''' into the new default folder ''source_folder.afs''. If optional_dest_file.afs is specified, pack into ''optional_dest_file.afs''. If the AFS has an FD, it will use the OS modification date (mtime) to update the file's date in the AFS. The maximum size of each file is determined by the next offset in the [[AFS_(File_format)|AFS]] (file or system file). Without an FD, there are no restrictions on the size of the last file in the [[AFS_(File_format)|AFS]]. The names in the FD remain unchanged by this command.


  afstool.py --pack source_folder optional_dest_file.afs
  afstool.py --pack source_folder optional_dest_file.afs


Reconstruit le système de fichier de l'AFS d'un dossier [[AFS (Format de fichier)|AFS]] unpack en utilisant les fichiers afs_rebuild.conf et afs_rebuild.csv. Voir afs_rebuild.conf ci-dessous pour plus d'informations.
Rebuilds the file system of an unpacked [[AFS_(File_format)|AFS]] folder using the afs_rebuild.conf and afs_rebuild.csv files. See below for more information on afs_rebuild.conf.


  afstool.py --rebuild source_folder
  afstool.py --rebuild source_folder


Affiche les stats de l'[[AFS (Format de fichier)|AFS]]ou du dossier unpack de l'[[AFS (Format de fichier)|AFS]]. Donne l'ensemble des informations sur le header, la TOC, le FD, l'ensemble du mapping mémoire trié par offsets (fichiers et fichiers systèmes), les informations sur l'espace d'adressage, les noms de fichiers dupliqués groupés par nom.
Displays statistics of the [[AFS_(File_format)|AFS]] or the unpacked folder of the [[AFS_(File_format)|AFS]]. Provides information about the header, TOC, FD, the entire memory mapping sorted by offsets (files and system files), information about the address space, and grouped duplicate file names.


  afstool.py --stats path
  afstool.py --stats path


==== Arborescence des fichiers extraits ====
==== Extracted Files Structure ====


Le dossier '''root''' contient l'ensemble des fichiers de l'[[AFS (Format de fichier)|AFS]].
The '''root''' folder contains all files from the [[AFS_(File_format)|AFS]].


Le dossier '''sys''' contient l'ensemble des fichiers système de l'[[AFS (Format de fichier)|AFS]] et les fichiers généré par le programme pour les différentes manipulation de l'[[AFS (Format de fichier)|AFS]] :
The '''sys''' folder contains all system files of the [[AFS_(File_format)|AFS]] and files generated by the program for various [[AFS_(File_format)|AFS]] manipulations:
     tableofcontent.bin - Fichier système TOC : Ce fichier peut être directement édité, ce sera géré par la commande --pack.
     tableofcontent.bin - TOC system file: This file can be directly edited and is managed by the --pack command.
     filenamedirectory.bin - Fichier système FD : Ce fichier est créé seulement s'il y a un FD dans l'[[AFS (Format de fichier)|AFS]].
     filenamedirectory.bin - FD system file: This file is created only if there is an FD in the [[AFS_(File_format)|AFS]].
     filename_resolver.csv - Créé quand plusieurs fichiers ont le même nom dans le FD.
     filename_resolver.csv - Created when multiple files have the same name in the FD.
     afs_rebuild.conf - Modifier ce fichier pour rebuild l'[[AFS (Format de fichier)|AFS]].
     afs_rebuild.conf - Modify this file to rebuild the [[AFS_(File_format)|AFS]].
     afs_rebuild.csv - Modifier ce fichier en prenant en compte les configurations du fichier afs_rebuild.conf pour reconstruire l'[[AFS (Format de fichier)|AFS]].
     afs_rebuild.csv - Modify this file while taking into account the configurations from afs_rebuild.conf to reconstruct the [[AFS_(File_format)|AFS]].


==== filename_resolver.csv ====
==== filename_resolver.csv ====
La commande --pack ne modifie pas les noms dans le FD. Ce fichier est utilisé dans le pack pour détecter automatiquement les fichiers du dossier '''root''' qui ont été renommés et permettre de garder leur index initial dans la TOC (et le FD). Ce fichier est généré automatiquement quand :
The --pack command does not change the names in the FD. This file is used in the packing process to automatically detect renamed files in the '''root''' folder and keep their initial index in the TOC (and FD). This file is generated automatically when:
* le FD est présent et comporte des doublons dans les noms ; les fichiers extraits sont alors renommés "filename '''(N)'''.ext" avec N:Entier,
* The FD is present and contains duplicates in the names; extracted files are then renamed "filename '''(N)'''.ext" with N: Integer,
* le FD est absent, les fichiers sont alors nommés par leur index, par exemple : "00000000" pour le tout premier fichier.
* The FD is absent, and files are named by their index, for example: "00000000" for the very first file.


Chaque ligne du csv contient un couple "index/unpacked_filename". On peut utiliser ce csv pour renommer les fichiers, par exemple: "0/my_new_filename.ext".
Each line in the CSV contains an "index/unpacked_filename" pair. This CSV can be used to rename files, for example: "0/my_new_filename.ext".


==== afs_rebuild.conf ====
==== afs_rebuild.conf ====
Chaque offset ou index est écrit en hexadécimal avec le préfixe '''0x''': 0xabcdef. On utilisera la valeur '''auto''' quand c'est possible.
Each offset or index is written in hexadecimal with the prefix '''0x''': 0xabcdef. The value '''auto''' will be used where possible.
 
===== [Default] section =====
===== [Default] section =====


'''AFS_MAGIC''' : 0x41465300 ou 0x41465320
'''AFS_MAGIC''' : 0x41465300 or 0x41465320


'''files_rebuild_strategy''' : auto, index, offset ou mixed
'''files_rebuild_strategy''' : auto, index, offset, or mixed


'''files_rebuild_strategy''' est utilisé pour organiser les fichiers (indexes, offsets, nom packés si le FD est présent) dans l'AFS. La stratégie de rebuild utilise le fichiers '''afs_rebuild.csv''' généré automatiquement durant l'unpack. Si le fichier du dossier '''root''' est absent du fichier '''afs_rebuild.csv''', toutes les valeurs seront alors générées automatiquement. 4 stratégies sont disponibles :
'''files_rebuild_strategy''' is used to organize files (indexes, offsets, packed filenames if the FD is present) in the AFS. The rebuild strategy uses the automatically generated afs_rebuild.csv file during unpacking. If the root folder's file is absent from afs_rebuild.csv, all values will be generated automatically. Four strategies are available:


     '''auto''' : Rebuild automatiquement tous les indexes et les offsets des fichiers en utilisant '''packed_filename''' pour spécifier le nom du fichier dans le FD (s'il est présent). Les indexes et offsets dans le fichier afs_rebuild.csv seront ignorées.
     '''auto''' : Automatically rebuild all indexes and offsets of specified files (uses packed_filename to specify the filename in the FD if present). Indexes and offsets in the afs_rebuild.csv file will be ignored.
     '''index''' : Garde les indexes des fichiers spécifiés (utilise le nom packed_filename si le FD est présent). Les offsets seront ignorés.
     '''index''' : Keeps the indexes of specified files (uses packed_filename if the FD is present). Offsets will be ignored.
     '''offset''' : Garde les offsets des fichiers spécifiés (utilise le nom packed_filename si le FD est présent). Les indexes seront ignorés.
     '''offset''' : Keeps the offsets of specified files (uses packed_filename if the FD is present). Indexes will be ignored.
     '''mixed''' : Garde les indexes et offsets des fichiers spécifiés (utilise le nom packed_filename si le FD est présent).
     '''mixed''' : Keeps both indexes and offsets of specified files (uses packed_filename if the FD is present).


'''filename_directory''' : True si le FD est présent, False sinon. Si la valeur est True, la section [FilenameDirectory] doit être présente.
'''filename_directory''' : True if the FD is present, False otherwise. If the value is True, the [FilenameDirectory] section must be present.


===== [FilenameDirectory] section =====
===== [FilenameDirectory] section =====


'''toc_offset_of_fd_offset''' : L'offset dans la TOC de l'offset du FD est à la fin de la TOC. Dans certains AFS, on retrouve un pad à la fin de la série d'offset/length. On utilisera la valeur '''auto''' quand c'est possible.
'''toc_offset_of_fd_offset''' : The offset in the TOC of the FD offset is at the end of the TOC. In some AFS, there is padding at the end of the offset/length series. The value '''auto''' will be used where possible.
 
'''fd_offset''' : Le FD est à la fin de l'[[AFS (Format de fichier)|AFS]]. On utilisera la valeur '''auto''' quand c'est possible.


'''fd_last_attribute_type''' : Le type des 4 derniers octets de chaque entrée du FD. 4 valeurs sont possibles :
'''fd_offset''' : The FD is at the end of the [[AFS_(File_format)|AFS]]. The value '''auto''' will be used where possible.
    '''length''' : On utilise la taille du fichier.
    '''offset-length''' : On utilise la série "offset/length/offset/length...".
    '''0xabcdef''' : On utilise une constante hexadécimale.
    '''unknown''' : La valeur est inconnue. On utilisera la valeur Null.


==== afs_rebuild.csv''' ====
'''fd_last_attribute_type''' : The type of the last 4 bytes of each FD entry. Four values are possible:
'''afs_rebuild.csv''' contient des entrées décrivant comment packer les fichiers du dossier '''root''' dans l'AFS. Chaque valeur d'offset ou d'index est stocké en hexadécimal avec le préfixe '''0x''' : 0xabcdef. On utilisera la valeur '''auto''' pour les indexes et offsets quand c'est possible. Les offsets doivent être alignés sur la valeur 0x800 (2048). On mettra une ligne par fichier sélectionné sur lequel on veut ajouter des contraintes pour le pack en utilisante le format : "unpacked_filename/index/offset/packed_filename", par exemple : "dummy (5).bin/0x12/0x80000/dummy.bin". On pourra utiliser la valeur '''auto''', par exemple : "dummy (5).bin/auto/auto/dummy.bin". Pour chaque block vide, on ajoutera seulement un couple offset/length avec des valeurs alignées à 0x800, par exemple : "0x80000/0x5000".
    '''length''' : Use the file size.
    '''offset-length''' : Use the "offset/length/offset/length..." series.
    '''0xabcdef''' : Use a hexadecimal constant.
    '''unknown''' : The value is unknown. The Null value will be used.


Quand on configurera le rebuild, on supprimera toutes les lignes contenant des fichiers qui n'ont pas de contrainte du fichier '''afs_rebuild.csv'''. Ensuite on mettra la valeurs '''auto''' aux offsets et indexes qui n'ont pas de contraintes. Lors du rebuild, le fichier '''filename_resolver.csv''' est automatiquement supprimé. On conservera les changements de noms de fichiers en ajoutant des entrées avec unpacked_filename et index (et packed_filename si le FD est présent) dans ce fichier.
==== afs_rebuild.csv ====
'''afs_rebuild.csv''' contains entries describing how to pack files from the '''root''' folder into the AFS. Each offset or index value is stored in hexadecimal with the prefix '''0x''': 0xabcdef. The value '''auto''' will be used for indexes and offsets where possible. Offsets must be aligned to the value 0x800 (2048). One line per selected file is added with constraints for packing using the format: "unpacked_filename/index/offset/packed_filename", for example: "dummy (5).bin/0x12/0x80000/dummy.bin". You can use the value '''auto''', for example: "dummy (5).bin/auto/auto/dummy.bin". For each empty block, only an offset/length pair with values aligned to 0x800 will be added, for example: "0x80000/0x5000".


Open source & licence MIT.
When configuring the rebuild, all lines containing files with no constraints from the afs_rebuild.csv file will be removed. Then, the '''auto''' value will be added to offsets and indexes with no constraints. During the rebuild, the filename_resolver.csv file is automatically deleted. Changes to file names will be preserved by adding entries with unpacked_filename and index (and packed_filename if the FD is present) in this file.
</div></div>
Open-source & MIT license.


=== [https://github.com/Virtual-World-RE/NeoGF/tree/main/doltool doltool.py] ===
=== [https://github.com/Virtual-World-RE/NeoGF/tree/main/doltool doltool.py] ===
Script python 3 qui permet de manipuler le format de fichier [[DOL (Format de fichier)|dol]]. Il permet aussi d'obtenir des stats détaillées sur le [[DOL (Format de fichier)|dol]] et sa composition, ou encore de patcher un [[DOL (Format de fichier)|dol]] en utilisant un fichier d'Action Replay Codes.
Python 3 script for manipulating the [[DOL_(File_format)|DOL]] file format. It also provides detailed statistics on the [[DOL_(File_format)|DOL]] and its composition, and can patch a [[DOL_(File_format)|DOL]] using an Action Replay Codes file.


Open source & licence MIT.
Open-source & MIT license.


=== [https://github.com/MaikelChan/AFSPacker AFSPacker] ===
=== [https://github.com/MaikelChan/AFSPacker AFSPacker] ===
AFSPacker est simple d'utilisation et fonctionnel. Ce logiciel permet d'extraire et patcher les fichier au format [[AFS (Format de fichier)|AFS]].
AFSPacker is user-friendly and functional. This software allows for extraction and patching of files in the [[AFS_(File_format)|AFS]] format.


* AFSPacker considère les 4 derniers octets des entrées du FD comme inconnus. Ces octets sont parfois utilisés pour décrire la taille des fichiers packés.  
* AFSPacker considers the last 4 bytes of FD entries as unknown. These bytes are sometimes used to describe the size of packed files.
* Il n'est pas possible de spécifier l'offset de l'offset de la FD dans la TOC. En effet, cet offset peut être placé directement après la TOC, ou après un padding suite à la TOC. Ceci peut éventuellement être important si l’exécutable principal gère les fichiers avec un offset de fichier hardcodé relatif au début de l'[[AFS (Format de fichier)|AFS]].
* It is not possible to specify the offset of the FD in the TOC. This offset can be placed directly after the TOC or after padding following the TOC. This can be important if the main executable handles files with a hardcoded file offset relative to the start of the [[AFS_(File_format)|AFS]].
* Les dates ne sont pas gardées lors de l'extraction, ce qui produit une perte de données à chaque repack.
* Dates are not retained during extraction, resulting in data loss with each repack.


Open source & licence MIT.
Open-source & MIT license.


=== [https://www.moddingway.com/file/270.html AFS Explorer] ===
=== [https://www.moddingway.com/file/270.html AFS Explorer] ===
On évitera d'utiliser AFS Explorer dans les projets quand afstool.py peut être utilisé. En effet, les conditions d'utilisation sont restrictives et la ligne de commande est absente.
AFS Explorer should be avoided in projects where afstool.py can be used. The terms of use are restrictive, and command-line functionality is absent.
Les sources ne sont à priori pas accessibles, ce qui est un autre point limitant.
The source code does not appear to be accessible, which is another limiting factor.


=== [http://www.wiibackupmanager.co.uk/gcit.html GameCube Iso Tools] ===
=== [http://www.wiibackupmanager.co.uk/gcit.html GameCube Iso Tools] ===
Outil de manipulation d'iso GameCube. Permet d'extraire l'iso dans un dossier au format GCReEx ou DiscEx. Permet ensuite de repack dans une ISO.<br>
A tool for manipulating GameCube ISOs. It allows extraction of the ISO into a GCReEx or DiscEx format folder. It can also repack into an ISO format.<br>
Note : L'iso repack est automatiquement "compressée" sous windows. Le dossier de destination doit être créé au préalable.<br>
Note: The repacked ISO is automatically "compressed" on Windows. The destination folder must be created in advance.<br>


Commandes :<br>
Commands:<br>
'''gcit.exe iso.iso -f gcreex -d extract -q'''<br>
gcit.exe iso.iso -f gcreex -d extract -q
'''gcit.exe extract\Game_folder -f fulliso -d repack.iso -q'''<br>
gcit.exe extract\Game_folder -f fulliso -d repack.iso -q


Dolphin Emulator renvoie une erreur sur repack.iso : "repack.iso n'est pas un fichier GCM/ISO valide, ou n'est pas une ISO GC/Wii."
Dolphin Emulator may return an error for repack.iso: "repack.iso is not a valid GCM/ISO file, or is not a GC/Wii ISO."
Au format GCReEx, on remarque que le padding à la fin de l'apploader est différent de celui généré par Dolphin Emu. De même, de nombreux fichiers sont extraits avec gcit.exe avec un padding ajouté à la fin comparé à la taille réelle indiquée dans le fst.bin du DVD.
In GCReEx format, it is noticed that the padding at the end of the apploader is different from that generated by Dolphin Emulator. Additionally, many files extracted with gcit.exe have padding added to the end compared to the actual size indicated in the DVD's fst.bin.


=== [https://wit.wiimm.de/ Wiimms ISO Tool] ===
=== [https://wit.wiimm.de/ Wiimms ISO Tool] ===
wit permet de manipuler les ISO GameCube. Sur windows, on pourra utiliser wit sans passer par l'installation en utilisant le fichier bin/wit.exe.
wit allows manipulation of GameCube ISOs. On Windows, wit can be used without installation by using the bin/wit.exe file.


Extraction des fichiers d'une ISO (au format [https://wit.wiimm.de/info/composing.html fst]) :
Extraction of files from an ISO (in [https://wit.wiimm.de/info/composing.html fst] format):
wit extract mkw.iso --dest=mkw/
wit extract mkw.iso --dest=mkw/


Attention, le rapack dans l'iso via la commande copy ne produit à priori pas la même ISO (fichier de + de 4 Go). A voir si des options permettent de reproduire la bonne ISO.
Please note that repacking into the ISO via the copy command does not seem to produce the same ISO (over 4 GB file). It needs to be investigated if there are options to reproduce the correct ISO.


https://github.com/Wiimm/wiimms-iso-tools
https://github.com/Wiimm/wiimms-iso-tools


Open source & license GPL v2+.
Open-source & GPL v2+ license.


=== GC Rebuilder 1.1 ===
=== GC Rebuilder 1.1 ===
Attention, ce projet n'est plus développé, et la taille de l'exécutable principal n'est pas la bonne.
Please note that this project is no longer developed, and the size of the main executable is incorrect.


Code source : https://github.com/bsv798/gcrebuilder
Source code: https://github.com/bsv798/gcrebuilder


La ligne de commande est présente mais aucune documentation précise n'est fournie.
The command-line interface is present, but no specific documentation is provided.


=== [https://github.com/sup39/GeckoLoader GeckoLoader] ===
=== [https://github.com/sup39/GeckoLoader GeckoLoader] ===
Gecko Loader permet de patcher un [[DOL (Format de fichier)|dol]] en utilisant une liste d'[https://github.com/dolphin-emu/dolphin/tree/master/docs/ActionReplay Action Replay Codes] ou de [http://wiigeckocodes.github.io/codetypedocumentation.html GeckoCodes]. Le logiciel permet aussi de Hook des fonctions (VI etc.).
Gecko Loader allows patching a [[DOL_(File_format)|DOL]] using a list of [https://github.com/dolphin-emu/dolphin/tree/master/docs/ActionReplay Action Replay Codes] or [http://wiigeckocodes.github.io/codetypedocumentation.html GeckoCodes]. The software also allows hooking functions (VI, etc.).


On aura par exemple un patch du .bss avec du bytecode powerpc et des valeurs à patcher. L'EntryPoint est changé pour arriver sur ce nouveau code et après chargement en mémoire le code modifie les valeurs en mémoire.
For example, there may be a .bss patch with PowerPC bytecode and values to patch. The EntryPoint is changed to reach this new code, and after loading into memory, the code modifies the values in memory.


Ceci est une mauvaise pratique car le .bss contient les variables non initialisées (int a;). Normalement elles doivent être à Null / 0. Aussi pour les codes en écriture seule, on préfèrera patcher quand c'est possible directement les sections .text ou .data du [[DOL (Format de fichier)|dol]].
This is considered a bad practice because .bss contains uninitialized variables (int a;). Normally, they should be Null / 0. Additionally, for write-only codes, it is preferable to patch the .text or .data sections of the [[DOL_(File_format)|DOL]] directly when possible.


Open source & licence GPL v3.
Open-source & GPL v3 license.


[[Catégorie:GameCube]]
[[Category:GameCube]]
[[Catégorie:Outils]]
[[Category:Tools]]
[[Catégorie:Gotcha Force]]
[[Category:Gotcha Force]]

Latest revision as of 12:33, 7 October 2023

← Gotcha Force

Tools

Dolphin Emulator

Dolphin allows for the extraction of GameCube ISO files. It can be used in debug mode for stepping through PowerPC instructions, setting breakpoints, memory inspection/dumping, and more.

Dolphin Memory Engine

Dolphin Memory Engine utilizes Dolphin dumps (in debug mode: add -d when running Dolphin) to assign names to fixed memory addresses during execution. This enables sharing reverse engineering work on the game's memory.

Documentation on symbol generation: Symbols

Python Support for Dolphin Emulator

Python support for AI/CPU scripting. The API allows reading and writing to memory, among other capabilities.

gcmtool.py (Virtual World RE)

gcmtool.py allows manipulation of GameCube files (GCM ISO format). It can extract all game files, as well as files related to GCM format operations. Its primary feature is patching the FST and the boot.bin file with a new boot.DOL file, a new apploader.img, and added, deleted, or modified game files. It aligns all file offsets according to a specified value, with a default alignment of 4. DVD files are also optimally positioned to minimize the GCM ISO size.

Open-source & MIT license.

afstool.py (Virtual World RE)

Python3 script for unpacking/packing/rebuilding the AFS file format. Reconstruction of the Table of Contents (TOC) and Filename Directory (FD) is possible with control over all possible format parameters.

User Manual

Unpack source_afs.afs into the new default folder source_afs. If optional_dest_folder is specified, unpack into optional_dest_folder. If the AFS has an FD, it will use the OS modification date (mtime) to store the file's date.

afstool.py --unpack source_afs.afs optional_dest_folder

Pack source_folder into the new default folder source_folder.afs. If optional_dest_file.afs is specified, pack into optional_dest_file.afs. If the AFS has an FD, it will use the OS modification date (mtime) to update the file's date in the AFS. The maximum size of each file is determined by the next offset in the AFS (file or system file). Without an FD, there are no restrictions on the size of the last file in the AFS. The names in the FD remain unchanged by this command.

afstool.py --pack source_folder optional_dest_file.afs

Rebuilds the file system of an unpacked AFS folder using the afs_rebuild.conf and afs_rebuild.csv files. See below for more information on afs_rebuild.conf.

afstool.py --rebuild source_folder

Displays statistics of the AFS or the unpacked folder of the AFS. Provides information about the header, TOC, FD, the entire memory mapping sorted by offsets (files and system files), information about the address space, and grouped duplicate file names.

afstool.py --stats path

Extracted Files Structure

The root folder contains all files from the AFS.

The sys folder contains all system files of the AFS and files generated by the program for various AFS manipulations:

   tableofcontent.bin - TOC system file: This file can be directly edited and is managed by the --pack command.
   filenamedirectory.bin - FD system file: This file is created only if there is an FD in the AFS.
   filename_resolver.csv - Created when multiple files have the same name in the FD.
   afs_rebuild.conf - Modify this file to rebuild the AFS.
   afs_rebuild.csv - Modify this file while taking into account the configurations from afs_rebuild.conf to reconstruct the AFS.

filename_resolver.csv

The --pack command does not change the names in the FD. This file is used in the packing process to automatically detect renamed files in the root folder and keep their initial index in the TOC (and FD). This file is generated automatically when:

  • The FD is present and contains duplicates in the names; extracted files are then renamed "filename (N).ext" with N: Integer,
  • The FD is absent, and files are named by their index, for example: "00000000" for the very first file.

Each line in the CSV contains an "index/unpacked_filename" pair. This CSV can be used to rename files, for example: "0/my_new_filename.ext".

afs_rebuild.conf

Each offset or index is written in hexadecimal with the prefix 0x: 0xabcdef. The value auto will be used where possible.

[Default] section

AFS_MAGIC : 0x41465300 or 0x41465320

files_rebuild_strategy : auto, index, offset, or mixed

files_rebuild_strategy is used to organize files (indexes, offsets, packed filenames if the FD is present) in the AFS. The rebuild strategy uses the automatically generated afs_rebuild.csv file during unpacking. If the root folder's file is absent from afs_rebuild.csv, all values will be generated automatically. Four strategies are available:

   auto : Automatically rebuild all indexes and offsets of specified files (uses packed_filename to specify the filename in the FD if present). Indexes and offsets in the afs_rebuild.csv file will be ignored.
   index : Keeps the indexes of specified files (uses packed_filename if the FD is present). Offsets will be ignored.
   offset : Keeps the offsets of specified files (uses packed_filename if the FD is present). Indexes will be ignored.
   mixed : Keeps both indexes and offsets of specified files (uses packed_filename if the FD is present).

filename_directory : True if the FD is present, False otherwise. If the value is True, the [FilenameDirectory] section must be present.

[FilenameDirectory] section

toc_offset_of_fd_offset : The offset in the TOC of the FD offset is at the end of the TOC. In some AFS, there is padding at the end of the offset/length series. The value auto will be used where possible.

fd_offset : The FD is at the end of the AFS. The value auto will be used where possible.

fd_last_attribute_type : The type of the last 4 bytes of each FD entry. Four values are possible:

   length : Use the file size.
   offset-length : Use the "offset/length/offset/length..." series.
   0xabcdef : Use a hexadecimal constant.
   unknown : The value is unknown. The Null value will be used.

afs_rebuild.csv

afs_rebuild.csv contains entries describing how to pack files from the root folder into the AFS. Each offset or index value is stored in hexadecimal with the prefix 0x: 0xabcdef. The value auto will be used for indexes and offsets where possible. Offsets must be aligned to the value 0x800 (2048). One line per selected file is added with constraints for packing using the format: "unpacked_filename/index/offset/packed_filename", for example: "dummy (5).bin/0x12/0x80000/dummy.bin". You can use the value auto, for example: "dummy (5).bin/auto/auto/dummy.bin". For each empty block, only an offset/length pair with values aligned to 0x800 will be added, for example: "0x80000/0x5000".

When configuring the rebuild, all lines containing files with no constraints from the afs_rebuild.csv file will be removed. Then, the auto value will be added to offsets and indexes with no constraints. During the rebuild, the filename_resolver.csv file is automatically deleted. Changes to file names will be preserved by adding entries with unpacked_filename and index (and packed_filename if the FD is present) in this file.

Open-source & MIT license.

doltool.py

Python 3 script for manipulating the DOL file format. It also provides detailed statistics on the DOL and its composition, and can patch a DOL using an Action Replay Codes file.

Open-source & MIT license.

AFSPacker

AFSPacker is user-friendly and functional. This software allows for extraction and patching of files in the AFS format.

  • AFSPacker considers the last 4 bytes of FD entries as unknown. These bytes are sometimes used to describe the size of packed files.
  • It is not possible to specify the offset of the FD in the TOC. This offset can be placed directly after the TOC or after padding following the TOC. This can be important if the main executable handles files with a hardcoded file offset relative to the start of the AFS.
  • Dates are not retained during extraction, resulting in data loss with each repack.

Open-source & MIT license.

AFS Explorer

AFS Explorer should be avoided in projects where afstool.py can be used. The terms of use are restrictive, and command-line functionality is absent. The source code does not appear to be accessible, which is another limiting factor.

GameCube Iso Tools

A tool for manipulating GameCube ISOs. It allows extraction of the ISO into a GCReEx or DiscEx format folder. It can also repack into an ISO format.
Note: The repacked ISO is automatically "compressed" on Windows. The destination folder must be created in advance.

Commands:

gcit.exe iso.iso -f gcreex -d extract -q
gcit.exe extract\Game_folder -f fulliso -d repack.iso -q

Dolphin Emulator may return an error for repack.iso: "repack.iso is not a valid GCM/ISO file, or is not a GC/Wii ISO." In GCReEx format, it is noticed that the padding at the end of the apploader is different from that generated by Dolphin Emulator. Additionally, many files extracted with gcit.exe have padding added to the end compared to the actual size indicated in the DVD's fst.bin.

Wiimms ISO Tool

wit allows manipulation of GameCube ISOs. On Windows, wit can be used without installation by using the bin/wit.exe file.

Extraction of files from an ISO (in fst format): wit extract mkw.iso --dest=mkw/

Please note that repacking into the ISO via the copy command does not seem to produce the same ISO (over 4 GB file). It needs to be investigated if there are options to reproduce the correct ISO.

https://github.com/Wiimm/wiimms-iso-tools

Open-source & GPL v2+ license.

GC Rebuilder 1.1

Please note that this project is no longer developed, and the size of the main executable is incorrect.

Source code: https://github.com/bsv798/gcrebuilder

The command-line interface is present, but no specific documentation is provided.

GeckoLoader

Gecko Loader allows patching a DOL using a list of Action Replay Codes or GeckoCodes. The software also allows hooking functions (VI, etc.).

For example, there may be a .bss patch with PowerPC bytecode and values to patch. The EntryPoint is changed to reach this new code, and after loading into memory, the code modifies the values in memory.

This is considered a bad practice because .bss contains uninitialized variables (int a;). Normally, they should be Null / 0. Additionally, for write-only codes, it is preferable to patch the .text or .data sections of the DOL directly when possible.

Open-source & GPL v3 license.