Lizenzkeys auslesen

Xaero1982

Well-Known Member
#1
Hallo miteinander,

gibt es eine Möglichkeit via WMI die Lizenzkeys von 2000/XP/Office auszulesen.

Bitte keine Tools, ich brauch das um es selbst in ein Programm einzufügen.

Also nur Code !
 

mrBean45

Well-Known Member
#3
Ohne WMI ..

C#:
    class MSKeyDecrypt
    {

        // Enumeration for comfortable use the function GetKey
        public enum Product
        {
            XP,
            Office10,
            Office11
        };

        // dirty registry trails/keys ...
        private static string XP = @"SOFTWARE\Microsoft\Windows NT\CurrentVersion";
        private static string Office10 = @"SOFTWARE\Microsoft\Windows NT\CurrentVersion";
        private static string Office11 = @"SOFTWARE\Microsoft\Office\11.0\Registration\{90510407-6000-11D3-8CFE-0150048383C9}";
        private static string RegKey = "DigitalProductId";

       
        public static string GetKey(Product product)
        {

            byte[] byteProductId = null;
            switch (product) {
                case Product.XP:
                    byteProductId = MyReg.readRegistry2(XP, RegKey);
                break;
                case Product.Office10:
                    byteProductId = MyReg.readRegistry2(Office10, RegKey);
                break;
                case Product.Office11:
                    byteProductId = MyReg.readRegistry2(Office11, RegKey);
                break;
            }

            return DecodeProductKey(byteProductId);
        }


        private static string DecodeProductKey(byte[] digitalProductId)
        {
            // Offset of first byte of encoded product key in
            //  'DigitalProductIdxxx" REG_BINARY value. Offset = 34H.
            const int keyStartIndex = 52;
            // Offset of last byte of encoded product key in
            //  'DigitalProductIdxxx" REG_BINARY value. Offset = 43H.
            const int keyEndIndex = keyStartIndex + 15;

            // alpha numeric characters that happen into product key
            char[] digits = new char[]
            {
                'B', 'C', 'D', 'F', 'G', 'H', 'J', 'K', 'M', 'P', 'Q', 'R',
                'T', 'V', 'W', 'X', 'Y', '2', '3', '4', '6', '7', '8', '9',
            };

            // Length of decoded product key
            const int decodeLength = 29;

            // Length of decoded product key in byte-form.
            // Each byte represents 2 chars.
            const int decodeStringLength = 15;

            // Array of containing the decoded product key.
            char[] decodedChars = new char[decodeLength];

            // Extract byte 52 to 67 inclusive.
            ArrayList hexPid = new ArrayList();
          


            for (int i = keyStartIndex; i <= keyEndIndex; i++)
            {
                hexPid.Add(digitalProductId[i]);
            }

            for (int i = decodeLength - 1; i >= 0; i--)
            {
                // Every sixth char is a separator.
                if ((i + 1) % 6 == 0)
                {
                    decodedChars[i] = '-';
                }
                else
                {
                    // Do the actual decoding.
                    int digitMapIndex = 0;
                    for (int j = decodeStringLength - 1; j >= 0; j--)
                    {
                        int byteValue = (digitMapIndex << 8) | (byte)hexPid[j];
                        hexPid[j] = (byte)(byteValue / 24);
                        digitMapIndex = byteValue % 24;
                        decodedChars[i] = digits[digitMapIndex];
                    }
                }
            }


            return new string(decodedChars);
        }


    }
 
Oben