5eme phase, on approche de la fin ! Attaquons s'en plus tarder !

Si on regarde dans le main comment est appelée cette 5eme partie on remarque qu'une ligne est lu à partir du stdin.

En fouillant plus dans la fonction sym.phase_5 on apprend que l'input lue doit faire 6 caractères de long.

Scanf for 6 char

On peut aussi retrouver notre input sous le doux nom de arg_8h (a.k.a ebp+0x8 )

donc Arg_8h est bien notre input

En regardant de plus près notre fonction on voit que notre input est comparée à une chaine de caractères via la fonction sym.string_not_equal.

Potentiellement l'input attendu est "giants" puisque 6 char et que ca et l'input sont poussé sur la pile avant l'appelle a strings not equals

OK mauvaise hypothèse, il faut que le résultat de la transformation de l'input donne giants et non pas que l'entrée soit giants.

Le gros du problème se trouve dans ces quelques lignes.

En fait le programme va itérer à travers les 6 lettres qu'on lui fournit et effectuer une substitution.

Le moyen le plus simple pour comprendre comment fonctionne cette substitution est de faire des tests.

Premier test: Est-ce que la substitution dépend de paramètre changeant ?

Pour répondre à cette question on va mettre un breakpoint juste avant la comparaison de notre chaine de caractères.

le breakpoint juste avant la comparaison de notre string

Ensuite on va afficher notre string après substitution.

ood inputs.txt
dc
pf z @ ebp-0x8

Si on regarde notre input et sa substitution on remarque qu'elle sont pareil si on répète l'opération, on en déduit donc que la substitution ne dépend pas de paramètre changeants.

Second test: Est-ce que c'est une substitution simple ?

On cherche cette fois à répondre à la question suivante: est-ce qu'une lettre est toujours remplacée par la même valeur ?
On peut déjà répondre à cette question avec notre premier test.

Par exemple si on donne "istest" au programme il va substituer la phrase par "bveave"

Ce qui amène à la troisième question "Est-ce que l'on peut deviner l'alphabet de substitution ?"

Troisième test: Est-ce que l'on peut deviner l'alphabet de substitution ?

Comme le programme substitue à chaque fois 6 lettres, on peut tenter de découvrir l'alphabet de substitution en connaissant la chaine en input et le résultat après substitution.

Pour arriver à ce résultat on va d'abord entrer la chaine "abcdef" est voir le résultat que l'on obtient, ensuite on va répéter pour les 6 lettres suivante de l'alphabet et ainsi de suite jusqu'à pouvoir trouver le mot qui sera substitué par "giants".

Je passe l'application en pratique de ces tests puisque les commandes sont fournit plus haut. Bref on obtient l'alphabet suivant:

abcdef ghijkl mnopqr stuvwx
srveaw hobpnu tfgisr veawho 

Bien que l'alphabet ne soit pas complet on peut construire le mot "giants" donc on s'arrête là.

opekma => giants 

Il ne reste plus qu'a vérifier si cela fonctionne

Et voila 5émè phase défused !

Social et Media

Comme toujours je suis disponible sur Twitter et cie, si vous avez des questions, des remarques, des suggestions etc. N’hésitez pas !

Twitter: @GhostAgs

Discord: hackraw