Compréhension d'un convertisseur

Résolu/Fermé
Ticki84 Messages postés 850 Date d'inscription mardi 17 août 2010 Statut Membre Dernière intervention 26 décembre 2017 - Modifié par Ticki84 le 15/04/2014 à 20:51
Ticki84 Messages postés 850 Date d'inscription mardi 17 août 2010 Statut Membre Dernière intervention 26 décembre 2017 - 15 avril 2014 à 20:51
Bonjour,

Je suis en train d'essayer de faire un Key Recovery Tool qui se base sur Regedit, le problème c'est qu'il me faudrait convertir cette valeur, pour cela, je me base sur ce code:
#include <iostream>
#include <windows.h>

using namespace std;

int main()
{
    HKEY hKey;
    DWORD dwBufSize = 200;
    UCHAR dwReturn[200];
    UCHAR digits[] = {'B','C','D','F','G','H','J','K','M','P','Q','R','T','V','W','X','Y','2','3','4','6','7','8','9'};
    UCHAR strresult[26];

    if( RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion",0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS)
    {
        DWORD error = RegQueryValueEx(hKey,"DigitalProductId",0,0, (LPBYTE)dwReturn, &dwBufSize);
        if(error == ERROR_SUCCESS)
        {

            for (int i=24;i>=0;i--) {
                int x=0;

                for (int j=14;j>=0;j--) {
                x = (x<<8) + (dwReturn+0x34)[j];
                (dwReturn+0x34)[j] = x / 24;
                x = x % 24;
                }
                strresult[i]=digits[x];
            }

            string part1, part2, part3, part4, part5;
            string str;
            string strRetVal;

            for(int i = 0; strresult[i] != 0; i++)
            {
                str += strresult[i];
            }

            part1 = str.substr(0,5) + "-";
            part2 = str.substr(5,5) + "-";
            part3 = str.substr(10,5) + "-";
            part4 = str.substr(15,5) + "-";
            part5 = str.substr(20,5);

            strRetVal = part1 + part2 + part3 + part4 + part5;

            cout << "Windows Key : " << strRetVal << endl;
        }
        else
        {
           cout << "Cannot query for key value; Error is : " << error << ", dwBufSize="<<dwBufSize<<endl;
        }
    }

    RegCloseKey(hKey);

    return 0;
}


Ce que je n'arrive pas à comprendre est cette partie:
            for (int i=24;i>=0;i--) {
                int x=0;

                for (int j=14;j>=0;j--) {
                x = (x<<8) + (dwReturn+0x34)[j];
                (dwReturn+0x34)[j] = x / 24;
                x = x % 24;
                }
                strresult[i]=digits[x];
            }


Qui fait office de convertisseur.
Je ne comprends aucune de ces valeurs (i, j, x, /24, 0x34, etc.) donc si on pourrait m'expliquer, merci.
A voir également:

1 réponse

Ticki84 Messages postés 850 Date d'inscription mardi 17 août 2010 Statut Membre Dernière intervention 26 décembre 2017 158
Modifié par Ticki84 le 15/04/2014 à 20:55
Je tiens juste à préciser que ma valeur de test est longue de 30 caractères (espace non-compris) avec des espacements tous les 2 caractères.
0