Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente | Dernière révision Les deux révisions suivantes | ||
ctf:2017:alexctf:reverse_250 [2017/02/07 23:57] diphome |
ctf:2017:alexctf:reverse_250 [2017/03/11 13:25] 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 80: | Ligne 80: | ||
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 en int de base 16. | ||
- | Cette string c'est le md5 au format hexadécimal des 5 caractères récupéré dans **s** juste avant. | + | Cette string c'est le md5 au format hexadécimal des 5 caractères récupérés dans **s** juste avant. |
Enfin cet entier, doit être égal à celui correspondant dans la grosse liste du début avec des nombres de type long. | Enfin cet entier, doit être égal à celui correspondant dans la grosse liste du début avec des nombres de type long. | ||
Ligne 86: | Ligne 86: | ||
__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 de base 16 en string en python de préférence et on trouve une fonction sympa : |
<code> | <code> |