Comprendre la clé de Windows

Voir le sujet précédent Voir le sujet suivant Aller en bas

Comprendre la clé de Windows

Message par gen-hackman le Ven 2 Juil - 0:42

ProductID seul
Jusqu'à Windows 95 (1995), Windows NT4 (1996), Office 97 (1997), ... cette clef est unique, composée de 10 chiffres décimaux.

Cette clef est de la forme : xxx-xxxxxxx
Avec x = [0,1,2,3,4,5,6,7,8,9]
le 1er groupe de 3 caractères peut être parfois constitué de la chaine OEM

Le nombre maximal théorique de clefs est donc égal à 10^10 -1

Par exemple : 335-3353356 (suggérée pour les produits MSDN requérant ce genre de clef)
Le 1er nombre de 3 chiffres peut être quelconque, le 2ème est tel que la somme de ses 7 chiffres doit être un multiple de 7.
Par exemple : 3 + 3 +5 + 3 + 3 + 5 + 6 = 28 (= 7 x 4)
On pourrait choisir aussi 0016077, 0005754, 7654321, 1111111, ...

: dans le cas de licences OEM (logiciels préinstallés par le fabricant de l'ordinateur), le 1er nombre de 3 chiffres est remplacé par la chaine alphanumérique "OEM".
Par exemple OEM-0016077

La clef xxx-xxxxxxx constitue la partie centrale d'un ensemble de 4 nombres xxxxx-xxx-xxxxxxx-xxxxx, appelé "ProductID" (identificateur de produit).

Le ProductID est stocké en clair dans la Base de registres dans une entrée de type REG_SZ :

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductID

Dans le ProductID, la clef (3+7) est encadré par 2 nombres de 5 chiffres :

Le 1er ne dépend que de la version du logiciel, par exemple :
50376 Windows NT4 SRV
52338 Windows 2000 PRO
52340 Windows 2000 SRV
55639 Windows XP HOME
55711 Windows XP PRO
76413 Windows XP Media Center Edition
69891 Windows 2003

On retrouve ce nombre à l'identique dans le fichier x:\i386\SETUPP.INI du CD d'installation
Cas d'un CD XP PRO : [Pid]
ExtraData=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Pid=55711000

Ce nombre semble dépendre également de la langue


Le 2ème est composé
d'un index sur 2 chiffres d'une clef publique servant à vérifier la clef,
suivi d'un nombre aléatoire de 3 chiffres.
ProductKey (avec ProductID dérivé)
Le système utilisé précédemment ne présentait aucune protection contre la copie illicite de logiciels, en raison de la simplicité triviale de l'algorithme de génération de clefs.
Avec la sortie de Windows 98 (1998) puis Windows 2000 (2000), Microsoft a complexifié le mécanisme de saisie de clef.
Désormais l'utilisateur doit être en possession d'une clef constitué de 25 caractères alphanumériques appelée "ProductKey" (clef de produit).

Cette clef est de la forme : xxxxx-xxxxx-xxxxx-xxxxx-xxxxx
Avec x = [B,C,D,F,G,H,J,K,M,P,Q,R,T,V,W,X,Y,2,3,4,6,7,8,9]

Le nombre maximal théorique de clefs est donc égal à 24^25-1, soit environ 3,2 10^34.
(3 10^24 fois plus qu'avec le système précédent !)

Par exemple : FCKGW-RHQQ2-YXRKT-8TG6W-2B7Q8
Pour information, cette clef - à ne surtout pas utiliser ! - est la plus célèbre des clefs "pirates" de Windows XP PRO Corporate, apparue lors du lancement de Windows XP en 2001.

On peut s'interroger sur ce jeu de caractères utilisé.
Il comporte 24 éléments, ce qui signifie tout simplement que l'on est en présence de nombres représentés en base 24.
D'où cette mixité de lettres et chiffres (comme c'est déjà le cas pour la représentation conventionnelle de nombre exprimés en base hexadécimale).
Il fallait donc choisir 24 caractères parmi les 26 lettres de l'alphabet et 10 chiffres.
Afin d'éviter toute confusion entre lettres et chiffres, Microsoft n'a pas retenu les lettres et chiffres suivants :

A (confusion possible avec H)
E (confusion possible avec F)
I (confusion possible avec L ou 1)
L (confusion possible avec I ou 1)
N (confusion possible avec M)
O (confusion possible avec Q ou 0)
S (confusion possible avec 5)
U (confusion possible avec V)
Z (confusion possible avec 2)
0 (confusion possible avec O ou Q)
1 (confusion possible avec I ou L)
5 (confusion possible avec S)
Par contre, il est regrettable que Microsoft ait laissé possible la confusion entre B et 8 .

Les chiffres de cette base 24 correspondent aux valeurs décimales suivantes :

B = 0 Q = 10 6 = 20 Puissances de 24

C = 1 R = 11 7 = 21 24^1 24
D = 2 T = 12 8 = 22 24^2 576
F = 3 V = 13 9 = 23 24^3 13824
G = 4 W = 14 24^4 331776
H = 5 X = 15 24^5 7962624
J = 6 Y = 16 ... ...
K = 7 2 = 17
M = 8 3 = 18
P = 9 4 = 19
Exemples :
2B7Q8 est le codage en base 24 de :

2 = 17 x 24^4 5640192
B = 0 x 24^3 0
7 = 21 x 24^2 12096
Q = 10 x 24^1 240
8 = 22 x 24^0 22
5652550 (en hexadécimal : 0x564046)

Inversement, le codage en base 24 de 2005 (en décimal) est :

2005 / 24 = 83 reste 13 V
83 / 24 = 3 reste 11 R
3 / 24 = 0 reste 3 F
FRV


Contrairement au ProductID, il n'existe pas dans la base de registres d'entrée contenant en clair (5 fois 5 caractères) la clef de produit (ProductKey).

On trouve seulement une entrée nommée DigitalProductID de type REG_BINARY.
Cette entrée concerne Windows, mais aussi des applications telles que Office, Visio, FrontPage, OneNote, Money, Internet Explorer ...
Sa taille est de 164 octets en général, mais peut atteindre parfois (cas de Internet Explorer) 256 octets.

Windows HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductID
Office 2003 HKLM\SOFTWARE\Microsoft\Office\11.0\Registration\{9011040C-6000-11D3-8CFE-0150048383C9}\DigitalProductID
FrontPage 2003 HKLM\SOFTWARE\Microsoft\Office\11.0\Registration\{9017040C-6000-11D3-8CFE-0150048383C9}\DigitalProductID
Visio 2003 HKLM\SOFTWARE\Microsoft\Office\11.0\Registration\{9051040C-6000-11D3-8CFE-0150048383C9}\DigitalProductID
One Note 2003 HKLM\SOFTWARE\Microsoft\Office\11.0\Registration\{90A1040C-6000-11D3-8CFE-0150048383C9}\DigitalProductID
Money 12 HKLM\SOFTWARE\Microsoft\Money\12.0\Registration\DigitalProductID
Internet Explorer HKLM\SOFTWARE\Microsoft\Internet Explorer\Registration\DigitalProductID

Le nombre maximal que l'on peut coder est donc 24^25 -1 (nombre de 25 chiffres compris entre 0 et 23), soit 3,2 x 10^34 comme cité plus haut.
Exprimé en puissances de 16, ce nombre est de l'ordre de 16^29.
Donc pour le représenter en base 16, il faudra 29 "chiffres" hexadécimaux, soit, après arrondi, 15 octets (1 octet étant représenté par 2 chiffres hexadécimaux).
Cette représentation binaire de la ProductKey est appelée "Raw Key" (clef brute) C'est ce que l'on observe dans toutes entrées DigitalProductID,
la Raw Key étant stockée sur 15 octets, entre les offsets 0x34 à 0x42.
Ne pas oublier que dans les architectures "Intel" (et compatible), les grandeurs binaires sont représentées en "Little Endian", c'est à dire que les octets de poids faibles sont en tête.

Dans l'exemple ci-contre, la Raw Key est le nombre (en hexadécimal) 03D3FC979F6BA773C899DEA7EF6380




On peut être amené à réinstaller des logiciels Microsoft (Windows, Office,..)
Pour cela il faut ressaisir la ProductKey au cours de la procédure d'installation.
Or cette clef étant souvent fournie sous la forme d'un autocollant posé sur l'emballage, il arrive fréquemment que l'on ait perdu cette clef.

D'où l'intérêt de pouvoir obtenir la ProductKey en clair, par conversion de la "RAW key" en nombre exprimé en base24.

En raison de la grandeur des nombres rencontrés, cette conversion ne peut se faire que par programmation.
Avec de possibles variantes, l'algorithme est toujours le même :

On effectue une division euclidienne du nombre par 24.
Le reste obtenu est le chiffre en base 24 des unités.
Puis on recommence la division euclidienne sur le quotient,
et ainsi de suite, jusqu'à ce que le quotient soit nul.
Chaque reste est un chiffre de poids de plus en plus fort.
Exemple :
Conversion de 7D5 (représentation hexadécimale de 2005) en base 24
(18 est la représentation hexadécimale de 24)

7D5 = 53 x 18 + 0D V
53 = 3 x 18 + 0B R
3 = 0 x 18 + 03 F
FRV



Il existe différents outils qui effectuent cette conversion :
Le 1er de cette catégorie fut le logiciel Aida32.
Mais c'est devenu un produit commercial (Everest)
Et seules les versions payantes donnent les "ProductKey".

WinfoKeys (Gratuit ) de Pierre TORRIS ,
qui donne par ailleurs un grand nombre d'informations.

KeyFinder (Gratuit )
qui est spécialement dédié à cet usage.

ViewPK (Gratuit)
script WSF de ma conception.
Il est doté de nombreuses fonctionnalités :
Affichage de la ProductKey de Windows
Recherche automatique de toutes les clefs DigitalProductID
(Office, FrontPage, Money, Visio,...)
Fonctionnement sur ordinateur local ou distant !
Affichage de la RAWKey
Calcul et affichage du ProductID
Calcul du ProductID à partir de n'importe quelle ProductKey


Relation entre ProductKey et ProductID
En raison de l'absence de toute documentation de la part de Microsoft, ces informations sont susceptibles d'évoluer au fur et à mesure des expérimentations effectuées.

Malgré la présence de la ProductKey, le ProductID subsiste toujours car c'est lui qui permet à Microsoft de détecter la provenance authentique ou frauduleuse du logiciel correspondant.

C'est ainsi que le Service Pack 1 (et suivants) de Windows XP refuse de s'installer sur les machines dotées dont le ProductID est de la forme :
XXXXX-640-0000356-23XXX
XXXXX-640-2001765-23XXX
car il dénote l'utilisation de clefs "pirates" de Windows XP PRO Corporate (licence en volume, qui ne nécessite pas d'activation, réservée aux professionnels).
Cette information est extraite du document Microsoft Technical Details on SP1 Changes to Microsoft Product Activation for Windows XP.
Lors de la sortie du SP1 (2002), ce document était disponible sur le site Microsoft à l'adresse http://www.microsoft.com/piracy/basics/activation/WPA_SP1_Market_Bulletin.doc mais il a disparu du site.

