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
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
- 3---Asset-Engine (code sur la branche
Kiki)
Les trois exercices
| Jour | Programme | Contenu |
|---|---|---|
| J1 | HexView | Dump 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é |
| J2 | SafeReader | Génération, validation et corruption de fichiers .safe |
| J3 | CryptFile | Chiffrement 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
| Tech | Rôle |
|---|---|
| C / C++17 | Langage |
| g++ / Visual Studio | Compilation (compile_all.sh fourni) |