On lance SmartCheck, on charge le programme avec Ctrl+o, mais avant de commencer, nous allons régler quelques paramètres pour que SmartCheck soit le plus loquace possible.
On click sur le menu "Program", puis dans la fenêtre qui apparait, sur le bouton "Advanced". Dans le cadre "Performance Optimizations", on décoche la case "Suppress system API and OLE calls". On click sur "OK".
Ensuite, on affiche le deuxième onglet, "Reporting", et on coche la case "Report Windows messages". On click sur le bouton "OK".
Ces paramètres nous permettrons de voir presque tout ce qui se passe dans le programme.
On click sur le bouton "Show Errors and Specific Events" s'il n'est pas déjà actif. Maintenant, on peut lancer le programme avec F5.

On entre un Nom et un Serial, par exemple kharneth et 123456, puis on click sur le bouton "Vérifier". Une MessageBox nous indique que ce n'est pas ça. On la ferme ainsi que le programme. Puis, on passe sous SmartCheck.
Après avoir double-clicker sur la ligne "Command1_Click", on peut remarqué 3 choses intéressantes:

- D'abord, la fonction Len récupère le nombre de caractères de notre nom. Ici 8.
- Ensuite, la fonction Left$ récupère la première lettre du nom puis la fonction Asc renvoie la valeur ASCII de celle-ci. Ici 'k' et 107.
- Finalement, la fonction Hex convertit une valeur numérique en sa représentation hexadécimale, avant l'affichage de la MsgBox.
Ces informations apparaissent dans la fenêtre de droite en clickant sur chaque ligne.
Maintenant, nous allons voir plus en détail ce qu'il s'est passé. On click sur la première ligne "Command1_Click", puis sur le bouton "Show All Events".

On voit tous les messages windows de l'application et on se trouve sur la ligne correspondant à l'évènement OnClick du bouton. On double-click dessus pour afficher toutes les actions qui ont été capturées lorsque l'on a clické sur le bouton "Vérifier". On retrouve les 3 fonctions vues précédemment, mais sous la fonction Asc, on remarque 4 instructions intéressantes: 3 multiplications et 1 division.

On click dessus pour voir ce que ça donne dans la fenêtre de droite. La première multiplication donne ceci:

On réfléchit un peu et on remarque que la valeur 8 correspond à la taille de notre nom. Par contre 1024 ne représente rien. On va considérer que c'est une constante. On prend la calculatrice, on fait 8 * 1024 = 8192.
La division n'affiche rien dans la fenêtre de droite. C'est pas grave passons à la suivante.

On voit 4096. Ne serait-ce pas la moitiè de 8192? On peut donc supposer que la division était par 2. On a donc maintenant une multiplication par 7. Cette valeur ne représente pas grand chose, pour le moment, on va dire que c'est une constante. On prend la calculatrice: 4096 * 7 = 28672.

On retrouve bien notre valeur 28672 qui est maintenant multipliée par 107. On ouvre les yeux et on voit que c'est la valeur retournée par la fonction Asc, soit la valeur ASCII de la première lettre de notre nom. 28672 * 107 = 3067904, valeur qu'on retrouve dans l'instruction qui suit la dernière multiplication.
Voyons maintenant ce que nous dit la fonction Hex puisque les instructions suivantes ne sont pas intéressantes.

On retrouve bien dans la fenêtre de droite notre valeur finale 3067904 qui va donc être convertie en hexadécimal. Calculatrice: 3067904 = 0x2ED000.
3 choses intéressantes dans cette partie: 3 fonctions de comparaison de chaîne _vbaStrCmp.
En clickant sur la première, on voit dans la fenêtre de droite qu'elle compare notre code "123456" avec le résultat hexadécimale "2ED000". Je crois que l'on tient notre code! La deuxième compare notre code avec rien. Et la troisième compare notre code avec le résultat décimal "3067904". Aurions-nous 2 codes valides?
On lance le KeyGenMe, on entre le code hexa, ça marche! On entre le code décimal et il ne se passe rien. On va donc garder la valeur hexa comme code correct.
Vérifions quand même, avec un nom de taille différente, que les 2 valeurs 1024 et 7 sont vraiment des constantes. C'est le cas. On a retrouvé l'algorithme et on peut maintenant coder le KeyGen. :o)
|