mauvaise Clé windows8

Bug #1250346 reported by frank
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
OCS Inventory: Windows Agent
Confirmed
Medium
Didier Liroulet

Bug Description

Bonjour

Mon pb c'est un poste que j'ai installé avec une licence mono poste (mail de Microsoft on va l'appeler licence A)
OCS me détecte une licence B.
Free PC Audit me detect la Licence B
Belarc advisor me detect la Licence A
Windows 8 Product Key viewer me detect la Licence A
Keyfinder me detect la licence A

Voir fichier joint . La bonne licence est celle lue par Keyfinder soit celle qui commence par QV864-.....

Merci

Revision history for this message
frank (fantonio) wrote :
Changed in ocsinventory-windows-agent:
assignee: nobody → Didier Liroulet (dliroulet)
importance: Undecided → Medium
status: New → Confirmed
Revision history for this message
frank (fantonio) wrote :

Bonjour,
C'est déjà la dernier version du client OCS

Revision history for this message
Didier Liroulet (dliroulet) wrote :

Bonjour,

Sur les PC livrés avec Windows 8 OEM, la licence est stockée dans le Bios de la machine.

Il nous faut trouver l'algorithme car il n'est pas documenté par M$...

Cdlt

Revision history for this message
Didier Liroulet (dliroulet) wrote :

Same error on Windows 2012

Report in french.

"Nous rencontrons un problème de clé sur les serveurs en version 6.2.9200 (windows 2012/8) et 6.3.9600 (windows 2012 R2/8.1).
En effet, la clé remontée par OCS est faussée car elle ne correspond pas à la clé entrée lors de l'activation.

Pour comparer, nous utilisons une méthode WMI (que nous certifie Microsoft d’être sur) pour récupérer les 5 derniers digits:
dans la classe root\cimv2: "Select PartialProductKey From SoftwareLicensingProduct"

Regards

Revision history for this message
Alexandr Roman (freebsderiy) wrote :

Sorry for bad english.
To fix the bug, you need to change GetWindowsProductKey in http://bazaar.launchpad.net/~dliroulet/ocsinventory-windows-agent/trunk/view/head:/SysInfo/Registry.cpp#L3655
add:
 //after line 3672
BYTE containsN[1];

 //after line 3696
containsN = (BinaryKey[14] >> 3) & 1;

//after line 3707
BinaryKey[14] = BinaryKey[14] & 247;
if (containsN ) {
    firstLeterIndex=0;
    for (i=0; i<24; i++) {
        if (DecodedKey[0] == KeyChars[i]) {
            firstLeterIndex = i;
        }
    }
    NewDecodedKey = DecodedKey.substr(1);
    DecodedKey = NewDecodedKey.substr(0,firstLeterIndex) + 'N' + NewDecodedKey.substr(firstLeterIndex)
}

Not Tested. No configured visualstudio.
Testet with python 3.2 on windows xp, 7 pro 32, 8 pro 32.

from struct import *
KeyChars = ['B','C','D','F','G','H','J','K','M','P','Q','R','T','V','W','X','Y','2','3','4','6','7','8','9']
ProdKey=''
#15 bytes BinaryKey
c1 = b'\x68\x8e\x52\x4c\x42\x70\x84\x16\xf4\x57\x18\x19\x2c\xb7\x00'
c2 = unpack('BBBBBBBBBBBBBBB',c1)
c3 = bytearray(c1)
containsN = (c3[len(c3)-1] >> 3) & 1
c3[len(c3)-1] = c3[len(c3)-1] & 247
for i in reversed(range(0,25)):
    k = 0
    for j in reversed(range(0,len(c3))):
        k = (k << 8) + c3[j]
        c3[j] = k // 24
        k = k % 24
    ProdKey = KeyChars[k] + ProdKey
    last = k
if containsN:
    firstLeter = 0
    for i in range(0,len(KeyChars)):
        if ProdKey[0] == KeyChars[i]:
            firstLeter = i
    ProdKey = ProdKey[1:]
    ProdKey = ProdKey[0:firstLeter] + 'N' + ProdKey[firstLeter:]
print(ProdKey)

Revision history for this message
Alexandr Roman (freebsderiy) wrote :

int firstLeterIndex; ////after line 3672

Revision history for this message
Alexandr Roman (freebsderiy) wrote :

my working registry.cpp and recompiled agent installer. Tested. Recompiled ocs agent instaler and key for win8.1 is correct

Revision history for this message
Alexandr Roman (freebsderiy) wrote :
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.