Intro
Non, je n’ai pas le courage de vous faire le writeup de la même façon que la chanson !
Recette
Dans notre shell, commençons par exécuter le programme, il attend une entrée de notre part, qui à moins d’un coup de chance phénoménal sera fausse.
J’aime bien chercher si un code est hardcodé dans le programme, donc nous allons commencer avec strings :
En espérant que ce ne soit pas avec la string juste au-dessus, mais on va passer sous xxd pour essayer de retrouver notre cible :
Assez de supposition, c’est l’heure de lancer radare2 :
On regarde plus en profondeur ?
Bon, petite douche froide, après cette sensation d’être un Uber cracker, la fonction obj.pass_enc me fait peur … Notre string a été encodé, il va falloir la reverse … Reprenons notre souffle, on note cela sur un coin du cahier, et on continue notre deadlisting :
obj.flag_enc … la longueur du truc nom d’un chien ! Je suis en boule sur mon fauteuil, j’ai presque envie de pleurer, mais qu’est-ce que je fous là moi ?
Reprenons-nous, c’est un défi à 20 points, ils ne vont pas sortir les armes lourdes pour le moment, il y a sûrement plus simple, plus logique.
J’aime beaucoup sym.transform mes chatons, ce n’est pas un call naturel, ça a donc été créé par un humain (si l’on peut considérer un dev’ comme un humain), il y a donc une chance pour que nous puissions la reverse.
Je ne sais pas pour vous, mais moi ça va mieux ! J’avoue, c’est à cause de toutes ces heures passées sur les keygenme que je suis rassuré. Mais nous allons découper cela ensemble.
Dans ce call, nous avons une initialisation, une boucle tant qu’il reste des caractères, et un RET.
Dans la boucle, nous avons la récupération de RDI et la manipulation dessus.
Nous savons que RDI c’est le flag encrypté, mais surtout lors de l’exécution, c’est l’endroit où le soft récupère notre saisie !
Cette saisie sera ensuite manipulée pour retirer -1 à la valeur ASCII du caractère, c’est à dire que si notre entrée est égale à 23456789 elle passera à 12345678.
Et à votre avis mes chatons, que ce passe t’il quand on retire 1 à NzTfdvs4Q4ttx1se ?
Oui bravo à toi qui à suivi ! Elle se transforme en MySecur3P3ssw0rd, qui est le mot de passe pour l’application, on va la tester de suite :
FCSC{83f41431c111062d003dd0213cf824d66f770a0be1305e2813f15dd76503a91d}
Finalement, pas si secure le password si un chaton arrive à le reverse ^^