C'est par un procédé analogue que WGA (Windows Genuine Advantage) autorise ou non les téléchargements (hors correctifs de sécurité) depuis le site Windows Update. (via le contrôle ActiveX LegitCheckControl.dll)


Alors que le ProductID était autrefois saisi manuellement par l'utilisateur, et constituait le seul identificateur du produit, il est à présent dérivé de la ProductKey, par un algorithme (hachage) relativement complexe.
Microsoft ne fait qu'évoquer cet algorithme dans le document cité précédemment.
Il est contenu dans la DLL PIDgen.dll (située dans %systemroot%\system32) (PIDgen = acronyme de Product Identifier Generator)

On peut néanmoins trouver des informations très pertinentes à ce sujet dans le document Inside Windows Product Activation dû à la Compagnie Licenturion spécialisée dans les solutions de protections de logiciels.

L'algorithme ProductID=f(ProductKey) dépend du produit (Windows, Suite Office, Money, ...)

Ce qui suit ne concerne que Windows :
Opérations Exemples
Il faut tout d'abord convertir la ProductKey
(5 fois 5 caractères) en RAWkey binaire
comme exposé précédemment FCKGW-RHQQ2-YXRKT-8TG6W-2B7Q8
->
00C8D5F1B880E1C0EC45F9CC4B4046
(big endian)
Puis retenir les 31 1ers bits de poids faibles
(équivalent à effectuer un AND logique avec 0x7FFFFFFF) 4C4B4046

