Compréhension d'un convertisseur

Résolu
Ticki84 Messages postés 850 Date d'inscription   Statut Membre Dernière intervention   -  
Ticki84 Messages postés 850 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   158
 
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