Le chall est de type Reverse et commence avec un executable ! padoru.exe et une liste de librairie et autre fichiers de type .SPV ou .OGG, .PDB et .OBJ (pour la 3D)
En exécutant le fichier padoru.exe, il faut trouver une clé qui permet de changer les couleurs de la représentation 3D !
Allons sans attendre dans le debugger x64dbg pour comprendre tout ça...
On commence l'analyse par une recherche des chaines de caractères potentiellement intéressantes :
Plusieurs chaines intéressantes :
encTrueChristmasSecret qui semble être le secret à trouver...
userGuessedSecretArray qui semble être la clé saisie par l'utilisateur
On continue l'analyse et on trouve une boucle qui itère sur 67 caractères et qui construit une string en récupérant des chars dans la partie .text :
Et on obtient cette string : ** JMzJ7WM7U;VY;^<QV NY'N&IY(X2V[K7X\Z@=@?G$C&LC%IG,D1PV[U2C8[_*-,/r **
Mais qu'en faire...? 🤔🧐
En débuggant, on voit que l'executable lance le fichier : ** fragment.spv **
Perso, je ne connaissais pas avant ce challenge, donc je me suis documenté : SPIR-V
Il s'agit d'un langage simple permettant d'interagir avec des programmes graphiques (ici 3D).
La décomposition en Opcodes est simple et directement en ligne : SPIR-V Visualizer
Ensuite pour passer des opcodes à du code, j'ai demandé de l'aide à ChatGPT...
Voici le code GLSL généré :
Il suffit donc de prendre la chaine de caractères encTrueChristmasSecret, de XOR char by char avec un compteur incrémental et trouver la valeur init (=finalChristmatKey)
Mon programme Python :