Puis décaler d'un bit vers la droite le résultat
(équivalent à une division euclidienne par 2) 2625A023
Convertir le résultat en décimal
(ajouter éventuellement des 0 en tête afin que le résultat comporte 9 chiffres) 640000035
Scinder ce nombre en 2 parties constituées des 3 premiers et des 6 derniers chiffres. 640
000035
Multiplier le 2ème nombre par 10, et lui ajouter un chiffre de telle façon que la somme de tous les chiffres soit un multiple de 7 0000350
+ 6
(0+0+0+0+3+5+6 = 2x7)
La partie centrale du ProductID est donc : 640-0000356

dans cet exemple, on retrouve un ProductID de ProductKey "blacklistée"
par le Service Pack 1 de Windows XP, qui dénote donc une clef "pirate"!


Seuls les 2ème et 3ème nombres sont utiles ici pour détecter la "provenance" d'une ProductKey.

Le chiffre des centaines du 2ème nombre semble indiquer la catégorie du logiciel
(information non garantie, obtenue expérimentalement) :

0xx : licence au détail
2xx : licence contrat Select
3xx : licence MSDN
6xx : licence en volume ("Corporate")
7xx : licence OEM


--------------------------------------------------------------------------------
avatar
gen-hackman

Messages : 93
Date d'inscription : 24/06/2010
Age : 46
Localisation : Bouches du rhône

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum