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++Builder Discussion :

V�rifier une Clef USB (Flash disk)


Sujet :

C++Builder

  1. #1
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par d�faut V�rifier une Clef USB (Flash disk)
    Bonjours � tous,

    Je vien te finir mon logiciel de gestion, Maintenant je cherche � ce que mon logiciel d�marre si seulement si Le num�ro de s�rie d'une cl�f USB (Flash disk) est bon (enregistrer dans une base de donn�e par exemple).

    Le probl�me est que je ne sais pas comment faire pour d�t�cter cette Clef, et comment avoir son N� de s�rie.

    Merci de m'aider svp.

  2. #2
    Membre �clair� Avatar de BOUBOU81
    Profil pro
    system integrator
    Inscrit en
    Juin 2004
    Messages
    358
    D�tails du profil
    Informations personnelles :
    Localisation : Allemagne

    Informations professionnelles :
    Activit� : system integrator

    Informations forums :
    Inscription : Juin 2004
    Messages : 358
    Par d�faut
    Voici comment faire pour proteger son logiciel avec delphi
    fais-la meme chose avec C++ Builder
    http://badrou.developpez.com/delphi/trial/

  3. #3
    Membre �prouv� Avatar de cfdev
    Homme Profil pro
    Passionn�
    Inscrit en
    Octobre 2004
    Messages
    220
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Passionn�

    Informations forums :
    Inscription : Octobre 2004
    Messages : 220
    Par d�faut
    lut,
    une solution que j'ai utilis� pour une recherche de USB KEY :

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    bool __fastcall TForm1::SearchVolume(AnsiString NameDisk)
    {
    const int Max_Length = 256;
    char * VolName = new char[Max_Length];
    char * FileSysName = new char[Max_Length];
    unsigned long VolSerial;
    unsigned long FileMaxLen;
    unsigned long FileFlags;
    AnsiString Message;
    char *lecteur = new char[5];
     
     for(int i=0;i<5;i++)
        lecteur[i]= 0x00;      // RAZ
     
     for(int i=65;i<75;i++)  // Scan de A: à K:
     {
      *lecteur = (char)i;
      *(++lecteur)= ':';
      *(++lecteur)= '\\';
      lecteur -=2;
     
       if(GetVolumeInformationA(lecteur, VolName, Max_Length, &VolSerial, &FileMaxLen, &FileFlags, FileSysName, Max_Length))
       {
       AnsiString Name = VolName;
        if(Name == NameDisk)
         {
          Message = "Nom du disque : " + AnsiString(VolName);
          Message += "\nSystème de fichiers : " + AnsiString(FileSysName);
          Message += "\nNuméro de série : " + FloatToStr(VolSerial);
          Ident = lecteur;
          LabelVolume->Caption = Message;
          delete[] lecteur;
          delete[] VolName;
          delete[] FileSysName;
          return 0;// OK
         }
       }
     }
     
     Message = "Nom du disque : INDISPONILE";
     Message += "\nSystème de fichiers : INDISPONILE";
     Message += "\nNuméro de série : INDISPONILE";
     
     delete[] lecteur;
     delete[] VolName;
     delete[] FileSysName;
     
    LabelVolume->Caption = Message;
    return 1; // ERREUR;
    }
    ++

  4. #4
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par d�faut
    Bonjours � tous,

    Merci pour votre aide, pour la solution de "Virtua" je pense qu'il faut donner le nom du lecteur Usb en param�tre, peut-on le faire automatiquement. SVP Es-ce que c'est possible de donner un exemple d'utilisation.

    Merci

  5. #5
    Membre �prouv� Avatar de cfdev
    Homme Profil pro
    Passionn�
    Inscrit en
    Octobre 2004
    Messages
    220
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Passionn�

    Informations forums :
    Inscription : Octobre 2004
    Messages : 220
    Par d�faut
    lut,
    effectivement il faut le nom du disk pour faire la recherche mais tu peux adapter mon code en fonction de tes besoins, par exemple rechercher le disk en fonction de son num�ro de serie...

    Pour cette fonction:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    if(SearchVolume(EditNameDisk->Text)) ShowMessage(("Lecteur INDISPONILE");
    else ShowMessage(("Lecteur OK");
    remarque : comme cette recherche balaye les diff�rents p�riphs, je te conseil d'effectuer la recherche uniquement lorsque tu en as besoin, car pour les possesseur de lecteur de disquette cela fait un petit bruit fort d�sagr�able...

    ++

  6. #6
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par d�faut
    Merci � "virtuA", voici le code qui verifi toutes les disque amovible disponible sur le PC et verifi leur serial :

    La fonction qui verifie le serial d'un disque amovible est la 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
     
    bool __fastcall TForm1::CheckDongle(AnsiString pLecteur, unsigned long pSerialVol)
    {
      char * VolName = new char[256];
      char * FileSysName = new char[256];
      unsigned long VolSerial;
      unsigned long FileMaxLen;
      unsigned long FileFlags;
     
      if(GetVolumeInformation(pLecteur.c_str(), VolName, 256, &VolSerial, &FileMaxLen, &FileFlags, FileSysName, 256))
         {
          AnsiString Name = VolName;
          if(VolSerial == pSerialVol)
           {
            delete[] VolName;
            delete[] FileSysName;
            return true ;
           }
         }
     
       delete[] VolName;
       delete[] FileSysName;
       return false ;
    }

    par exemple, dans le OnCreate de la fiche principale:

    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
    28
    29
     
      static char * Lecteur[]={"c:\\","d:\\","e:\\","f:\\",
          "g:\\","h:\\","i:\\","j:\\","k:\\","l:\\","m:\\","n:\\","o:\\","p:\\",
          "q:\\","r:\\","s:\\","t:\\","u:\\","v:\\","w:\\","x:\\","y:\\","z:\\"};
     
      bool bExist ;
      for(int x =0; x < 24; x++ )
        {
         if(GetDriveType(Lecteur[x]) == DRIVE_REMOVABLE)
           {
             if(CheckDongle(Lecteur[x], 1285501970))
               {
                 ShowMessage("Démarrage en cours...") ;
                 delete[] Lecteur ;
                 return ;
               }
             else
                 bExist = true ;
           }
         else
             bExist = false ;
        }
     
      if(bExist)
        ShowMessage("Le code du Dongle est incorrect") ;
      else 
        ShowMessage("Le Dongle n'est pas connecté") ;
     
      Application -> Terminate() ;
    Ici, le n� de s�rie recherch� est "1285501970".

    Merci � tous ...

    @+

  7. #7
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par d�faut
    Pardon,
    remplacer :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    for(int x =0; x <= 25; x++ )
    par :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    for(int x =0; x < 24; x++ )
    EDIT INFO : Je me suis permis de r�percuter la modification � faire dans le code du post pr�c�dent ;-). Vous pouvez donc l'utiliser sans probl�me !

  8. #8
    Membre �prouv� Avatar de cfdev
    Homme Profil pro
    Passionn�
    Inscrit en
    Octobre 2004
    Messages
    220
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Passionn�

    Informations forums :
    Inscription : Octobre 2004
    Messages : 220
    Par d�faut
    N'oublions pas le petit

  9. #9
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par d�faut
    Voil� ... @+

  10. #10
    Membre Expert
    Avatar de netah25
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    3 233
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 233
    Par d�faut
    quelqu'un saurait comment capter l'introduction d'une cl� USB (WMI surement) comme ca on pourrait passer le test en service ensuite ...

    des id�e ?

  11. #11
    R�dacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par d�faut
    Je possede quelques fichiers de Bernard ACQUIER decrivant la connection USB je pensais m'en servir pour une camera USB mais il y a eut une discution dans un Forum et je ne m'en servirais pas je peux les passer mais c'est assez volumineux deux fichiers de plus de 2Mo si ca peut aider

  12. #12
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par d�faut
    Au chargement du service, en initialise une variable avec le nbr de disque disponible, et dans un timer en execute le code ci-dessous, et � chaque "interval" en verifi le nbr de disque avec la variable, si il ya un changement en met � jour la variable


    @+

  13. #13
    Membre exp�riment� Avatar de Bily.sdi
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    208
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 208
    Par d�faut comment lire le vrai numero du fabricant d'un clef usb !
    une question ! (piratage)

    il est possible de pirater un protetion via clef usb !
    SAUF SI ON LIT BIEN LE NUMERO D ADRESSE MAC !! le numero du fabricant.

    vers qu elle autre clef usb ?
    je veux parler des disque dur portable en usb !

    comment copier
    avec ce code on peut modifier le numero de serie d'un disque dur.

    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
    #define _WIN32_WINNT 0x0500
     
    DWORD GetDriveNro()
    {
    DWORD dwnro = 0;
    GetVolumeInformation(szvol, 0, 0, &dwnro, 0, 0, 0, 0);
    return dwnro;
    }
     
    void __stdcall ChangeDrvNro(HWND hdlg)
    {
    DWORD dwnro, dwret;
    dwnro = GetDlgItemInt(hdlg, IDED_NRO, (int*)&dwret, 0);
    if(!dwret || !dwnro) {
    MessageBox(hdlg, "Donner un nombre > 0 ET <= 4294967295", szappname, 0x30);
    return;
    }
    dwret = SetHdSerial((DWORD) szvol[0], dwnro);
    if(!dwret) MessageBox(hdlg, "ACCOMPLI", szappname, 0x40);
    else if(dwret != SRL_SYSUNKNOWN) DisplayLastError(hdlg, dwret);
    else MessageBox(hdlg, szSYSUNKNOWN, szappname, 0x30);
    }
    j'ai pas encore tester avec une vrai clef usb.
    comment lire le vrai numero du fabricant d'un clef usb !

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [Cl� USB] comment flasher une cle usb (flash disk)
    Par rezki0 dans le forum P�riph�riques
    R�ponses: 0
    Dernier message: 12/09/2013, 18h29
  2. Protection d�une clef USB (flash disk)
    Par bonbino dans le forum Windows
    R�ponses: 3
    Dernier message: 02/03/2009, 14h03
  3. Utiliser une clef USB comme de la ram de m�moire vive
    Par Lorponos dans le forum Composants
    R�ponses: 28
    Dernier message: 18/08/2006, 18h32
  4. [Nero] Utiliser un CD-RW comme une clef USB
    Par Furius dans le forum P�riph�riques
    R�ponses: 6
    Dernier message: 24/10/2005, 17h22
  5. [Syst�me] Trouver une clef USB avec PHP
    Par chico_du_33 dans le forum Langage
    R�ponses: 8
    Dernier message: 05/10/2005, 17h29

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