fix: incompatibilities with new hugo version

This commit is contained in:
Yorick Barbanneau 2025-01-16 22:08:24 +01:00
parent 44404f4034
commit b5179b97ac
3 changed files with 24 additions and 24 deletions

View file

@ -3,8 +3,6 @@ title: "Sécurité logicielle : TD 9 Hackme"
date: 2023-04-14
tags: ["Assembleur", "x86"]
categories: ["Sécurité logicielle", "TD"]
author:
- Yorick Barbanneau
---
## Level 0
@ -15,7 +13,7 @@ Le programme demande à l'utilisateur une saisie, lorsque je rentre un texte, i
répond `Nope`:
```
./hackme
./hackme
This is level 0, welcome! What do you have to say?
bonjour
Nope!
@ -66,14 +64,14 @@ GCC: (Debian 8.3.0-6) 8.3.0
```
`IAmSuperSecure` parait relativement intéressant. Mais à ce stade rien n'est
sûr. Mais juste comme ça essayons tout de même un `lstrace` sur notre programme:
sûr. Mais juste comme ça essayons tout de même un `lstrace` sur notre programme:
```
ltrace ./hackme
ltrace ./hackme
__libc_start_main(0x80490a0, 1, 0xffb45f24, 0x8049590 <unfinished ...>
wprintf(0x804a064, 0xf7f988cb, 0xf7c1ca2f, 0xf7f804a0This is level 0, welcome! What do you have to say?
) = 51
getline(0xffb45e18, 0xffb45e1c, 0xf7e1d620, 0xf7c76ca5MyBadPassword
getline(0xffb45e18, 0xffb45e1c, 0xf7e1d620, 0xf7c76ca5MyBadPassword
) = 14
strcmp("MyBadPassword", "IAmSuperSecure") = 1
wprintf(0x804a048, 0xf7fbca40, 0, 0x80492c2Nope!
@ -143,7 +141,7 @@ Essayons donc de comprendre comment. Recommençons l'exécution avec un `watch`
la chaine contenue sur le programme :
```
(gdb) wa * (char*)0x804d030
(gdb) wa * (char*)0x804d030
Hardware watchpoint 1: * (char*)0x804d030
[...]
@ -171,10 +169,10 @@ Dump of assembler code for function z:
0x0804932f <+15>: nop
0x08049330 <+16>: sub $0x9,%eax ; retire 0x9 à %eax
0x08049333 <+19>: add $0x1,%edx ; incrémente %edx
0x08049336 <+22>: mov %al,-0x1(%edx) ; remets le caractère déchiffré
0x08049336 <+22>: mov %al,-0x1(%edx) ; remets le caractère déchiffré
; dans sa chaine
=> 0x08049339 <+25>: movzbl (%edx),%eax ; copie le caractère courant
@ -257,7 +255,7 @@ chaque caractère.
\pagebreak
Pour déchiffrer le mot de passe écrit dans le programme, j'ai écris un script
Pour déchiffrer le mot de passe écrit dans le programme, j'ai écris un script
Python :
```python
@ -315,7 +313,7 @@ End of assembler dump.
```
Voici deux comparaisons intéressantes. La première s'effectue sur les 4 octets à
l'adresse contenue dans `%eax`. La suivante sur le contenu à l'adresse de
l'adresse contenue dans `%eax`. La suivante sur le contenu à l'adresse de
`%eax + 0x4`.
\pagebreak
@ -363,7 +361,7 @@ technique du `ctrl+c` puis `bt`:
#7 0x080490d7 in main ()
```
C'est la fonction `aa()` qui appelle `r()` (fonction de saisie), intéressons
C'est la fonction `aa()` qui appelle `r()` (fonction de saisie), intéressons
nous à elle en la désassemblant :
```
@ -402,7 +400,7 @@ End of assembler dump.
```
Cette fonction appelle une autre : `bb()`. C'est elle qui semble se charger de
la vérification de la saisie. Avant de l'étudier, voyons comment `aa()` met les
la vérification de la saisie. Avant de l'étudier, voyons comment `aa()` met les
éléments en place avant de l'appeler :
* mets l'adresse vers la zone mémoire contenant la saisie utilisateur dans
@ -604,7 +602,7 @@ la table ascii, utilisons les mathématiques:
\nonumber\text{donc } 0 \oplus A \oplus A \oplus A \oplus A \oplus B = B
\end{gather}
Ansi saisir un même caractère un nombre pair de fois suivi de `C`, alors c'est
Ansi saisir un même caractère un nombre pair de fois suivi de `C`, alors c'est
gagné :
```