Planet X3 est disponible sous 3 “distributions”:
Dans cette analyse, nous allons nous concentrer sur la version 3“1/4 de Aout 2020, version qui offre le choix dans plusieurs carte video (CGA, EGA, VGA).
Il existe une version plus récente (Avril 2021), mais quand j'ai commencé l'étude, je n'avais pas cette mise à jour (officiel mais pas disponible sur le site de the8bitguy).
Comme a mon habitude, je commence par analyser les “features” du programmes (mode graphiques, cartes son, etc…), les fichiers; leur types et tailles (si pertinent).
Resolution | Couleurs | Carte | Application | Commentaires |
---|---|---|---|---|
160×200 | 16 | CGA | PX3_CGA.COM | Composite uniquement |
320×200 | 4 | CGA | PX3_CGA.COM | Palettes Standard |
640×200 | 2 | CGA | PX3_CGA.COM | |
320×200 | 4 | CGA | PX3_CGA.COM | 4 grayscale (2 palettes possibles) |
160×200 | 16 | TANDY/PC Jr | PX3_CGA.COM | |
720×350 | 2 | Hercule | PX3_CGA.COM | |
320×200 | 16 | Plantronics | PX3_CGA.COM | |
320×200 | 256 | VGA | PX3_VGA.COM | |
640×400 | 16 | TANDY 1000TL | PX3_VGA.COM | |
640×200 | 16 | EGA | PX3_EGA.COM |
Voix | Speaker | AdLib | Tandy |
---|---|---|---|
Music 1 | Natif | Natif | Natif |
Music 2 | Natif | Natif | Natif |
Music 3 | Natif | Natif | Natif |
SFX | Natif | Speaker | Speaker |
Speaker | AdLib | Tandy | Descr |
---|---|---|---|
S_LOSE.BIN | A_LOSE.BIN | T_LOSE.BIN | Game Over Music When Losing |
S_MENU.BIN | A_MENU.BIN | T_MENU.BIN | Music during menu |
S_MUS01.BIN | A_MUS01.BIN | T_MUS01.BIN | |
S_MUS02.BIN | A_MUS02.BIN | T_MUS02.BIN | |
S_MUS03.BIN | A_MUS03.BIN | T_MUS03.BIN | |
S_MUS04.BIN | A_MUS04.BIN | T_MUS04.BIN | |
S_MUS05.BIN | A_MUS05.BIN | T_MUS05.BIN | |
S_MUS06.BIN | A_MUS06.BIN | T_MUS06.BIN | |
S_MUS07.BIN | A_MUS07.BIN | T_MUS07.BIN | |
SOUNDS.BIN | Sound FX valable pour toutes les Cartes Son, car les FXs sortent toujours du speaker | ||
S_WIN.BIN | A_WIN.BIN | T_WIN.BIN | Game Over Music When Wining |
Ficihier | Description |
---|---|
MAP00.MAP | |
MAP01.MAP | |
MAP02.MAP | |
MAP03.MAP | |
MAP04.MAP | |
MAP05.MAP | |
MAP06.MAP | |
MAP07.MAP | |
MAP08.MAP | |
MAP09.MAP | |
MAP10.MAP | |
MAP11.MAP | |
MAP12.MAP |
Trois “tileset” existent, et en plusieurs version suivant la carte graphique choisie
Graphique Mode | Grassy | Desert | Winter |
---|---|---|---|
CGA 640x200x2 couleurs | TILE1.CG2 | TILE2.CG2 | TILE3.CG2 |
CGA 620x200x4 couleurs | TILE1.CGA | TILE2.CGA | TILE3.CGA |
CGA 160x200x16 Couleurs Composite Mode | TILE1.CMP | TILE2.CMP | TILE3.CMP |
TANDY 160x200x16 Couleurs | TILE1.TDY | TILE2.TDY | TILE3.TDY |
VGA 320x200x256 Couleurs | TILE1.VGA | TILE2.VGA | TILE3.VGA |
Tiles Data For each set | TILEDAT1.DAT | TILEDAT2.DAT | TILEDAT3.DAT |
Planet X3 (dans sa version digitale/720Ko) contient 5 fichiers executables sont tous des fichiers de type “COM”.
La version 360Ko n'inclue QUE la version CGA.
Les fichiers binaires ”.com“ sont des fichiers executable destinés a être charger tel que en mémoire, ce mécanisme est hérité de CP/M, à la glorieuse époque des machines 8bits.
Ces fichiers ne contiennent aucun header, aucune Metadata, aucune instruction de chargement complexe; c'est simplement un bichier binaire pouvant meme être mis en ROM, il faut toutefois noter que sur PC, un fichier ”.com“ peut faire des appels à l'OS et donc ne pas fonctionner sans DOS préalablement chargé en mémoire, ce qui n'est pas le cas d'un fichier ”.com“ CP/M.
À l'époque des premier processeurs de la série x86 d'Intel, dont l'espace d'adressage était découpé en «segments» de maximum 64KB, les fichiers «.com» étaient des programmes de suffisamment petite taille pour tenir entièrement sur un seul segment; cette particularité de taille leur permettait de ne nécessiter aucune relocation pour leur chargement en mémoire.
Ces executables sont sensé n'occuper qu'un seul segment de mémoire (64Ko), même s'ils peuvent accéder à l'ensemble de la mémoire du PC (ne fusse que pour accéder à la carte graphique).
Les fichiers «.com» sont simplement chargés (par l'OS) à l'adresse 100h d'un segment quelconque, (après 100h/256 octets d'informations sur l'environnement). Une convention veut que les données soient placées au début du fichier, juste après une instruction de saut vers le code exécutable.
Un rapide coup d'oeil (en hexa) sur les fichiers ”.com“ nous permet de rapidement voir plusieurs anomalies sur ces fichiers.
Là où le tout petit “PX3.COM”:
Ce programme contient des parties ASCII parfaitement lisibles et cohérentes: on peut parfaitement lire ici ”px3_vga.com“, ”px3_cga.com“, ce qui confirme d'ailleurs le status de “loader” (mais uniquement pour choisir entre CGA et VGA) de ce programme, mais aussi qu'il n'est ni compressé, ni encrypté et qu'il peut donc être analyser tel quel.
Dans les “gros” fichiers .com, les parties “ASCII” ne semble très peu lisibles, même si l'on peut deviner du texte.
Il est beaucoup plus difficile de lire quelque chose dans ce début de programme, on devine des mots. En analysant le premier block “lisible”
"Choos", 0xdb,0xff, "e Video Mo",0x05 "1-CGA 320x",0x02,0xfb,0xf7
Ce type d'encodage est typique d'une compression relativement légère type RLE (une encryption n'aurait laissé aucun texte lisible).
Un autre indice est en fait les 4 lettres localisées à offset 0x24 : “UPX!”, il s'agit de la signature d'Ultimate Packer for eXecutables. il n'y a donc aucune raison d'analyser les fichiers avant de les décompresser via l'outil Ad-Hoc.
Ce fait a d'ailleurs été confirmé dans le “README.TXT” :
All executable files of notable size have been compressed with UPX and have to be de-compressed before they can be modified in any meaningful way.
Cette phrase sous-entends que les modifications (et donc l'analyse) est permise, il n'y a donc pas de raison de ne pas le faire…
Après décompression (quand nécessaire) voici ce que donne le listing de ces fichiers:
Fichier | Taille (Bytes) | Compression | Taille (décompressé) | Description |
---|---|---|---|---|
PX3.COM | 332 | N | Loader | |
PX3_CGA.COM | 15415 | UPX! | 56627 | |
PX3_EGA.COM | 14785 | UPX! | 38871 | |
PX3_MTDY.COM | 15346 | UPX! | 40725 | |
PX3_VGA.COM | 15709 | UPX! | 39943 |