Skip to content
Snippets Groups Projects
NGUYEN Alain's avatar
NGUYEN Alain authored
b84f4ea0

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

  1. Importer le dépôt avec la commande git clone
  2. Construire une image Docker à partir du Dockerfile dans le répertoire courant (notre image s'appelera "anguyen_projet_c") : sudo docker build -t anguyen_projet_c .
  3. Lancer notre image et y accéder en ouvrant un terminal : sudo docker run -i -t anguyen_projet_c bash
  4. Compiler ripper.c : gcc ripper.c -o ripper -lssl -lcrypto
  5. Notre binaire est prêt. Voir partie Usage ci-dessous.

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 : ./ripper -g rockyou.txt

Pour le mode LOOKUP :

  • La commande est : ./ripper -l [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_demo.txt" est placé dans le répertoire du projet. Cependant, il peut avoir différent nom, il suffira ainsi de mettre le bon nom en 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 : ./ripper -l file_input_demo.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_demo.txt)