Windows Key umwandeln



  • Hi Zusammen!

    Ich bräuchte wieder einmal Eure Hilfe! Und die ist hier ja immer super 🙂

    Wir machen von der Schule aus eine Art Projektarbeit. Jeder durfte sich ein Programmierprojekt aussuchen und soll dieses in einer bestimmten Zeit mit Dokumentation etc. (wie für eine Abschlussprüfung) erstellen.

    Ich habe leider bisher recht wenig mit Anwendungsentwicklung zu tun gehabt und besitze so nur das Grundwissen von der Schule. Also bitte nicht wundern, wenn die Frage etwas doof ist *g*

    Ich habe mir als Projekt überlegt eine Software zu schreiben, welche die auf dem Computer installierten Programme + Seriennummern ausliest.
    Dieses funktioniert auch so weit bei allen Programmen, wo die Seriennummer im Klartext in der Registry gespeichert ist.
    Da jedoch die (meiner Meinung nach) wichtigste Software das OS selbst ist, würde ich hierzu auch gerne die Seriennummer auslesen.
    Problem: Die Seriennummer von Windows XP (und den anderen versionen) ist verschlüsselt.

    Nun würde ich gerne eine Funktion schreiben, welche anhand der übermittelnden Daten die Seriennummer errechnet. Ich habe hierzu schon ein Beispiel für CLI gefunden, aber die kann ich ja nicht so einfach in meine Windows Forms einbinden 😞

    Ich nutze C++ Windows Forms mit .NET.

    Dieses ist der folgende Code, welchen ich bereits finden konnte:

    #include <iostream>
    #include <windows.h>
    
    int main () {
        //Zeichenvorrat Buchstaben,Ziffern ohne AEIOU01 (24)
        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'};
        PUCHAR strresult = new UCHAR[26];
        PUCHAR buf = new UCHAR[200];
    
        HKEY key = NULL;
        DWORD datasize = 200;
        DWORD dwRet = 0;
    
        ZeroMemory((PVOID)strresult,26);
    
        dwRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion",0,KEY_READ,&key);                      
        dwRet = RegQueryValueEx(key,"DigitalProductID",NULL,NULL,(LPBYTE)buf,&datasize);
    
        if (dwRet != ERROR_SUCCESS) {
            return -1;
        }
    
        RegCloseKey(key);
    
        for (int i=24;i>=0;i--) {
            int x=0;
    
            for (int j=14;j>=0;j--) {
                x = (x<<8) + (buf+0x34)[j];
                (buf+0x34)[j] = x / 24;
                x = x % 24;
            }
            strresult[i]=digits[x];
        }
    
        std::cout << strresult;
    
        std::cin.get();
        return 0;
    }
    

    Den Quelltext habe ich bereits von dieser Seite unter http://www.c-plusplus.net/forum/viewtopic-var-t-is-104590-and-postdays-is-0-and-postorder-is-asc-and-start-is-0.html

    Ein paar Tips und Ideen, wie ich das umsetzen könnte fände ich super 🙂
    Ich habe den digitalen Produktkey als string vorliegen und könnte diesen an die neue Funktion übergeben.

    Vielen Dank für Eure Hilfe im Voraus!

    Lieben Gruß,
    Antispy


Log in to reply