Dans ce challenge, il n’y a pas de site, seulement un fichier que l’on nous présente comme l’AST d’un algorithme, et nous devons vraisemblablement le décoder :

Les AST, contrairement au code natif, sont fait pour détailler dans un format universel un code ou un algorithme. Il devrait donc être aisé de le voir dans l’autre sens, mais apparemment non. Après plusieurs recherches sur les documentations et différents forums, il semble très compliqué de revenir automatiquement en arrière sur un code AST
De plus, pour avoir testé différentes librairies, il semble que le challenge ait délibérément rendu le json inutilisable avec quelques pièges et morceaux erronés dans l’arbre. Il semble donc très complexe de pouvoir lire le code, à moins de regarder manuellement chaque morceau de cet arbre abstrait.
Dès qu’il s’agit de faire des choses simples mais longues, je m’autorise à faire un tour sur l’IA. Je ne fais pas confiance à l’IA sur quelque chose que je ne comprends pas, mais en cela j’ai tenté l’expérience. Car la reconstruction n’est pas impossible, seulement lente et longue à la main mais un jeu d’enfant pour une IA (les IA sont particulièrement bonnes en reconnaissances de pattern et tâches répétitives)


5 secondes, impressionnant !
Maintenant que nous avons la fonction, nous pouvons l’analyser, et on peut voir qu’il y avait aussi beaucoup de code qui ne servait à rien :
La première IIFE ne semble pas servir (un String.fromCharCode qui renvoie « trololo »…), la deuxième est un simple console.log mais la dernière est intéressante. On se retrouve une nouvelle fois avec un tableau qui passe dans un fromCharCode avec une subtilité, il passe dans une fonction qui va décaler les caractères. Donc même si on avait pu observer un pattern ressemblant à ce tableau dans l’immense code de l’AST, si on avait loupé cette partie décalage on aurait eu une string complètement erronée.
Bien. En exécutant ce code, on obtient bien le bon code : g00d_j0b_easy_deobfuscation
Une belle ironie pour le challenge le plus difficile de ce marathon ^^
Résumé
| Objectif | Trouver le sens de l’AST et en déduire la clé |
| Méthode | Il fallait trouver un moyen de reverse l’AST mais il n’existe pas de méthode toute faite pour ça (d’après le forum de rootme) + quelques pièges glissés dans l’AST le rendant inutilisable ChatGPT est puissant lorsqu’il s’agit de pattern recognition et exécution de code. Il a pu décoder en 5 secondes l’AST le rendant lisible et exécutable. La clé a pu être déduite à partir de la dernière fonction |
| Outil | ChatGPT |
| Temps | 30min |
| Flag | g00d_j0b_easy_deobfuscation |
Laisser un commentaire