diff --git a/README.md b/README.md index 1bae3f22569968dd7e514f37e95276a401f092d8..c8380bb016b745b683ca7322dd86ab6728fd6db3 100644 --- a/README.md +++ b/README.md @@ -7,14 +7,14 @@ - [2.1 Logiciels utilisés](#21-logiciels-utilisés) - [3. Creation du shellcode](#3-creation-du-shellcode) - [4. Injection du shellcode](#4-injection-du-shellcode) - - [4.1.1 Trouver le point d'entrée du programme](#411-trouver-le-point-dentrée-du-programme) - - [4.1.2 Trouver un code cave](#412-trouver-un-code-cave) - - [4.1.3 Rediriger le point d'entrée du programme vers le code cave](#413-rediriger-le-point-dentrée-du-programme-vers-le-code-cave) - - [4.1.4 Sauvegarder les registres et les flags](#414-sauvegarder-les-registres-et-les-flags) - - [4.1.5 Injecter le shellcode](#415-injecter-le-shellcode) - - [4.1.6 Retourner à l'adresse du point d'entrée du programme](#416-retourner-à-ladresse-du-point-dentrée-du-programme) - - [4.1.7 Generation du 1er patch](#417-generation-du-1er-patch) - - [4.1.8 Regler le crash](#418-regler-le-crash) + - [4.1 Trouver le point d'entrée du programme](#411-trouver-le-point-dentrée-du-programme) + - [4.2 Trouver un code cave](#412-trouver-un-code-cave) + - [4.3 Rediriger le point d'entrée du programme vers le code cave](#413-rediriger-le-point-dentrée-du-programme-vers-le-code-cave) + - [4.4 Sauvegarder les registres et les flags](#414-sauvegarder-les-registres-et-les-flags) + - [4.5 Injecter le shellcode](#415-injecter-le-shellcode) + - [4.6 Retourner à l'adresse du point d'entrée du programme](#416-retourner-à-ladresse-du-point-dentrée-du-programme) + - [4.7 Generation du 1er patch](#417-generation-du-1er-patch) + - [4.8 Regler le crash](#418-regler-le-crash) - [5 Resultat](#5-resultat) ## 2. Introduction @@ -56,26 +56,26 @@ Pour injecter le shellcode dans le programme de test, j'ai utilisé x64dbg. Ouvrire le programme de test dans x64dbg. -#### 4.1.1 Trouver le point d'entrée du programme +#### 4.1 Trouver le point d'entrée du programme J'ai d'abord trouver l'adresse du point d'entrée du programme : `00B2CA45`  -#### 4.1.2 Trouver un code cave +#### 4.2 Trouver un code cave J'ai ensuite, chercher l'adresse du debut du code cave (l'endroit ou on va injecter le shellcode). par exemple ici l'adresse est `00B57465`  -#### 4.1.3 Rediriger le point d'entrée du programme vers le code cave +#### 4.3 Rediriger le point d'entrée du programme vers le code cave Il faut maintenant modifier l'instruction de point d'entrée du programme pour qu'elle pointe vers le code cave. `call B2D0EF` -> `jmp E67465` -#### 4.1.4 Sauvegarder les registres et les flags +#### 4.4 Sauvegarder les registres et les flags Apres cela, j'ai ecrit quelque instructions afin de sauvegarder les registres et les flags dans la stack : `pushad` : sauvegarde les registres @@ -83,7 +83,7 @@ Apres cela, j'ai ecrit quelque instructions afin de sauvegarder les registres et  -#### 4.1.5 Injecter le shellcode +#### 4.5 Injecter le shellcode Ouvrire le fichier du shellcode avec HxD et copier le contenu. @@ -102,7 +102,7 @@ popad popfd ``` -#### 4.1.6 Retourner à l'adresse du point d'entrée du programme +#### 4.6 Retourner à l'adresse du point d'entrée du programme  @@ -110,7 +110,7 @@ Ajouter une instruction pour retourner à l'adresse du point d'entrée du progra  -#### 4.1.7 Generation du 1er patch +#### 4.7 Generation du 1er patch Générer le patch du programme avec le shellcode injecté. @@ -119,7 +119,7 @@ En premier lieu, j'ai essayé de trouver a quel moment le program crashait. Pour cela j'ai réutilisé x32dbg. En faisant des points d'arrêt sur les instructions `call` du shellcode je remarqué que tout le shellcode c'est bien exécuté apres le `call edp` ci dessous. -#### 4.1.8 Regler le crash +#### 4.8 Regler le crash 