← Tous les projets d'école

terminé2025

Asset Engine : HexView, SafeReader, CryptFile

Trois exercices de C et C++ sur les fichiers binaires : un visualiseur hexadécimal, un lecteur qui valide un format maison et un chiffrement réversible octet par octet

C · C++ · Fichiers binaires · Checksum · XOR · Solo

GitHub ↗

Trois petits programmes écrits pendant la semaine « Asset Engine » de GTech 3, pour apprendre à lire, valider et transformer des fichiers octet par octet.

Contexte

Un exercice par jour, d'après les sujets fournis (J1 « HexView », J2 « SafeReader ») : lire un fichier binaire quelconque, puis définir un petit format avec en-tête et somme de contrôle et le lire de façon défensive, sans jamais faire confiance au fichier. Travail individuel, du 20 au 23 octobre 2025.

Ce que j'y ai fait

HexView en deux versions (C avec malloc/fread, puis C++ avec std::vector et une classe), SafeReader avec ses outils de génération et de corruption, puis CryptFile. Les trois sont ensuite regroupés dans ExoComplet, un fichier autonome par exercice (menu intégré pour SafeReader et CryptFile), avec un README et un script de compilation.

Liens

Les trois exercices

JourProgrammeContenu
J1HexViewDump d'un fichier en 16 octets par ligne (offset, hexadécimal, ASCII), sauvegarde du dump en .txt, modification d'un octet à un offset, sauvegarde du fichier modifié
J2SafeReaderGénération, validation et corruption de fichiers .safe
J3CryptFileChiffrement et déchiffrement d'un fichier avec une clé texte, test de symétrie

Format .safe (J2)

HEADER (16 octets)
  magic    : 4 octets (0x45464153, « SAFE »)
  version  : 4 octets (1)
  dataSize : 4 octets
  checksum : 4 octets (XOR puis rotation à gauche d'un bit, octet par octet)
DATA (taille variable)

Le lecteur vérifie la signature, la version, la taille déclarée contre la taille réelle, puis le checksum. L'outil de corruption casse un champ à la fois pour vérifier que chaque erreur est détectée : magic, version, taille, checksum, un octet de données, ou fichier tronqué.

Chiffrement (J3)

  • Chiffrement : rotation de 3 bits à gauche, puis XOR avec l'octet de clé (((b << 3) | (b >> 5)) ^ key).
  • Déchiffrement : XOR, puis rotation inverse.
  • La clé texte est répétée sur toute la longueur du fichier.
  • Le test de symétrie chiffre, déchiffre et compare le résultat au fichier d'origine.

Deux versions de HexView

  • C classique : fopen, fread, fwrite, malloc, free, typedef struct.
  • C++ : classe HexView, std::vector, std::ifstream / std::ofstream, remplacement d'un bloc d'octets.

Stack

TechRôle
C / C++17Langage
g++ / Visual StudioCompilation (compile_all.sh fourni)