Outils pour utilisateurs

Outils du site


back2root:reverse-engineering:future-crew-unreal-reverse-engineering-part-2

Future Crew Unreal Reverse Engineering - Part 2

on va commencer par jeter un œil sur le contenu du fichier UNREAL.EXE, comme nous l'avons vu dans l'article précédent, l'index contient 97 fichiers. Sans lister la liste complète, il est intéressant de noter que les assets sont stockés dans un certain ordre: celui des diverses parties.

Extraction du Loader

il est plus facile, sous Linux, d'extraire le loader via la commande dd:

frater@gemini:~/re/unreal# dd bs=1 count=26347 if=UNREAL.EXE of=LOADER.EXE

Nous pouvons ensuite, dans DosBox-X, décompresser le loader, mais ce n'est pas suffisant comme nous allons le voir plus loin.

Analyse des exécutables

Nous allons lister les fichiers exécutables:

Nom de Fichier Taille (bytes) Compression 1 Taille (Bytes) Compression 2 Tailles (bytes) Titre / usage
PART1.EXE 29.860 LINK V3.69 /EXEPACK 42.592 N/A 42.592 Start field + flags “FuturCrew Present Unreal”
PART99.EXE 747 LZEXE V0.91 or V1.00a 434 LINK V3.69 /EXEPACK 1.088 End Part (Texte Credits)
PART3.EXE 17.051 LZEXE V0.91 or V1.00a 33.080 LINK V3.69 /EXEPACK 86.048 Sinus Part?
PART10.EXE 15.611 LZEXE V0.91 or V1.00a 22.264 LINK V3.69 /EXEPACK 31.120
PART13.EXE 21.003 LZEXE V0.91 or V1.00a 36.954 LINK V3.69 /EXEPACK 61.008 WormHole, plasma part
PART16.EXE 9.691 LZEXE V0.91 or V1.00a 14.250 LINK V3.69 /EXEPACK 54.050
PART17.EXE 35.868 LINK V3.69 /EXEPACK 75.040 N/A 75.040
PART4.EXE 39.176 LINK V3.69 /EXEPACK 109.216 N/A 109.216 ball part ?
PART18.EXE 3.339 LZEXE V0.91 or V1.00a 3.422 LINK V3.69 /EXEPACK 4.752
PART21.EXE 19.739 LZEXE V0.91 or V1.00a 28.412 LINK V3.69 /EXEPACK 111.872 Coke/disk part
PART95.EXE 6.811 LZEXE V0.91 or V1.00a 9.282 LINK V3.69 /EXEPACK 13.344
PARTS.EXE 11.208 LINK V3.69 /EXEPACK 10.928 N/A 10.928 Audio Setup
PART15.EXE 120.054 LINK V3.69 /EXEPACK 206.042 N/A 206.042 LandScape
PARTV.EXE 108.842 LINK V3.69 /EXEPACK 131.280 N/A 131.280 Vector Part
LOADER.EXE 26.347 LZEXE V0.91 or V1.00a 40.144 LINK V3.69 /EXEPACK 50.096 DIS / Music player / Loader

Les fichiers extraits sont peu parlant, et certains sont même totalement illisibles. Heureusement, il existe un utilitaire unp.exe, qui sous DOS, permet de décompresser quasi n'importe quelle compresseur d’exécutable.

Les fichiers sont, en grande majorité, compressés via l'utilitaire LZEXE pour réduire la taille totale de la démo, sans devoir compresser les assets, d'autres via l'outil de LINK de microsoft.

Après avoir décompressé les fichiers (via unp.exe), on constate que certains fichiers sont sont plus lourd que les fichiers “sources” (PART99.EXE et PARTS.EXE).

Seuls ceux qui sont uniquement compressé via LINK V3.69 /EXEPACK, ne sont pas compressés deux fois.

La raison de cette double compression n'est pas très clair, car certaines parties sont compressées deux fois avec un résultat “pire” que simplement via la compression LINK (PART99.EXE et PARTS.EXE).

On peut supposer qu'il s'agit ici d'Obscurcissement de la démo, ou simplement un choix d'options de script de compilation par “défaut” (/EXEPACK) suivit d'une compression manuelle (LZEXE).

Il faut encore ajouter le “Loader” qui est contiendrait à la fois le “file system” et le serveur de démo [DIS], qui permet de gérer la mémoire, l'accès aux assets, le player de musique.

Nom de Fichier Taille L1 (bytes) Compression L1 Taille L2 (Bytes) Compression L2 Taille L3 (Bytes) Description
LOADER.EXE 26.347 LZEXE V0.91 or V1.00a 40.144 LINK V3.69 /EXEPACK 50.096 DIS / Music player / Loader

Quand on additionne l'ensemble des fichiers extraits (2.372.134 Bytes) et le loader (26.347 Bytes), nous arrivons à un grand totale de 2.398.481 bytes; le fichier “source” UNREAL.EXE ayant une taille de 2.400.825 Bytes; cela fait une différence de 2344 Bytes.

→ On sait, de par la partie 1, que l'index est composé de 97 entrées de 24 Bytes et 12 Bytes de données de “rangement” :

2340 Bytes = (97 * 24 Bytes) + (3 * 4 Bytes)

réflexion à propos de la compression

En comparant les tailles des fichiers (exécutables compressés) vs les fichiers décompressés;

UNREAL.EXE Fichiers extraits Décompressés
2400825 2398481 2921640

Il y a bien une différence de 2344 bytes entres l’exécutable et les fichiers extrait qui corresponds à la FTOC, et une différence de 520815 bytes (en plus) pour l'ensemble des fichiers exécutable décompressés, soit un gain de presque 22%; à l'époque des modem, ce gain n'était pas négligeable…

Classification des Assets

Outre les fichiers exécutable, on retrouve :

fichiers nom/extention
20 .4SR
2 .BIN
1 ANIM.FCA
1 CHISEL.FCF
1 MAGICFNT.FCP
1 FONT8.FNT
20 .GFX
17 .PAL
1 CREDITS.PLL
5 .S3M
4 .TXT
8 .U
2 .UFF
back2root/reverse-engineering/future-crew-unreal-reverse-engineering-part-2.txt · Dernière modification : 2024/08/22 18:10 de frater