Principe:
Décompiler un script Python pyc, le lire et reconstituer l'algorithme de chiffrement du mot de passe pour retrouver ledit mot de passe
Infos (cf menu latéral):
🚩 Flaggué! +992 points gagnés —
💾 Téléchargez les fichiers du challenge
404CTF{R34D1NG_PYTH0N_BYT3C0D3}
Le challenge
Testons
pyc (Python compilé) et on confirme qu'il marche bien
/tmp et l'exécute?" mais non, ce n'est pas le casDécompiler python avec Python
Uncompyle
uncompyle permet çaIl me semble toujours plus logique d'utiliser un "décompilateur" proche du langage d'origine. S'il faut "décompiler" du Python, il existe sûrement des paquets Python ou liés à Python pour ça. De même, s'il s'était agit de PHP, il y aurait sûrement eu des fonctions de PHP ou des paquets liés à PHP permettant de faire cette décompilation
Je hais Python
Pycdc
pyc du challenge (enfin, sur une copie, pour ne pas altérer l'original du challenge)
match issue de Python 3.10, tout va bienMatch
pycdas de pycdc, on récupère un fichier avec les instructions, les variables, et tout ce qu'il faut
MATCH_SEQUENCE est, cette fois, bien comprise et décompiléePython assembleur
La plupart des instructions sont toutefois compréhensible facilement, comme COMPARE_OP ou LOAD_CONST
mdp[i] suit l'algorithme code[i] = (5*ord(mdp[i])) XOR BINARY_TO_DECIMAL_INT(key[(30-i)%LENGTH(key)])Pour arriver à cela, le mieux est probablement de prendre une feuille de papier, et de "simuler" ce que font les instructions avec la stack mémoire pour saisir la logique de l'algorithme.
Flag
Flag: 404CTF{R34D1NG_PYTH0N_BYT3C0D3}