Intro to reversing 1
TL;DR
Le mot de passe est hardcodé dans le code. Un simple “strings” ou une inspection des appels systèmes permet d’avoir le mot de passe permettant d’obtenir le flag.
Etat des lieux
L’épreuve commence avec un binaire Linux (ELF) demandans un mot de passe:
Analyse dynamique
Un des outils les plus utilisés en analyse dynamique est “ltrace”. Cette commande permet à un analyste de suivre les appels aux libraries au fur et à mesure de l’exécution du binaire.
Etant donné que le programme demande un mot de passe, on peut se douter qu’il utilise la fonction “strcmp”:
Finalement, les arguments du strcmp sont affichés et permet d’obtenir le flag de validation.
Flag
CSCG{ez_pz_reversing_squ33zy}
Intro to reversing 2
TL;DR
Ce challenge de reverse porte sur le reverse d’un césar. C’est à dire que chaque caractère doit être décalé d’un offset de “119”, ce résultat doit être mis au modulo 256 (nombre de caractère total) et finalement le flag apparait.
Etat des lieux
On commence cette épreuve avec un binaire Linux 64 bits. Il n’est pas très gros et ne comporte pas énormément de fonctions.
Comme dans le précédent challenge, le traitement doit se faire dans la fonction main. Pour s’en assurer, il est de bon de passer ce binaire dans un désassembleur (ida ftw).
Au premier abort on voit une boucle qui fait un “sub” de 0x77:
N’étant pas fan de l’assembleur, regardons ce qu’il se passe en pseudo code.
Cesar
Grâce au décompilateur “Hexrays” de IDA, la boucle est bien plus clair et il est possible de voir qu’il s’agit d’un chiffrement de césar avec un décalage de 119 ou 0x77.
La chaine à retrouvé se trouve dans la section “.data” sous le doux nom de “s2”.
On a le chiffré, on a le décalage, il ne reste qu’à scripter.
Décodage
Pour ça, le python est à mon sens le langage le plus approprié.
|
|
La liste “a” est parcouru et chaque caractère est converti en décimal. Ensuite l’opération inverse de celle présente dans le binaire est effectuée (on additionne au lieu de soustraire). Finalement, un modulo 256 est appliqué à ces nombres, car il existe 256 symboles dans la table ascii.
Flag
CSCG{sta71c_tr4n5f0rm4710n_it_is}
Intro to reversing 3
TL;DR
Comme les deux premiers, il s’agit d’une petite routine “crypto”. En l’occurence un xor suivi d’un décalage. Même logique que précédemment, comprendre la routine, implémenter l’inverse et récupérer le flag.
Etat des lieux
Encore une fois le binaire est très petit et ne contient pas beaucoup de fonctions. Le traitement se fait dans le main.
Avec la vue bloc de IDA, on peut identifier deux opérations:
Encore une fois, le décompilateur va nous être utile pour comprendre plus facilement ce qu’il se passe:
La chaine chiffré se situé à nouveau dans “.data” sous le nom de “s2”.
Comme il y a des caractères imprimable, IDA va en faire une chaine de caractère, pour récupérer tout l’hex comme sur la capture précédente, il suffit d’appuyer sur “u”, permettant à IDA de supprimer les traitements automatiques et revenir à un tableau d’octets brut.
Déchiffrement du XOR
Comme vu précédemment, il y a un xor puis un décalage. Il suffit d’implémenter l’inverse pour récupérer le flag de validation:
|
|
Flag
CSCG{dyn4m1c_k3y_gen3r4t10n_y34h}