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:19] ganapati |
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 : | ||
| ############ #@# # ## # # # ## ##### # ## ## ##### #### # # ## # # ### ## # # ## ### #$# ############ | ############ #@# # ## # # # ## ##### # ## ## ##### #### # # ## # # ### ## # # ## ### #$# ############ | ||
| - | en découpant la chaine tous les 11 chars (premiere série de #), on vois une sorte de labyrinthe. on devine que le @ correspond au joueur et le $ à l'arrivée. | + | 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 's' : offset +12 | ||
| + | * caractère 'e' : 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. | ||
| + | |||
| + | 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 125: | 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... | + | seeneessswwwwwwsssseenneessees |
| - | * drr... (premieres lettres du précédent concat) | + | </code> |
| - | * south east east... | + | |
| - | * see... (premieres lettres du précédent concat) | + | |
| - | + | ||
| - | le 4e test ouvre un shell /bin/sh, c'est le flag | + | |