Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.
ndh2k12_public:crackme:stay_alive [2012/07/01 18:26] TheLizardKing créée |
ndh2k12_public:crackme:stay_alive [2017/04/09 15:33] (Version actuelle) |
||
---|---|---|---|
Ligne 5: | Ligne 5: | ||
Dans ce challenge, on nous fourni une application Windows Phone (qui est un paquet Silverlight). | Dans ce challenge, on nous fourni une application Windows Phone (qui est un paquet Silverlight). | ||
Un paquet Silverlight est une archive au format ZIP avec l’extension .XAP. | Un paquet Silverlight est une archive au format ZIP avec l’extension .XAP. | ||
- | Décompressez cette archive devrait vous donnez une multitude de fichier, ainsi qu'un appelé ndh_stay-alive.dll. | + | Décompresser cette archive devrait vous donner une multitude de fichiers, ainsi qu'un appelé ndh_stay-alive.dll. |
====First steps==== | ====First steps==== | ||
- | Ce fichier est une librairie programmé en .NET. Ouvrez le avec un désassembleur .NET, pour pouvoir lire le code. | + | Ce fichier est une bibliothèque programmée en .NET. Ouvrez-le avec un désassembleur .NET, pour pouvoir lire le code. |
- | À partir du moment ou cette assembly n'est pas protégé, ce challenge va être trivial. | + | À partir du moment ou cet assembly n'est pas protégé, ce challenge va être trivial. |
J'ai utilisé SAE (Simple Assembly Explorer) pour extraire le code, je l'ai nettoyé et voici ce que je trouve: | J'ai utilisé SAE (Simple Assembly Explorer) pour extraire le code, je l'ai nettoyé et voici ce que je trouve: | ||
Ligne 148: | Ligne 148: | ||
}</file> | }</file> | ||
- | Nous allons le nettoyé un peu plus et supprimé tous le code inutile pour avoir une vue claire du code. | + | Nous allons le nettoyer un peu plus et supprimer tout le code inutile pour avoir une vue claire du code. |
- | La fonction ndhPasswordLogin_Click est une fonction évenementielle, elle est appelé quand un utilisateur | + | La fonction ndhPasswordLogin_Click est une fonction évènementielle, elle est appelée quand un utilisateur |
- | appui sur le bouton Login. | + | appuie sur le bouton Login. |
- | Cette fonction appelle une fonction de cryptage et compare ce résultat avec une chaîne chiffré par cette même fonction (on imagine bien). | + | Cette fonction appelle une fonction de cryptage et compare ce résultat avec une chaîne chiffrée par cette même fonction (on imagine bien). |
- | Cette chaîne n'est pas donné directement, le programme utilise plusieurs fonctions pour la récupéré. | + | Cette chaîne n'est pas donnée directement, le programme utilise plusieurs fonctions pour la récupérer. |
Récupérons la... ! | Récupérons la... ! | ||
Ligne 160: | Ligne 160: | ||
<file C# source.cs>this.hashA223UU8DzZDZD = "+5jeyeCv5uejnwa2dd5L7LvIjM4nDFyhhLY+Nj5Rh3wgZFL8Mi3hltRicAalWPuLRQMk91oag4dfWfnj7nD3JB13grBCyFMf6pJwP8bfBQ5";</file> | <file C# source.cs>this.hashA223UU8DzZDZD = "+5jeyeCv5uejnwa2dd5L7LvIjM4nDFyhhLY+Nj5Rh3wgZFL8Mi3hltRicAalWPuLRQMk91oag4dfWfnj7nD3JB13grBCyFMf6pJwP8bfBQ5";</file> | ||
- | Quand la fonction trustedHash() est appelé, le programme retourne cette valeur ainsi que 4 autres. | + | Quand la fonction trustedHash() est appelée, le programme retourne cette valeur ainsi que 4 autres. |
La variable text contient: | La variable text contient: | ||
Ligne 182: | Ligne 182: | ||
<file C# source.cs>/8hd3Z1ds8a1StSQkXxNyjZd2mTQPpTR4zmyf9FzK4Y4XUfzw1hUP3qj+</file> | <file C# source.cs>/8hd3Z1ds8a1StSQkXxNyjZd2mTQPpTR4zmyf9FzK4Y4XUfzw1hUP3qj+</file> | ||
- | La chaîne correct est ainsi une concaténation de c'est 5 valeurs dans l'ordre suivant: | + | La chaîne correcte est ainsi une concaténation de ces 5 valeurs dans l'ordre suivant: |
- | <file>hashA223UU8DzZDZD + trustedHashPart3() + trustedHashPart2() + trustedHashPart1() + text</font> | + | <file>hashA223UU8DzZDZD + trustedHashPart3() + trustedHashPart2() + trustedHashPart1() + text</file> |
La chaîne est donc: | La chaîne est donc: | ||
Ligne 361: | Ligne 361: | ||
Result: Failed!</file> | Result: Failed!</file> | ||
- | La fonction fonctionne à merveille, nous avons plus qu'à décrypté la variable qui contient le bon mot de passe pour avoir le flag ! | + | La fonction fonctionne à merveille, nous n'avons plus qu'à décrypter la variable qui contient le bon mot de passe pour avoir le flag ! |
<file>hzv-will-never-die</file> | <file>hzv-will-never-die</file> | ||
- | |||
- | Xartrick, 2012. |