Rainbow Table est un outil CLI développé en C permettant de retrouver un mot de passe en clair à partir de son hash SHA-256.
Le projet s'appuie sur la base de données RockYou afin de générer une table de correspondance entre les mots de passe et leurs hashs.
Son objectif est pédagogique : comprendre le fonctionnement d'une rainbow table, manipuler de grandes quantités de données en mémoire et approfondir la programmation bas niveau en C.
- Lecture d'un fichier de mots de passe (
rockyou.txt) - Calcul du hash SHA-256 avec OpenSSL
- Stockage des couples
hash → mot de passe - Recherche d'un ou plusieurs hashs
- Gestion des arguments en ligne de commande
- Gestion dynamique de la mémoire
- Utilisation d'une liste doublement chaînée
- Compilation avec Makefile
- Dockerisation du projet
rainbow/
├── main.c
├── sha256.c
├── sha256.h
├── list.c
├── list.h
├── Makefile
├── Dockerfile
├── README.md
├── LICENSE
└── .gitignore
main.c: point d'entrée et gestion des argumentssha256.c: calcul du SHA-256 avec OpenSSLlist.c: gestion de la liste doublement chaînéelist.h: structures et prototypesMakefile: compilation du projetDockerfile: exécution dans un conteneur
git clone <URL_DU_DEPOT>
cd rainbowmacOS (Homebrew)
brew install opensslUbuntu
sudo apt install libssl-devCompilation :
makeNettoyage :
make cleanRecompilation complète :
make reExécution :
./rainbow <fichier> <hash1> [hash2] [hash3] ...Exemple :
./rainbow rockyou.txt \
5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8Plusieurs hashs :
./rainbow rockyou.txt \
5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8 \
8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92| Argument | Obligatoire | Description |
|---|---|---|
fichier |
Oui | Fichier contenant la liste des mots de passe |
hash |
Oui | Un ou plusieurs hashs SHA-256 à rechercher |
-h, --help |
Non | Affiche l'aide du programme |
========== Rainbow Table ==========
Loading RockYou...
Loaded : 14344392 passwords
Searching...
Hash :
5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8
Password :
password
Le programme suit les étapes suivantes :
Lecture du fichier RockYou
↓
Calcul du SHA-256
↓
Création d'un nœud
↓
Ajout dans une liste doublement chaînée
↓
Recherche des hashs demandés
↓
Affichage du mot de passe trouvé
Construction :
docker build -t rainbow .Exécution :
docker run --rm \
-v $(pwd)/rockyou.txt:/app/rockyou.txt \
rainbow \
/app/rockyou.txt \
5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8- Arguments
argc/argv - Lecture de fichiers (
fopen,fgets) - Structures (
struct) - Pointeurs
- Allocation dynamique (
malloc,free) - Listes doublement chaînées
- Gestion de la mémoire
- Bibliothèque OpenSSL (API EVP)
- Compilation avec Makefile
- Utilisation d'une liste chaînée (recherche linéaire)
- Chargement complet de RockYou en mémoire
- SHA-256 uniquement
- Aucun multithreading
- Aucune sauvegarde persistante de la rainbow table
- Pas de génération de chaînes de réduction
- Optimisé pour un objectif pédagogique plutôt que pour les performances
- Ajouter une table de hachage pour accélérer les recherches
- Ajouter une barre de progression lors du chargement
- Optimiser la consommation mémoire
- Ajouter des tests unitaires
- Améliorer la gestion des erreurs
- Support SHA-1
- Support MD5
- Export des résultats
- Ajout de statistiques
- Optimisation des performances
- Génération de véritables Rainbow Tables
- Chaînes de réduction
- Sauvegarde / chargement des tables
- Multithreading
- Interface Web
- API REST
Rainbow Table est un projet pédagogique.
Il permet de comprendre le fonctionnement des fonctions de hachage, des structures de données en C et des techniques utilisées dans certaines attaques par dictionnaire.
Il doit être utilisé uniquement dans un cadre légal, pédagogique ou de recherche.
Les retours, propositions et contributions sont les bienvenus.
Les améliorations peuvent être proposées avec :
- une Issue GitHub
- une Pull Request
- une proposition de nouvelle fonctionnalité
Ce projet est distribué sous licence MIT.
Consultez le fichier LICENSE pour plus d'informations.