commit f4740594fa6c579bc2fe7638a7c4121b12929d0b
Author: Pierre Ferreira
Date: Wed Oct 11 00:50:50 2023 +0200
:see_no_evil::see_no_evil::see_no_evil:
diff --git a/Enonce.pdf b/Enonce.pdf
new file mode 100644
index 0000000..4cffcff
Binary files /dev/null and b/Enonce.pdf differ
diff --git a/HowRHWork.py b/HowRHWork.py
new file mode 100644
index 0000000..a45c00a
--- /dev/null
+++ b/HowRHWork.py
@@ -0,0 +1,68 @@
+import random
+from colorama import Fore, Style, init
+
+
+# Fonction pour afficher la mémoire actuelle
+def afficher_memoire(memoire, lastEditedLine):
+ for i, ligne in enumerate(memoire):
+ if lastEditedLine != None and i == lastEditedLine:
+ print(Fore.RED + f"Ligne {i + 1}: {' '.join(map(str, ligne))}" + Fore.WHITE)
+ else :
+ print(Fore.WHITE + f"Ligne {i + 1}: {' '.join(map(str, ligne))}")
+
+# Fonction pour générer une mémoire aléatoire
+def generer_memoire():
+ return [[random.randint(0, 1) for _ in range(10)] for _ in range(10)]
+
+# Fonction pour simuler un coup de marteau
+def coup_de_marteau(memoire):
+ if random.randint(1, 20) == 1:
+ ligne_modifiee = random.randint(0, 9)
+ bit_modifie = random.randint(0, 9)
+ memoire[ligne_modifiee][bit_modifie] = 1 - memoire[ligne_modifiee][bit_modifie]
+ return ligne_modifiee
+ return None
+
+# Fonction principale
+def main():
+ lastEditedLine = None
+ memoire = generer_memoire()
+ print("Bienvenue dans le jeu de la mémoire !")
+
+ while True:
+ print("\nMenu:")
+ print("1. Afficher la mémoire")
+ print("2. Coup de marteau")
+ print("3. Submit")
+ print("4. Quitter")
+
+ choix = input("Choisissez une option (1/2/3/4): ")
+
+ if choix == '1':
+ afficher_memoire(memoire, lastEditedLine)
+ elif choix == '2':
+ ligne_modifiee = coup_de_marteau(memoire)
+ if ligne_modifiee is not None:
+ #print(f"Un coup de marteau a modifié la ligne {ligne_modifiee + 1}.")
+ lastEditedLine = ligne_modifiee
+ elif choix == '3':
+ ligne_guess = int(input("Entrez le numéro de la ligne que vous pensez avoir été modifiée (1-10) : ")) - 1
+ if ligne_guess >= 0 and ligne_guess < 10:
+ #if memoire[ligne_guess] == generer_memoire()[ligne_guess]:
+ if lastEditedLine == ligne_guess :
+ print(Fore.GREEN + "Félicitations ! Vous avez gagné !"+ Fore.WHITE)
+ break
+ else:
+ print(Fore.CYAN + "Désolé, la ligne que vous avez choisie n'a pas été modifiée."+ Fore.WHITE)
+ else:
+ print(Fore.RED + "Numéro de ligne invalide. Veuillez choisir un numéro de ligne entre 1 et 10."+ Fore.WHITE)
+ elif choix == '4':
+ print("Au revoir !")
+ break
+ else:
+ print("Option invalide. Veuillez choisir une option valide (1/2/3/4).")
+
+if __name__ == "__main__":
+ main()
+
+
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..3b612e7
--- /dev/null
+++ b/README.md
@@ -0,0 +1,10 @@
+# TP ROWHAMMER
+
+Bonjour à tous !
+
+Aujourd'hui, vous serez dans la peau de véritable Hacker, près a utiliser l'attaque Rowhammer pour parvenir à leur fin. Je ne vous en dis pas plus !
+Le TP rédigé est disponible ici : ``./Enonce.pdf``
+
+Toutes les autres informations sont disponibles sur ce repos, dépêchez vous, vous avez **30 minutes** !
+
+---
\ No newline at end of file
diff --git a/Top_Secret/CorruptedCode.c b/Top_Secret/CorruptedCode.c
new file mode 100644
index 0000000..144bca9
--- /dev/null
+++ b/Top_Secret/CorruptedCode.c
@@ -0,0 +1,61 @@
+#include
+#include
+#include
+#include
+
+#define NUM_ROWS 1024
+#define NUM_ITERATIONS 1000000
+
+// Fonction pour accéder à une ligne de mémoire et provoquer "rowhammer".
+void accessRow(uint64_t* memory, int row) {
+
+ // Pour chaque itération, nous faisons un XOR sur la ligne de la mémoire sélectionné avec 1.
+ // Rappel : XOR en c se fait avec le symbole " ^ "
+ /***/
+}
+
+int main() {
+
+ //Nous utiliserons le type "uint64_t" qui signifie unsigned long long, un type optimal pour la mémoire.
+ // Allocation de la mémoire (malloc)
+
+ /*uint64_t* memory =*/ /***/
+
+
+ printf("Exploitation de la vulnérabilité Rowhammer...\n");
+
+ // Initialiser le générateur de nombres aléatoires.
+ srand(time(NULL));
+
+ /// Exploiter la vulnérabilité Rowhammer sur une ligne de mémoire aléatoire.
+
+ // On sélectionne une ligne aléatoire en mémoire > NUM_ROWS, avec la fonction rand() en c
+
+ /*int randomRow = */ /***/
+
+ // Appel de la fonction accessRow
+ accessRow(memory, randomRow);
+
+
+ /// Vérification des erreurs de bits dans la ligne sélectionnée.
+ int bitErrors = 0;
+
+ // On vérifie que pour chaque itération
+ for (int i = 0; i < NUM_ITERATIONS; i++) {
+ if (memory[randomRow] != 0) {
+ bitErrors++;
+ }
+ }
+
+ // On nettoie la mémoire et libère les ressources.
+ /***/
+
+ if (bitErrors > 0) {
+ printf("Oui, un bit a flipé en mémoire.\n");
+ } else {
+ printf("Non, aucun bit n'a flipé en mémoire.\n");
+ }
+
+ return 0;
+}
+