Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
ctf:2017:alexctf:reverse_250 [2017/02/06 20:04] diphome |
ctf:2017:alexctf:reverse_250 [2017/03/11 13:32] (Version actuelle) diphome |
||
---|---|---|---|
Ligne 6: | Ligne 6: | ||
</code> | </code> | ||
- | On lance le challenge, dans l'ennoncé ça parle de python, pas trop surpris de voir : **unvm_me.pyc** comme fichier. | + | On lance le challenge, dans l'enoncé ça parle de python, pas trop surpris de voir : **unvm_me.pyc** comme fichier. |
L'extension est .pyc, c'est du python compilé. Première chose, on essaye de le décompiler pour afficher | L'extension est .pyc, c'est du python compilé. Première chose, on essaye de le décompiler pour afficher | ||
Ligne 60: | Ligne 60: | ||
</code> | </code> | ||
- | Boucle for avec range à trois arguments | + | Boucle for avec range à trois arguments. |
On va itérer selon la taille de la chaine de caractères du flag par pas de 5. | On va itérer selon la taille de la chaine de caractères du flag par pas de 5. | ||
On comprend mieux pourquoi il fallait un multiple de 5. | On comprend mieux pourquoi il fallait un multiple de 5. | ||
Ligne 71: | Ligne 71: | ||
Définition d'une variable **s** | Définition d'une variable **s** | ||
- | La variable **s** va être égale au 5 caractères en partant de la ou se trouve l'itération **i** (on se rappelle qu'on itère en pas de 5. | + | La variable **s** va être égale au 5 caractères en partant de la où se trouve l'itération **i** (on se rappelle qu'on itère en pas de 5). |
__Etape 3 :__ | __Etape 3 :__ | ||
Ligne 79: | Ligne 79: | ||
</code> | </code> | ||
- | La dernière condition. On voit qu'ici on va convertir une string en int de base 16. | + | La dernière condition. On voit qu'ici on va convertir une string de format hexadécimal en int, c'est pour ça qu'on utilise l'argument 16 qui correspond à la base hexa pour la conversion. |
- | Cette string c'est le md5 (hex) des 5 caractères récupéré dans s juste avant. | + | Cette string qui va être convertie c'est le md5 au format hexadécimal des 5 caractères récupérés dans **s** juste avant. |
- | Enfin cette entier, doit être égal à celui correspondant dans la grosse liste du début avec des nombres de type long. | + | Enfin cet int, doit être égal à celui correspondant dans la grosse liste du début avec des nombres de type long. |
__En résumé :__ | __En résumé :__ | ||
- | Notre flag va être découpé en section de 5 caractères et pour chaque section le md5 de ces 5 caractères convertit en int de base 16 doit être égal a celui dans la liste correspondant (md5s). | + | Notre flag va être découpé en section de 5 caractères et pour chaque section le md5 de ces 5 caractères convertis en int de base 16 doit être égal à celui dans la liste correspondant (md5s). |
- | Chaque long dans la liste **md5s** correspond donc a 5 caractères du flag. | + | Chaque long dans la liste **md5s** correspond donc à 5 caractères du flag. |
Exemple pour mieux comprendre : | Exemple pour mieux comprendre : | ||
Ligne 98: | Ligne 98: | ||
</code> | </code> | ||
- | Il faut donc faire la route inverse, on se renseigne sur comment convertir un int de base 16 en string en python de préférence et on trouve une fonction sympas : | + | Il faut donc faire la route inverse, on se renseigne sur comment convertir un int en string en python de préférence et on trouve une fonction sympa : |
<code> | <code> |