Protection de logiciel par clé
bonjour,
voici en gros le principe :
Dans votre logiciel, il y a un bouton demande d'activation. Ce bouton génère un fichier ou une chaîne cryptée que votre client doit vous transmettre ( courrier électronique ). Dans ce fichier il y a des informations concernant le BIOS, la carte mère, la carte réseau, le disque dur ( pas des informations confidentielles, seulement des numéros de série ou info HARD). En recueillant ces informations vous jugez quelles sont ou quelle est l'information la plus fiable. Vous générez une clé d'activation cryptée en fonction de ces informations. Vous la transmettez à votre client. La partie activation de votre logiciel (lancé à chaque démarrage) vient alors décoder cette clé et vient vérifier que les infos Hard correspondent au matériel sur lequel est lancé le logiciel.
Pour vous aidez dans cette tâche, je vous propose la partie récolte d'informations. Voici une procédure qui utilise WMI avec assemblage DotNet, récupérant des infos pour générer ou contrôler un numéro de licence.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
// Résumé : Récupérer des informations système pour générer ou contrôler un numéro de licence
// Cette procédure utilise la collection pWMI et à incorporer dans celle-ci
// Syntaxe :
//RécupèreInfosLicence ()
//
// Paramètres :
// Aucun
// Valeur de retour :
// Aucune
//
//
// Pensé par Jurassic.Pork Juin 2010
//
PROCEDURE RécupèreInfosLicence()
InfoLicence est une structure
NumSérieDisque est une chaîne
NumVolDisque est une chaîne
NumMacAdresse est une chaîne
NumSérieCarteMère est une chaîne
NumSérieBios est une chaîne
FIN
sUneInformation est une chaîne
MonInfoLicence est une InfoLicence
// Récupération du numéro de série du 1er disque
sUneInformation = RécupèreContenu("Win32_PhysicalMedia",gsServeur + "root\CIMV2", "Tag LIKE '%PHYSICALDRIVE0'")
SI sUneInformation <> "" ALORS
MonInfoLicence.NumSérieDisque = TrouveInformation(sUneInformation,"SerialNumber")
SINON
MonInfoLicence.NumSérieDisque = "INVALIDE"
FIN
// Récupération du numéro de volume du disque C:
sUneInformation = RécupèreContenu("Win32_LogicalDisk",gsServeur + "root\CIMV2", "DeviceID='C:'")
SI sUneInformation <> "" ALORS
MonInfoLicence.NumVolDisque = TrouveInformation(sUneInformation,"VolumeSerialNumber")
SINON
MonInfoLicence.NumSérieDisque = "INVALIDE"
FIN
// Récupération de l'adresse MAC du premier adaptateur réseau valide
sUneInformation = RécupèreContenu("Win32_NetworkAdapter",gsServeur + "root\CIMV2", "PhysicalAdapter=True")
SI sUneInformation <> "" ALORS
MonInfoLicence.NumMacAdresse = TrouveInformation(sUneInformation,"MACAddress")
SINON
MonInfoLicence.NumMacAdresse = "INVALIDE"
FIN
// Récupération du numéro de série de carte mère
sUneInformation = RécupèreContenu("Win32_BaseBoard",gsServeur + "root\CIMV2")
SI sUneInformation <> "" ALORS
MonInfoLicence.NumSérieCarteMère = TrouveInformation(sUneInformation,"SerialNumber")
SINON
MonInfoLicence.NumSérieCarteMère = "INVALIDE"
FIN
// Récupération du numéro de série du BIOS
sUneInformation = RécupèreContenu("Win32_BIOS",gsServeur + "root\CIMV2")
SI sUneInformation <> "" ALORS
MonInfoLicence.NumSérieBios = TrouveInformation(sUneInformation,"SerialNumber")
SINON
MonInfoLicence.NumSérieBios = "INVALIDE"
FIN
// A vous de jouer pour générer ou vérifier la clé de licence avec les infos les plus justes. |
Pour utiliser cela dans votre projet il vous faut :
1 - Utiliser l'assemblage .NET "System.Management" :
Menu Atelier/.NET/Utiliser Un Assemblage .NET dans ce projet
Dans la fenêtre qui s'ouvre cliquer sur "Lister les assemblages référencés"
Quand la recherche est terminée cocher "Mscorlib" et "System.Management"
2 - Récupérer la collection de procédure pWMI.wdg qui se trouve dans l'exemple complet WD WMI DOTNET et l'inclure dans votre projet
3 - Rajouter la procédure RécupèreInfosLicence dans votre collection pWMI.wdg
Contrainte : comme vous utilisez un assemblage .Net, il faut que le Framework dotnet soit installé sur la station qui utilisera cette procédure.
Ami calmant, J.P ;-)