Outils pour utilisateurs

Outils du site


back2root:tutoriaux:future-crew-unreal-reverse-engineering-part-1

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
back2root:tutoriaux:future-crew-unreal-reverse-engineering-part-1 [2021/05/02 23:25]
frater créée
back2root:tutoriaux:future-crew-unreal-reverse-engineering-part-1 [2021/09/02 17:35] (Version actuelle)
frater [Deep dive dans le fichier]
Ligne 1: Ligne 1:
-====== Tutoriaux : Future Crew Unreal Reverse Engineering - Part 1 ======+====== Future Crew Unreal Reverse Engineering - Part 1 ======
  
 ===== Intro ===== ===== Intro =====
Ligne 7: Ligne 7:
 Cette démo et surtout la seconde a permis a ce groupe de devenir légendaire... Pour le 20eme anniversaire de "Second Reality" en 2013 (la séquelle d'unreal) le lead coder a libéré sur github le code de cette légende (https://github.com/mtuomi/SecondReality), et ce dernier est abondamment commenté depuis (http://fabiensanglard.net/second_reality/index.php par exemple). Cette démo et surtout la seconde a permis a ce groupe de devenir légendaire... Pour le 20eme anniversaire de "Second Reality" en 2013 (la séquelle d'unreal) le lead coder a libéré sur github le code de cette légende (https://github.com/mtuomi/SecondReality), et ce dernier est abondamment commenté depuis (http://fabiensanglard.net/second_reality/index.php par exemple).
  
-En farfouillant le net, je me suis rendu compte qu'il n'existait rien sur leur "premiere" démo... Je me suis donc attaqué à ce monument de la scene...+{{youtube>pLJhtefcoPE?medium}}
  
-La démo arrive sur un seul .exe de 2.400.825 bytes et etait distribuée dans un fichier zip de 1.337.312 bytes (https://files.scene.org/view/demos/groups/future_crew/demos/unreal11.zip), cela peut faire sourire aujourd'hui, mais à l'époque, c'était beaucoup, elle etait diffusée via des modem qui downloadaient à +/- 2 KB/s (oui 2 kilobytes par secondes) ce qui fait qu'il fallait près de 11 minutes pour télécharger cette démo (vous pouvez comparer votre vitesse de download avec le lien sur scene.org.+En farfouillant le net, je me suis rendu compte qu'il n'existait rien sur leur "première" démo... Je me suis donc attaqué à ce monument de la scène... 
 + 
 +La démo arrive sur un seul .exe de 2.400.825 bytes et était distribuée dans un fichier zip de 1.337.312 bytes (https://files.scene.org/view/demos/groups/future_crew/demos/unreal11.zip), cela peut faire sourire aujourd'hui, mais à l'époque, c'était beaucoup, elle était diffusée via des modem qui downloadaient à +/- 2 KB/s (oui 2 kilobytes par secondes) ce qui fait qu'il fallait près de 11 minutes pour télécharger cette démo (vous pouvez comparer votre vitesse de download avec le lien sur scene.org.
  
 ce fichier .exe contient a démo, la musique ET les assets graphique. ce fichier .exe contient a démo, la musique ET les assets graphique.
Ligne 15: Ligne 17:
 ===== Deep dive dans le fichier ===== ===== Deep dive dans le fichier =====
  
-En regardant le code de second reality et en lisant l'excélente review de fabien, je me suis dit que unreal devait avoir la même structure. j'ai donc jeté un oeil sur l'exe via un petit utilitaire 'unp.exe' (http://unp.bencastricum.nl/) juste pour voir... et bingo... le fichier executable n'est pas de 2 mb, mais plutot de 25kb il s'agit donc bien d'un loader, voir même d'un DIS (Demo Interrupt Server), comme dans le cas de Second Reality.+En regardant le code de second reality et en lisant excellente review de Fabien, je me suis dit que unreal devait avoir la même structure. j'ai donc jeté un oeil sur l'exe via un petit utilitaire 'unp.exe' (http://unp.bencastricum.nl/) juste pour voir... et bingo... le fichier exécutable n'est pas de 2 mb, mais plutôt de 25kb il s'agit donc bien d'un loader, voir même d'un DIS (Demo Interrupt Server), comme dans le cas de Second Reality
 + 
 +{{ :tutoriaux:unp.png?nolink }} 
 + 
 +Dans Second Reality, les parties et assets ne sont décrit que dans une série d'offset hardcodé dans le loader (c'est ce que nous apprends le code source du loader de second reality) et actuellement, il m'est impossible d'obtenir les sources de "unreal.exe", donc en désespoir de cause, je jettes un petit coup d’œil sur le fichier en mode hexa; nous savons déjà que les 26315 (+le header DOS de 32 bytes) premiers octets contiennent le loader et sans doute également le DIS et sont donc sans intérêt... les données (musiques, graphiques, etc) commencent après l'offset 26315+32, soit 26347, ou 0x66EB en hexa cette valeur va réapparaître comme par miracle plus tard.
  
-Dans Second Realityles parties et assets ne sont décrit que dans une série d'offset hardcodé dans le loader (c'est ce que nous apprends le code source du loader de second reality) et actuellement, il m'est impossible d'obtenir les sources de "unreal.exe", donc en désepoir de causeje jette un petit coup d'oeil sur le fichier en mode hexa; nous savons déjà que les 26315 (+le header DOS de 32 bytes) premiers octets contiennent le loader et sans doute également le DIS et sont donc sans intéret... les données (musiques, graphiques, etccommencent après l'offset 26315+32, soit 26347, ou 0x66EB en hexa cette valeur va réapparaitre comme par miracle plus tard.+Tout en parcourant le fichierj'ai vu des chaînes de caractère, notamment "Scream Tracker V3.0... (offset 0x1430), en parcourant tout le fichier, je suis arrivé à la fin du fichier,et une série de "noms" de fichiers sont apparusj'en ai compté 97 en tout. On remarque ci-dessous que le fichier contient également des sous exécutables (sans doute les sous-parties de la démo).
  
-Tout en parcourant le fichier, j'ai vu des chaines de caractère, notament "Scream Tracker V3.0... (offset 0x1430), en parcourant tout le fichier, je suis arrivé à la fin du fichier,et une série de "noms" de fichiers sont apparus, j'en ai compté 97 en tout. On remarque ci-dessous que le fichier contient également des sous executables (sans doute les sous-parties de la démo).+{{ :tutoriaux:pattern.png?nolink }}
  
 Il y a aussi une pattern très claire 16 octets pour le nom de fichier, et de 2 mots de 32 bits, soit un "bloc" de 24 octets au total que l'on peut décrire comme ceci: Il y a aussi une pattern très claire 16 octets pour le nom de fichier, et de 2 mots de 32 bits, soit un "bloc" de 24 octets au total que l'on peut décrire comme ceci:
Ligne 33: Ligne 39:
  
 Toutefois, il y a un dernier "unsigned long" à la fin (0x00249911) qui est assez finalement assez simple à déduire; il s'agit d'un pointeur d'offset sur le début de la table de fichier: Toutefois, il y a un dernier "unsigned long" à la fin (0x00249911) qui est assez finalement assez simple à déduire; il s'agit d'un pointeur d'offset sur le début de la table de fichier:
 +
 +{{ :tutoriaux:directory.png?nolink }}
  
 Sauf que à l'offset pointé, il y a 3 unsigned long: Sauf que à l'offset pointé, il y a 3 unsigned long:
Ligne 96: Ligne 104:
 Ce code devrait nous permettre de "voir" le répertoire dans la démo... Ce code devrait nous permettre de "voir" le répertoire dans la démo...
  
-L'extraction des fichiers ne devrait poser AUCUN problème à ce niveau, il suffit de créer un fichier avec le nom fname, de se déplacé à l'offset spécifié dans le fichier source, et de copier size octets dans ce ficihier.+L'extraction des fichiers ne devrait poser AUCUN problème à ce niveau, il suffit de créer un fichier avec le nom fname, de se déplacé à l'offset spécifié dans le fichier source, et de copier size octets dans ce fichier.
  
 Prochaine étape, l'analyse des assets... Prochaine étape, l'analyse des assets...
Ligne 111: Ligne 119:
   * Référence de la démo : http://www.pouet.net/prod.php?which=1274   * Référence de la démo : http://www.pouet.net/prod.php?which=1274
   * La démo Unreal de future Crew : https://files.scene.org/view/demos/groups/future_crew/demos/unreal11.zip   * La démo Unreal de future Crew : https://files.scene.org/view/demos/groups/future_crew/demos/unreal11.zip
-    unp : http://unp.bencastricum.nl/ +  * unp : http://unp.bencastricum.nl/  
 +     
 +<nspages back2root/tutoriaux -simpleList -h1 -exclude:start -textPages="Tutoriaux disponible">
back2root/tutoriaux/future-crew-unreal-reverse-engineering-part-1.1619990731.txt.gz · Dernière modification: 2021/05/02 23:25 de frater