IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[C#] Comment créer une clé d'enregistrement [FAQ]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Par défaut [C#] Comment créer une clé d'enregistrement
    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.

  2. #2
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    Faut le coder.

  3. #3
    Membre éclairé Avatar de joefou
    Profil pro
    Inscrit en
    Février 2005
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 248
    Par défaut
    Citation Envoyé par Mose
    Faut le coder.
    +1

    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.

  4. #4
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    Citation Envoyé par joefou
    Pour ma part je fais référence au numéro de série du disque dur, par le biais d'une API
    Ah ouais ? Marrant C'est quelle API ?

  5. #5
    Membre éclairé Avatar de joefou
    Profil pro
    Inscrit en
    Février 2005
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 248
    Par défaut
    Bon c'est en VB.NET, je la déclare comme ceci:

    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
    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
    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
    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.

  6. #6
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    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();
    }

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 264
    Par défaut
    Citation Envoyé par joefou
    +1

    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.
    Intéressant ! Et tu aurais quelques conseils sur le choix de l'algo de codage/décodage ??

    Merci

  8. #8
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Citation Envoyé par joefou
    +1

    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.
    Oui mais si le gars veux changer son disque ensuite ? Il se passe quoi ?
    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

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 264
    Par défaut
    Citation Envoyé par SaumonAgile
    Oui mais si le gars veux changer son disque ensuite ? Il se passe quoi ?
    Probablement qu'il faut regénérer une clé

    D'ailleurs la clé, ça se stocke où, dans le registre ?

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 264
    Par défaut
    Citation Envoyé par joefou
    +1

    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.
    Question d'un novice en cryptographie :

    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 ?

  11. #11
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Citation Envoyé par vladvad
    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# ...

  12. #12
    Membre Expert Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Par défaut
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(licence.isValid()){....}
    après :

  13. #13
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Voila un truc intéressant à mettre dans la FAQ

  14. #14
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Par défaut
    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

Discussions similaires

  1. Réponses: 30
    Dernier message: 30/05/2009, 18h49
  2. comment créer une macro d'enregistrements
    Par zalino dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 30/07/2008, 08h44
  3. comment créer une image sous forme d'eclipse(ronde)
    Par unix27 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 15/05/2005, 22h16
  4. [débutant] Comment créer une base ?
    Par laffreuxthomas dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 14/12/2004, 22h12
  5. Comment créer une Table dans 1 Bdd ACCESS avec Builder??
    Par makandja dans le forum C++Builder
    Réponses: 6
    Dernier message: 17/03/2004, 20h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo