Bonjour à tous.
Je suis confronté à un soucis que je ne pensais pas rencontrer.
Nous avons mis en place un système de licence semi-connectée pour nos applications.
L'idée est que l'application installée chez le client, calcule un identifiant puis interroge un service web afin d'obtenir un fichier de licence.
La détermination de l'identifiant s'appuie sur les données de la machine.
Voici la fonction clé utilisée pour que vous puissiez comprendre.
On retrouve facilement ce code sur le web.
Nous utilisons cette fonction pour obtenir différents propriétés de la machine :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 public string GetIdentifier(string wmiClass, string wmiProperty) { string result = ""; ManagementClass mc = new ManagementClass(wmiClass); ManagementObjectCollection moc = mc.GetInstances(); foreach (System.Management.ManagementObject mo in moc) { if (result == "") { try { result = mo[wmiProperty].ToString(); break; } catch { } } } return result; }
Nota : Nous avons retiré du calcul, la version du bios puisque lorsque le bios était mis à jour, l'identifiant changeait.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 GetIdentifier("Win32_BIOS", "Manufacturer") GetIdentifier("Win32_BIOS", "IdentificationCode") GetIdentifier("Win32_BIOS", "SerialNumber") GetIdentifier("Win32_BaseBoard", "Model") GetIdentifier("Win32_BaseBoard", "Manufacturer") GetIdentifier("Win32_BaseBoard", "Name") GetIdentifier("Win32_BaseBoard", "SerialNumber")
Jusqu'ici tout va bien.
Après avoir lu ces infos, nous les assemblons et nous passons l'assemblage au MD5.
Sur le concept, c'est pas mal.
Or, cette semaine, j'ai eu droit à une collision de Hash.
Comment cela est-il possible ?
Ce serait probable si nous avions une volume de client beaucoup, beaucoup, beaucoup plus important. Nous avons près de 400 clés de licence.
Je me suis connecté chez le client et j'ai exécuté un outil permettant de voir les données utilisées par le calculateur.
Le résultat est que toute les propriétés lues sont à vide. C'est pas possible. Il y a forcément quelquechose.....
Le client me dit que c'est une machine virtuelle (VM) Windows hébergée sur une machine linux.
Puisque je me suis penché sur le problème suite à la détection de collision de hash. Il y a donc 2 machines qui ont ce problème.
Je n'ai pas réussi à contacter le second client.
Je cherche à comprendre si le fait d'avoir une VM Windows hébergé sur du linux peut être la cause, ou bien est-ce que cela pourrait venir d'autre chose tel que le compte utilisé qui n'est pas admin,....
Je vous remercie de votre aide.
Partager