M30W Vault Tech
Flag: CYBN{0n_d1t_ch1ffr3m3nt_aHahAh_c3stM4rr4nt}
Challenge
Solution
Analyse statique
Décompilation avec Ghidra. Dans l'entry, on trouve la fonction FUN_00402800 qui est le main
J'en profite pour renommer les paramètres de main pour la lisibilité
On trouve une partie lecture du fichier, on peut en déduire le nom des variables. De plus, quand on est en mode decryption, on skip les 16 premiers octets du fichier :
Génération du secret
En dessous, on peut voir quelque chose qui ressemble à de la génération de clé :
Commençons par FUN_00402370, elle calcule la taille d'une chaîne de caractère, on la renomme en get_size.
Ensuite FUN_00402720, elle prend donc en paramètre le password et sa taille. Elle semble générer un secret. Les 8 premiers octets sont générés par FUN_004026c0 (elle fait un sha1 des 2 premiers caractères du password mais en s'en fou au final, donc je skip ce reverse).
Les 8 caractères suivants sont un XOR du password avec la clé M30W. On renomme cette fonction generate_secret.
Avec les renommages, on se retrouve avec un code un peu plus compréhensible. On peut d'ailleurs en déduire que FUN_00402450 est la fonction de chiffrement et local_68 le résultat :
Retrouver la clé
On comprend que c'est un chiffrement symétrique puisque la fonction encrypt est utilisée dans les 2 modes.
De plus, on peut retrouver le mot de passe utilisé à partir du fichier chiffré. Il suffit de refaire le XOR sur les 8 derniers octets du secret. En python ça donne :
Déchiffrement du flag
On a le password utilisé, on va juste lancer le binaire en mode decrypt avec :
Mis à jour
Ce contenu vous a-t-il été utile ?