Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.
hackingweek_2014:crypto:crypto3 [2014/03/04 19:45] F4b |
hackingweek_2014:crypto:crypto3 [2017/04/09 15:33] (Version actuelle) |
||
---|---|---|---|
Ligne 8: | Ligne 8: | ||
L'image est un png, donc sans compression, de plus, lena.png est souvent utilisée comme exemple en stéganographie pour le lsb. | L'image est un png, donc sans compression, de plus, lena.png est souvent utilisée comme exemple en stéganographie pour le lsb. | ||
- | On commence par rechercher l'image originale en uploadant sur google image l'image (1 seul résultat) : | + | On commence par rechercher l'image originale en l'uploadant sur google image (1 seul résultat) : |
{{:hackingweek_2014:crypto:lenaoriginal.png?200|}} | {{:hackingweek_2014:crypto:lenaoriginal.png?200|}} | ||
Ligne 29: | Ligne 29: | ||
* etc | * etc | ||
- | petit script qui récupère les 4 bits de poids faible de chaque couleur : | + | petit script qui récupère les 4 bits de poids faible de chaque couleur et les rassemble 2 par 2 : |
<code Python> | <code Python> | ||
Ligne 35: | Ligne 35: | ||
# encoding: utf-8 | # encoding: utf-8 | ||
- | import os | ||
import Image | import Image | ||
import argparse | import argparse | ||
Ligne 105: | Ligne 104: | ||
Wrong input | Wrong input | ||
- | Il faut reverse l'ELF pour savoir quel est l'entrée attendue | + | Il faut reverse l'ELF pour savoir quel est l'entrée attendue. |
On remarque dans la string suivante dans le bin : | On remarque dans la string suivante dans le bin : | ||
############ #@# # ## # # # ## ##### # ## ## ##### #### # # ## # # ### ## # # ## ### #$# ############ | ############ #@# # ## # # # ## ##### # ## ## ##### #### # # ## # # ### ## # # ## ### #$# ############ | ||
Le binaire place un curseur au niveau du '@', et la victoire est assurée si le curseur atteint le '$'. L'entrée passée permet de se déplacer dans la chaine. Selon le caractère rencontré, le curseur est déplacé d'un offset particulier : | Le binaire place un curseur au niveau du '@', et la victoire est assurée si le curseur atteint le '$'. L'entrée passée permet de se déplacer dans la chaine. Selon le caractère rencontré, le curseur est déplacé d'un offset particulier : | ||
- | - caractère 'n' : offset -12 | + | * caractère 'n' : offset -12 |
- | - caractère 's' : offset +12 | + | * caractère 's' : offset +12 |
- | - caractère 'e' : offset +1 | + | * caractère 'e' : offset +1 |
- | - caractère 'w' : offset -1 | + | * caractère 'w' : offset -1 |
Tout autre caractère fait sortir du programme. De même, on ne continue que si le curseur se trouve sur un ' ', un '#' renvoyant à la fin du programme. | Tout autre caractère fait sortir du programme. De même, on ne continue que si le curseur se trouve sur un ' ', un '#' renvoyant à la fin du programme. | ||
- | On devine alors (d'après les nsew => North / South / East / West) que l'on est en présence d'un labyrinthe de 11x11 cases. | + | On devine alors (d'après les nsew => North / South / East / West, et les offsets de déplacement) que l'on est en présence d'un labyrinthe de 11x11 cases. |
(j'ai remplacé les # par des blocks pour la lisibilité) | (j'ai remplacé les # par des blocks pour la lisibilité) | ||
Ligne 133: | Ligne 133: | ||
███████████ | ███████████ | ||
- | après avoir visualisé le chemin, on peut essayer de voir sous quel format entrer la réponse : | + | après avoir visualisé le chemin, on peut entrer la réponse : |
- | + | <code> | |
- | * down right right up right right down etc... | + | seeneessswwwwwwsssseenneessees |
- | * drrurrd... (premieres lettres du précédent concat) | + | </code> |
- | * south east east north east east south etc... | + | |
- | * seeneessswwwwwwsssseenneessees | + | |
- | + | ||
- | le 4e test ouvre un shell /bin/sh, c'est le flag | + |