Skip to content
Snippets Groups Projects
NGUYEN Alain's avatar
NGUYEN Alain authored
a02d3029
Name Last commit Last update
Dockerfile
README.md
file_input_demo.txt
ripper.c

Projet C Ripper

Projet en C. Professeur : M. Cousi

Description

Le projet ripper est un programme permettant de :

  1. Générer des condensats (mode GENERATE) à partir d'un fichier texte
  2. Rechercher parmi une liste de condensats dans une table de correspondance

Les fonctionnalités du programme :

  • Générer une liste de condensats (Md5) à partir d'un fichier texte en clair. Le programme génèrera les résultats dans un fichier nommé "output.txt". Il n'est pas possible pour le moment de choisir le nom de ce fichier.
  • Retrouver une liste de clair à partir d'un fichier en entrée. Le programme effectuera la recherche à partir du fichier généré précedemment (output.txt)
  • Libération totale de la mémoire après utilisation du programme (outil utilisé : valgrind)

Algorithme utilisé pour le mode de recherche (lookup) :

Lors de la recherche, chaque élément (condensat:clair) est enregistré en mémoire dans une structure. Une structue est ensuite destiné à être stocké dans un tableau de pointeurs. Afin de répartir correctement les éléments dans le tableau, leur index est généré à l'aide de l'algorithme de Jenkins (https://en.wikipedia.org/wiki/Jenkins_hash_function). Lors d'une collision (deux elements possèdant le même index), nous stokons les éléments les uns à la suite des autres grâce à une liste chaînée.

Pour plus de détails : https://en.wikipedia.org/wiki/Hash_table

Installation

Le projet entier a été intégré dans une image docker. L'image porte le nom de anguyen_projet_c_docker.tar

Il suffira l'utilisateur de charger l'image à travers la commande : sudo docker load -i anguyen_projet_c_docker.tar

Une fois l'image chargée, l'utilisateur devra lancer un shell : sudo docker run -i -t anguyen_projet_c_docker

L'utilsateur aura directement accès au contenu du projet.

IMPORTANT : Une fois entré dans le répertoire de travail, le binaire ripper présent N'EST PAS FONCTIONNEL. Il faut donc :

  • Entrer dans le répertoire src (cd src)
  • Compiler ripper.c avec la commande : gcc ripper.c -o ripper -lssl -lcrypto
  • Une fois compilé, voir la partie Usage ci-dessous

Note : Le code source du programme est également diponible indépendamment de l'image Docker (dans le répertoire src de ce dépôt).

Usage

Pour le mode GENERATE :

  • La commande est ./ripper -g [fichier_source] (ne pas de mettre de guillemets) où [fichier_source] est le fichier dont on souhaite générer les condendats. Ces derniers seront disponibles dans un fichier "output".txt
  • Un échantillon de mots en clair est placé dans le répertoire du projet (rockyou.txt)
  • Exemple (aller dans le répertoire src pour utiliser le bon binaire) : ./ripper -g ../rockyou.txt

Pour le mode LOOKUP :

  • La commande est : ./ripper -g [fichier_source] (ne pas de mettre de guillemets) où [fichier_source] est le fichier composé de condensats dont on souhaite retrouver le(s) clair(s).

  • Un échantillon "file_input.txt" est placé dans le répertoire du projet. Cependant, il peut avoir différent nom, il suffira ainsi de mettre le bon nom dans l'argument

  • Le fichier sur lequel s'effectuera sera automatiquement le fichier "output.txt" généré précedemment

  • Il faut respecter le format du fichier en entrée : un condensat par ligne

  • Exemple (aller dans le répertoire src pour utiliser le bon binaire) : ./ripper -l ../file_input.txt

Performances

Fichier utilisé : rockyou.txt (environ 14 millions de lignes)

  • Mode Generate : Moins de 30 secondes
  • Mode Lookup : Moins de 10 secondes (libération mémoire inclus, environ 2 secondes)
  • Libération totale de la mémoire après utilisation du programme (valgrind ./ripper -l ../file_input.txt)