Comment faire pour protéger l'application, avec une clé d'enregistrement ?
L'utilisateur utilise pour la première fois le logiciel et il doit entrer un clé d'utilisation.
Comment faire pour protéger l'application, avec une clé d'enregistrement ?
L'utilisateur utilise pour la première fois le logiciel et il doit entrer un clé d'utilisation.
+1Envoyé par Mose
Pour ma part je fais référence au numéro de série du disque dur, par le biais d'une API, puis je fais ma cuisine avec un algo de codage/décodage pour avoir la clé de controle.
Ah ouais ? MarrantEnvoyé par joefou
C'est quelle API ?
Bon c'est en VB.NET, je la déclare comme ceci:
Et j'utilise dans la méthode suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Private Declare Function GetVolumeInformation Lib "kernel32" _ Alias "GetVolumeInformationA" ( _ ByVal lpRootPathName As String, _ ByVal lpVolumeNameBuffer As String, _ ByVal nVolumeNameSize As Integer, _ ByRef lpVolumeSerialNumber As Integer, _ ByRef lpMaximumComponentLength As Integer, _ ByRef lpFileSystemFlags As Integer, _ ByVal lpFileSystemNameBuffer As String, _ ByVal nFileSystemNameSize As Integer) As Integer
Il y a surement d'autres façons de procéder, j'ai hérité ça d'un projet VB5. Peut-être qu'avec le Framework 2.0 on a ça tout de suite dans une classe qui va bien.
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
24
25
26
27 Private Function ObtenirNumeroSerieDisquePoste() As String Dim root As String Dim volume_name As String Dim serial_number As Integer Dim max_component_length As Integer Dim file_system_flags As Integer Dim file_system_name As String Dim pos As Integer Dim Retour As String Try root = "c:\" volume_name = Space(1024) file_system_name = Space(1024) If GetVolumeInformation(root, volume_name, Len(volume_name), serial_number, max_component_length, file_system_flags, file_system_name, Len(file_system_name)) = 0 Then Throw New Exception("") Else Retour = serial_number.ToString() End If Catch ex As Exception m_Erreur += vbCrLf & "Problème de récupération d'information du volume" & vbCrLf & ex.Message Retour = "" End Try Return Retour End Function![]()
Intéressant ! La même en C# pour les amateurs
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
24
25
26
27 // on importe le fonction GetVolumeInformation du moyau [DllImport("kernel32.dll")] private static extern long GetVolumeInformation(string PathName, StringBuilder VolumeNameBuffer, UInt32 VolumeNameSize, out uint VolumeSerialNumber, out uint MaximumComponentLength, out uint FileSystemFlags, StringBuilder FileSystemNameBuffer, UInt32 FileSystemNameSize); /// <summary> /// Récupère le numéro de série du volumne /// </summary> /// <param name="driveletter">la lettre d'un volume : 'c', 'd', ...</param> /// <returns>le numéro de série du volume donné</returns> public static string GetHddSerial(char driveletter) { // le serial uint serial = 0; // nb max de fichiers sur ce volume uint nbfilemax = 0; // label du volume StringBuilder volumelabel = new StringBuilder(256); // volume flags. voir http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/getvolumeinformation.asp uint volumeflags = 0; // nom du file system StringBuilder filesystemname = new StringBuilder(256); // chemin du lecteur string drivepath = driveletter + ":\\"; // on appelle l'api long res = GetVolumeInformation(drivepath, volumelabel, (UInt32)volumelabel.Capacity, out serial, out nbfilemax, out volumeflags, filesystemname, (UInt32)filesystemname.Capacity); // on retourne le sérial return serial.ToString(); }
Intéressant ! Et tu aurais quelques conseils sur le choix de l'algo de codage/décodage ??Envoyé par joefou
Merci
Oui mais si le gars veux changer son disque ensuite ? Il se passe quoi ?Envoyé par joefou
Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.
Bonnes pratiques pour les accès aux données
Débogage efficace en .NET
LINQ to Objects : l'envers du décor
Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter
Probablement qu'il faut regénérer une cléEnvoyé par SaumonAgile
![]()
D'ailleurs la clé, ça se stocke où, dans le registre ?
Question d'un novice en cryptographie :Envoyé par joefou
J'imagine que ta clé de controle est forcément dans ton programme donc "facilement" lisible par un petit futé qui peut alors recréer l'algorithme de création des codes d'activation ?![]()
Peut être qu'il faudrait que l'application en C# s'articule autour d'un module en C++ chargé de générer/vérifier les clefs ... vu qu'il est beaucoup plus difficile de décompiler du C++ ou de jouer dans l'asm que d'utiliser Reflector sur le C# ...Envoyé par vladvad
Dans tous les cas, un programme en MSIL qui ne serait pas obfusqué et qui serait sujet à license, ça fait rire, puisqu'il suffirait, même dans le cas où le programme s'articulerait autour d'un module en C/C++ gérant la license, de modifier le code MSIL, tout bêtement, du style...
avant :
après :
Code : Sélectionner tout - Visualiser dans une fenêtre à part if(licence.isValid()){....}
Code : Sélectionner tout - Visualiser dans une fenêtre à part if(true){...}
Voila un truc intéressant à mettre dans la FAQ![]()
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
Au passage je rappel que le framework embarque sa propre API pour gérer les licences
http://msdn2.microsoft.com/fr-fr/lib...er(VS.80).aspx
A la base c'est utilisé pour les compos redistribuable mais bon![]()
Partager