Outils d'utilisateurs

Outils du Site


ndhquals2015:crackme_prime

Différences

Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.

Lien vers cette vue

ndhquals2015:crackme_prime [2015/04/05 14:59]
Spl3en
ndhquals2015:crackme_prime [2017/04/09 15:33] (Version actuelle)
Ligne 34: Ligne 34:
  
 - Dans la première condition, le programme vérifie si un argument a été donné au programme en vérifiant ''argc'' - Dans la première condition, le programme vérifie si un argument a été donné au programme en vérifiant ''argc''
 +
 - Dans la deuxième condition, il vérifie que la taille du premier argument fait 29 caractères en faisant un ''strlen (argv[1])'' - Dans la deuxième condition, il vérifie que la taille du premier argument fait 29 caractères en faisant un ''strlen (argv[1])''
 +
 - Dans la troisième condition, il vérifie que le premier argument ne contient pas le caractère '0' en faisant un ''strchr (argv[1], '0')'' - Dans la troisième condition, il vérifie que le premier argument ne contient pas le caractère '0' en faisant un ''strchr (argv[1], '0')''
  
Ligne 40: Ligne 42:
  
  
-Le long block au milieu s'occupe de lire le premier argument, en le décomposant en 6 sous parties de 4 caractères, en sautant un caractères à chaque fois entre chaque.+Sachant cela, on doit maintenant comprendre ce que fait le gros block du milieu. 
 +Voici une décompilation d'HexRays afin d'éviter la lecture de l'assembleur : 
 + 
 +{{http://puu.sh/h2e1d/57b740b3fb.png}} 
 + 
 + 
 +On en déduit que le long block au milieu s'occupe de lire le premier argument du programme, en le décomposant en 6 sous parties de 4 caractères, en sautant un caractères à chaque fois entre chaque.
  
 Notre serial est donc de la forme : ''xxxx-xxxx-xxxx-xxxx-xxxx-xxxx''  Notre serial est donc de la forme : ''xxxx-xxxx-xxxx-xxxx-xxxx-xxxx'' 
Ligne 49: Ligne 57:
     29     29
  
-Sachant celaon doit maintenant comprendre ce que fait le gros block du milieu. +Chaque sous partie de 4 caractère passe dans ''strtol'' ayant pour argument 16, ce qui nous indique que ces sous parties doivent être de l'hexadécimal.
-Voici une décompilation d'HexRays afin d'éviter la lecture de l'assembleur : +
- +
-{{http://puu.sh/h2e1d/57b740b3fb.png}} +
  
-On remarque l'utilisation d'une fonction ''c1'' que l'on a pas encore analysé.+En fin de block, on remarque l'utilisation d'une fonction ''c1'' que l'on n'a pas encore analysé.
  
-Elle prend en entrée un mot de 16 bits récupéré depuis notre argument.+Elle prend en entrée un mot de 16 bitsrécupéré depuis les sous parties de 4 caractères hexa.
  
 Un rapide aperçu du flow graph de cette fonction nous indique qu'elle est complexe : Un rapide aperçu du flow graph de cette fonction nous indique qu'elle est complexe :
 {{http://puu.sh/h2ekZ/8c485f4fd4.png}} {{http://puu.sh/h2ekZ/8c485f4fd4.png}}
  
-Elle appelle des fonctions telles que ''aes_init'', ''aes_decrypt'', ''EVP_aes_256_cbc'', laissant supposer que de l'AES-256 CBC est utilisé. 
  
 Plutôt que d'analyser cette fonction, nous allons nous intéresser à sa sortie : 0, 1, ou -1 en cas d'erreur. Plutôt que d'analyser cette fonction, nous allons nous intéresser à sa sortie : 0, 1, ou -1 en cas d'erreur.
ndhquals2015/crackme_prime.1428238779.txt.gz · Dernière modification: 2017/04/09 15:33 (modification externe)