La fonction main
commence par appeler la fonction enc
. Par la suite, elle saute en 0x2400
, on ne connait pas le nom de cette fonction.
4438 <main> 4438: 3e40 2045 mov #0x4520, r14 443c: 0f4e mov r14, r15 443e: 3e40 f800 mov #0xf8, r14 4442: 3f40 0024 mov #0x2400, r15 4446: b012 8644 call #0x4486 <enc> 444a: b012 0024 call #0x2400 444e: 0f43 clr r15
En regardant de plus prêt la fonction enc
, elle semble déchiffrer des données situées en 0x2400
. On se doute donc que celle ci déchiffre une fonction pour ensuite sauter dessus et exécuter le code qui demande le mot de passe le valide.
Pour éviter de reverse la routine de déchiffrement, on lance le programme et on stop son exécution au moment du call #0x2400
, il suffit alors d'ouvrir l'hexdump du programme avec IDA pour avoir une jolie vue de ce qui s'y passe
Après une bref lecture du code assembleur, elle :
what's the password?\n
0xFC18
. Si l'input utilisateur commence bien par 0xFC18
, alors la porte est ouverte
Il suffit donc de valider le niveau en entrant FC18
.