Crackme - DiS[IP]

CTF - Reverse Engineering - Keygen

Ce CTF propose un programme simple de type "register key". Lorsqu'on entre un nom d'utilisateur et un mot de passe, il affiche un message de réussite uniquement si la clé est correcte.

analyse_1

Analyse du fonctionnement

Après analyse dans un débogueur, on constate que le programme :

On peut juste nopper l'instruction qui gère la vérification et on est considéré comme enregistré :

analyse_1

Sinon on peut juste essayer de générer un keygen. En analysant le programme on remarque qu'il' :

  • Vérifie que l'username ne contient pas les caractères z, Z ou 9
  • Incrémente chaque caractère de l'username
  • Intercale entre chaque lettre une lettre croissante à partir de a
analyse_1 analyse_2

Résultat : le programme génère dynamiquement une clé à partir de l'username saisi.

Code du keygen en C



        // Exemple avec username : alice
        #include 
        #include 
        #include 

        int main() {
            char name[10];
            char key[50] = "";
            int index = 0;

            printf("Entrez votre pseudo : ");
            scanf("%s", name);

            for (int i = 0; i < strlen(name); i++) {
                char xx = name[i];
                if (xx == 'Z' || xx == 'z' || xx == '9') {
                    xx = xx - 1;
                }
                key[index++] = xx + 1;
                key[index++] = 'a' + i;
            }

            key[index] = '\0';
            printf("Voici la cle : %s\n", key);
            return 0;
        }
        

Pour l'username alice, la clé générée est Bambjcddfe.

Résultat clé trouvée

Résultat obtenu

teste de la clé

Le message "Register complete!!!" s'affiche après avoir saisi la bonne clé.

Outils utilisés

OllyDbg : pour analyser le binaire

Notre cerveau :)