Skip to content

About

Write-up of the Citiny-CTF cryptanalysis section.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Latest commit

 

History

16 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 

Repository files navigation

Wu-CitinyCTF

Write-up du Citiny-CTF section cryptanalyse.

Début

Salut à tous, aujourd'hui je vous présente mon WU du CitinyCTF présenté dans un prog CLI, c'est un CTF de cryptanalyse et un peu de RE au début.

Unpacking UPX

La première étape consistait à bypass le GetDlgItemText() importé par user32.dll où il nous demande d'insérer un mot de passe pour accéder au CTF.



J'ai donc essayé de voir en quoi le prog était packé, pour ce faire je l'ai d'abord glissé dans PEID ce qui m'a donné ce résultat.



On constate que l'OEP a été modifié par un packer, dorénavant la section de l'EP a été assigné par UPX1. Ce qui veut dire que le programme a été packé en UPX. Désassemblons le programme, pour ma part j'ai utilisé Odbg110, mais rien ne vous empêche d'utiliser un autre désassembleur. Voici ce que nous obtenons.



Je vais vous expliquer ce que fait UPX, histoire que vous sachiez de quoi on parle. UPX marche avec un loader qui va chiffrer le code dans l'EP. Quand le programme sera exécuté il sera déchiffré. L'EP du loader se trouve dans le PUSHAD et la routine du déchiffrage se termine au POPAD. J'ai donc désassemblé le programme et je me suis rendu au POPAD. Logiquement, derrière il y aura un JMP vers l'adresse de l'EOP, je mets un breakpoint dans le JMP vers l'adresse de l'EOP, puis je n'avais plus qu'à faire F7 et le tour était joué, je me retrouve dans l'EOP du programme qui là ne sera plus packé. Quelques images pour vous aider à comprendre.



Dans l'image au dessus, je me suis rendu au POPAD et j'ai défilé l'instruction MOV qui a affecté le registre ESP (registre qui va délimiter la stack).



Je sélectionne ESP, je fais un clique droit et je clique sur suivre l'interaction du Dump. Ensuite je sélectionne les 4 premiers octets null de ESP, clique droit -> Hardware on access et WORD car ça ne dépasse pas les 4 octets. Ensuite on dump le debugged process



On positionne l'exécutable et on a plus qu'à la refixer et exécuter le prog.



Plus qu'à lancer le programme et hop, plus de Popup.

Premier Challenge

Voici le premier challenge, lisons et analysons.



La solution se trouvait dans l'indice, si on lit bien on constate qu'il a tenté d'accentuer le mot FairPlay on y ajoutant deux majuscules. Mais pourquoi ? Eh bien, j'ai tout simplement inversé les mots Fair et Play ce qui donne "Playfair", ensuite j'ai fait une simple recherche google avec les mots clés "Playfair Cipher" et voici le résultat.



Il s'agit donc du cipher PlayFair, passons au déchiffrage. Pour ce faire, j'ai deux méthodes, soit vous le faites avec un automatisateur de tâche (par ex.: https://www.dcode.fr/chiffre-playfair), soit à la main. Personnellement j'ai opté pour la solution de le faire à la main, c'est bien plus fun. Voici comment j'ai procédé (Lisez biens les règles du Cipher PlayFair).



YN devient NO



JT devient PQ



AF devient RS



HP devient TU



EK devient VX



DB devient YZ



LY devient AB



IB devient CD



IP devient EF



UG devient GH



CF devient IJ



XA devient KL



QD devient MB



Après avoir assemblé tous les résultats, on obtient le résultat final ci-dessus, c'est donc le FLAG.

Deuxième Challenge

Nous voici au second challenge, on a donc bien réussi le premier. Lisons et analysons.



A priori on voit dans l'indice qu'il s'agit de l'alphabet, si on regarde le Cipher du challenge précédent on constate que c'est l'alphabet mais décalé. Connaissant le chiffrement Caesar je me suis directement mis à compter le nombre de décalage qu'il y avait entre celui ci et le vrai alphabet. La réponse est 13, on parle donc du chiffrement ROT13. La méthode de déchiffrage consiste à comparer chaque lettre du message chiffré entre le Cipher et l'alphabet. J'ai donc fait un petit script en python pour automatiser la tâche.



On obtient comme résultat "FTCynitic", on insère le flag et hop on se retrouve au prochain challenge. Deuxième étape réussie.

Troisième Challenge

Nous voisi au troisième challenge, vous connaissez la chanson, lisons et analysons.



Comme indice on nous dit d'utiliser notre cerveau, je suppose donc qu'on devra trouver le moyen de déchiffrer la key sans sources externes. Pour résoudre ce challenge j'ai tout simplement comparé chaque lettre par colonnes, la key du challenge précédent était "FTCynitic" et la passphase est "dnourorju". Je compare donc "F" avec "d" à travers les colonnes et j'obtiens la lettre "s".



J'ai donc continué sur cette voie.





J'ai donc fait la même chose pour chaque lettre jusqu'à obtenir le résultat "Seailking". C'est donc le flag final. Je vous remercie d'avoir lu cette WriteUP, il y aura d'autres WriteUPs dans le futur.

About

Write-up of the Citiny-CTF cryptanalysis section.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages