Tenet
Dernière mise à jour
Cet article vous a-t-il été utile ?
Dernière mise à jour
Cet article vous a-t-il été utile ?
Catégorie: Reverse Difficulté: - Flag: CYBN{t3net_is_c0nfusing_af_4nd_1ts_actu4lly_n0t_that_g00d}
Comme son nom l'indique, il s'agit d'un executable .NET
, je pars donc sur l'outils dotPeek
pour le décompiler. Voilà l'architecture après décompilation :
On a un namespace nommé Tenet et composé de 2 classes : RXQgc2kgbGEgcHVy6WUgYSBjcmFt6Q et Stalsk12 qui contient la fonction Main.
Dans cette dernière fonction, on peut voir au tout début un passage un peu bizarre : il s'agit d'une compilation à la volée, c'est à dire que le code ne sera compilé qu'au moment de l'exécution.
On peut voir que ce code un peu spécial est une longue chaîne de charactère à laquelle on ajoute RXQgc2kgbGEgcHVy6WUgYSBjcmFt6Q.x()
(ça se trouve en fin de ligne).
En assemblant les deux parties récupérées, c'est à dire la longue chaîne de charatères trouvée dans Main
+ le résultat de la fonction x
, on obtient un code qui ressemble à ça :
On y trouve 2 classes : RedTeam
et BlueTeam
. Dans cette première, on peut voir dans la fonction Step2 trois variables intéressantes : _encryptedRedTeamFlagHex
, _blueTeamKeyHex
et _blueTeamIVHex
.
Dans la fonction Step5 on trouve un appel à la fonction DecryptStringFromBytes_Aes
. On apprend donc que de l'AES est fait et on a visiblement l'IV et la clé de l'équipe bleu ainsi que le message chiffré de l'équipe rouge.
Allons maintenant voir la BlueTeam. On y voit la fonction InvertedStep2 qui semble être très similaire à la Step2 de la RedTeam.
Par ailleurs, trois variables sont au même endroit, partont du principe qu'il s'agit des mêmes que celles de la RedTeam mais inversées, donc dans l'ordre : _encryptedBlueTeamFlagHex
, _redTeamKeyHex
et _redTeamIVHex
.
On assemble et c'est bon.
Allons voir ce que retourne cette fonction x, pour ça on la décompile (toujours avec dotPeek) et on copie colle bêtement l'intégralité du fichier dans un puis on appelle cette fonction :
On peut tenter de déchiffrer _encryptedRedTeamFlagHex
avec l'IV et la clé supposement trouvés dans la BlueTeam
. Ici j'utilise (le lien est paramétré avec les valeurs trouvées):
Bingo c'est le début du flag, on fait la même chose avec le supposé _encryptedBlueTeamFlagHex
et l'IV et la clé trouvées dans la RedTeam
, :