IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Décrypter mot de passe chrome


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 69
    Par défaut Décrypter mot de passe chrome
    Bonjour à vous, j'ai réalisé il y a peu de temps un outil pour lister toutes les données de google chrome en python et j'essaye maintenant de le faire en c++, j'ai réussis sur la plupart des données mais je n'arrive pas à décrypter les mots de passe crypter avec la fonction CryptProtectData() de Windows. J'ai fouillé un peu partout, essayé un tas de choses mais je ne sais plus quoi faire, l'erreur est l'erreur 87 donc de mauvais paramètres. Merci beaucoup à ceux qui prendront le temps de m'aider.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    #pragma comment(lib, "crypt32.lib")
    #include <windows.h>
    #include <iostream>
    #include <stdio.h>
    #include <sqlite3.h>
    #include <Wincrypt.h>
     
     
     
    std::string Decrypt(char* pass)
    {
        printf("%x\n\n",pass);
        printf("%d\n",sizeof(pass));
        printf("debut du decryptage");
        DATA_BLOB DataIn;
    	DATA_BLOB DataVerify;
    	BYTE* pbDataInput = (BYTE*)pass;
    	DWORD cbDataInput = strlen((char*)pbDataInput) + 1;
    	printf("%d\n",cbDataInput);
    	DataIn.pbData = pbDataInput;
    	DataIn.cbData = cbDataInput;
     
     
    	if (CryptUnprotectData(
    		&DataIn,
    		NULL,
    		NULL,                 // Optional entropy
    		NULL,                 // Reserved
    		NULL,        // Optional PromptStruct
    		0,
    		&DataVerify))
    	{
    		printf("The decrypted data is: %s\n", DataVerify.pbData);
     
    	}
    	else
    	{
    		printf("Decryption error: %d\n",GetLastError());
    	}
     
     
    }
    static int callback(void *data, int argc, char **argv, char **azColName){
       int i;
       fprintf(stderr, "%s: ", (const char*)data);
     
       for(i = 0; i<argc; i++){
          printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
          std::string colname = azColName[i];
          if (colname == "password_value")
          {
             printf("%x\n", argv[i]);
     
                Decrypt(argv[i]);
     
     
          }
     
       }
     
       printf("\n");
       return 0;
    }
     
     
    int main()
    {
        sqlite3 *db;
        char *zErrMsg = 0;
        int rc;
        char *sql;
        const char* data = "Callback function called";
     
        rc = sqlite3_open("C:\\Users\\Serveur\\AppData\\Local\\Google\\Chrome\\User Data\\Default\\LoginData",&db);
     
        if (rc){
            fprintf(stderr,"impossible d'ouvrir la database: %s\n",sqlite3_errmsg(db));
            return (0);
        }
        else {
            fprintf(stderr,"ouverture de la database reussie\n");
        }
     
        sql = "SELECT * from logins";
     
     
        rc = sqlite3_exec(db,sql,callback,(void*)data,&zErrMsg);
     
     
           if( rc != SQLITE_OK ) {
              fprintf(stderr, "SQL error: %s\n", zErrMsg);
              sqlite3_free(zErrMsg);
           } else {
              fprintf(stdout, "Operation done successfully\n");
           }
           sqlite3_close(db);
           return 0;
     
     
    }

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 69
    Par défaut
    Je crois le problème vient de la mesure de la taille de la chaîne, le paramètre cbDataInput doit contenir la taille de pbDataInput, si quelqu'un à déjà utilisé l'api windows en c++ je serais extrêmement reconnaissant, ou quelqu'un de plus futé que moi qui accepterait d'essayer le code et me dire la ou ça coince ? Merci à ceux qui ont prit le temps de lire mais qui pouvaient malheureusement pas m'aider.

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 69
    Par défaut
    Ca marche parfaitement si je pars d'une chaîne de caractère pour utiliser la fonction cryptProtectdata() et ensuite la fonction cryptUnprotectData(), mais si j'essaye de récupérer la valeur directement depuis une bdd, depuis le fichier chrome, impossible d'avoir une valeur correct, je suis pas sûr d'avoir une réponse ici mais sait-on jamais ! Voici le code exemple qui me sert et qui marche parfaitement, j'aimerais reproduire la même chose avec une valeur récupéré dans un fichier Login Data de chrome.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    #pragma comment(lib, "crypt32.lib")
    #include <iostream>
    #include <windows.h>
    #include <Wincrypt.h>
     
    int main()
    {
    	DATA_BLOB DataIn;
    	DATA_BLOB DataOut;
    	DATA_BLOB DataVerify;
    	BYTE* pbDataInput = (BYTE*)"Hello world of data protection.";
    	DWORD cbDataInput = strlen((char*)pbDataInput) + 1;
    	std::cout << cbDataInput << std::endl;
    	DataIn.pbData = pbDataInput;
    	DataIn.cbData = cbDataInput;
    	std::cout << DataIn.pbData << std::endl;
    	std::cout << DataIn.cbData << std::endl;
    	LPWSTR pDescrOut = NULL;
    	//-------------------------------------------------------------------
    	//  Begin processing.
    	printf("The data to be encrypted is: %s\n", pbDataInput);
    	//-------------------------------------------------------------------
    	//  Begin protect phase.
    	if (CryptProtectData(
    		&DataIn,
    		L"This is the description string.", // A description string.
    		NULL,                               // Optional entropy
    		NULL,                               // Reserved.
    		NULL,                      // Pass a PromptStruct.
    		0,
    		&DataOut))
    	{
    		printf("The encryption phase worked. \n");
    		std::cout << "chaine = " << &DataOut.pbData <<  "\n\n" << std::endl;
    		std::cout << "taille = " << &DataOut.cbData << "\n" << std::endl;
    	}
    	else
    	{
    		printf("Encryption error!");
    	}
    	//-------------------------------------------------------------------
    	//   Begin unprotect phase.
    	if (CryptUnprotectData(
    		&DataOut,
    		&pDescrOut,
    		NULL,                 // Optional entropy
    		NULL,                 // Reserved
    		NULL,        // Optional PromptStruct
    		0,
    		&DataVerify))
    	{
    		printf("The decrypted data is: %s\n", DataVerify.pbData);
    		printf("The description of the data was: %S\n", pDescrOut);
    	}
    	else
    	{
    		printf("Decryption error!");
    	}
    	//-------------------------------------------------------------------
    	//  Clean up.
    	LocalFree(pDescrOut);
    	LocalFree(DataOut.pbData);
    	LocalFree(DataVerify.pbData);
    } // End of main

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 150
    Billets dans le blog
    4
    Par défaut
    Tu as de nombreux champs optionnels dans la fonction decrypt qui doivent matcher ce qui a été utilisé a sa création.
    Vu que c'est Chrome qui les crée, tu les connais pas, ne peux pas les mettre avec une bonne valeur et donc ne peux pas décrypter les données.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 69
    Par défaut
    Merci pour la réponse, j'y arrive très bien en python en procédant de la même façon, ouverture avec sqlite, et utilisation de la fonction CryptUnprotectData(), en ouvrant le fichier chrome avec db_browser je vois que dans le champ mot de passe il y a marqué DATA_BLOB, comment pourrais-je faire pour convertir un char* en DATA_BLOB ?

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 69
    Par défaut
    Mon problème se trouve sur la lecture du type blob, je ne sais pas comment je pourrais réussir à le lire, mais en tout cas je sais que c'est possible, je vais passer le sujet résolu car je ne pense pas avoir de vrai réponse ici et je vais continué à essayer de mon côté.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mémorisation login/mot de passe Chrome OK Firefox NOK
    Par engi dans le forum Général Conception Web
    Réponses: 0
    Dernier message: 08/06/2017, 10h13
  2. Sous Chrome : fond champ pseudo et mot de passe en jaune
    Par canaille22 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 22/10/2010, 14h56
  3. Réponses: 0
    Dernier message: 15/03/2010, 09h26
  4. Réponses: 2
    Dernier message: 18/03/2009, 14h16
  5. [Securité] Encrypter/décrypter un mot de passe
    Par lenoil dans le forum Windows Forms
    Réponses: 1
    Dernier message: 22/12/2008, 18h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo