Challenge : Tux Bomb de Hack.lu Introduction Pour ce challenge, l

Transcription

Challenge : Tux Bomb de Hack.lu Introduction Pour ce challenge, l
Challenge : Tux Bomb de Hack.lu
Introduction
Pour ce challenge, l'objectif est de fournir un username et un productkey corrects. Ceci génèrera un
fichier pdf contenant les informations nécessaires pour trouver un flag (une suite de charactères
qu'il faut trouver pour réussir le challenge).
Pour résoudre ce problème, nous allons “patcher” l'exécutable. En reverse engineering, c'est la
méthode la plus basique. Elle consiste à étudier le code désassemblé afin de déterminer les points de
décision du programme, pour finalement les modifier dans le but de générer une réponse positive
pour n'importe quelle paire de username et productkey.
Effectivement, puisque ce logiciel demande un nom d'utilisateur et un mot de passe puis détermine
s'ils sont corrects, si on est capable de trouver le résultat de la comparaison puis de le changer alors
on peut modifier le programme pour qu'il donne toujours une réponse favorable.
[*] Noter que plusieurs des commentaires qu'on voit sur les printscreen ont été ajoutés lors du
traçage du code. Il est donc normal de ne pas les retrouver lors de votre propre désassemblage. C'est
une bonne pratique de commenter le code pour s'y retrouver.
Résolution
1) On commence par trouver le 'main' du programme :
2) On trouve ensuite les points d'input du username et productkey :
3) On note les trois points de décision défavorables à notre (mauvaise) réponse.
Le premier détermine si le username est correct (mais sa valeur ne change rien au processus de
décision);
Le second détermine si le productkey est correct
4) Le troisième est un double check. Si on a juste “patché” le retour des deux checks précédents, on
génèrera un fichier invalide.
5) Finalement, on peut modifier le programme pour que les trois points de décision retournent
toujours vrai :
6) Et on sauve le tout sous la forme d'un exécutable “patché” :
7) On dispose maintenant du fichier PDF valide.
atoi() en C++ : http://www.cplusplus.com/reference/cstdlib/atoi/
Script python (http://delogrand.blogspot.ca) :
flux = 'Fluxfingers'
ans = 0
for i in range(len(flux)) :
ans += ord(flux[i])
print ans
Soit x = 1165
Ce qui nous laisse la fonction que WA evalue a 1337 :
http://www.wolframalpha.com/input/?i=1165+*+%28integral_0^infinity+exp-sqrt%28u%29+%29+
%E2%80%93+993
Calcule le hash md5 :
md5("1337") = "e48e13207341b6bffb7fb1622282247b"
http://www.adamek.biz/md5-generator.php
Conclusion
Noter qu'on aurait eu plusieurs autres options pour resoudre ce probleme :
– On aurait pu comprendre les opérations arythmétiques faites sur les input de username et
productkey pour vérifier leur validité puis générer des valeurs correctes;
– On aurait pu comprendre le processus de remplissage du contenu du PDF pour en retirer le
contenu;
– On aurait pu utiliser le décompilateur disponible avec IDA Pro ou tracer le code avec un
désassembleur.
Toutes ces options sont bonnes, certaines sont même meilleures que celle utilisée ici,
dépendemment des contraintes de temps ou du degré de compréhension du binaire à laquelle on
souhaite arriver.