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

Langage Delphi Discussion :

Détecter si l'on se trouve sur une machine virtuelle différente


Sujet :

Langage Delphi

  1. #1
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2003
    Messages
    422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2003
    Messages : 422
    Points : 238
    Points
    238
    Par défaut Détecter si l'on se trouve sur une machine virtuelle différente
    Bonjour,

    Afin de mieux protéger mes logiciels (au niveau du nombre de licences vendues), j'aimerais éviter que l'on puisse les installer à l'infini via des machines virtuelles (si c'est possible).

    Si c'est possible, j'aimerais ne pas forcément bloquer l'installation de mon logiciel sur une MV, mais le rendre utilisable uniquement sur un seul ordinateur, et qu'il se bloque si la MV se trouve sur un autre ordi.

    Donc ma questions :

    Au sein de la machine virtuelle, est-il possible de détecter que l'on se trouve sur un ordinateur différent ? (je pense à utiliser les MAC adresses, mais pas encore sûr).

    Avez-vous déjà eu des problèmes de ce genre ? Je ne trouve pratiquement rien à ce sujet sur le forum et même sur le web, mais je comprends que ça ne doit pas être évident...

    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Sache que dans une VM de chez Sun Innotek Virtual Box, il y a un ensemble de processus qui tourne, si ces process existe, tu es dans une machine virtuel

    pour VMWare, je ne l'ai pas sous la main, lorsque je l'avais utilisé, il me semble aussi avoir vu des process

    l'Adresse MAC, pourquoi pas ... le problème c'est sur quel critère éliminé une adresse ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 170
    Points
    4 170
    Par défaut
    J'ai déjà vu des applis refuser de s'installer dans des machines virtuelles (Essaie d'installer VMWare dans une machine virtuelle...) donc tu peux détecter si tu te trouves dans une machine virtuelle.
    Par contre, la technique à utiliser pour celà risque d'être spécifique à chaque type de machine virtuelle. Donc tu risques d'en oublier...

    Afin de mieux protéger mes logiciels (au niveau du nombre de licences vendues), j'aimerais éviter que l'on puisse les installer à l'infini via des machines virtuelles (si c'est possible).
    Bon courage.
    Déjà, ça ne sert à rien de contrôler quoi que ce soit à l'installation (sauf pour interdire purement et simplement l'installation dans une VM). En effet, l'intérêt d'utiliser une VM, c'est tu fais l'installation une et une seule fois, et ensuite tu copies la machine complète, pour avoir un nouvel environnement pré-installé.


    je pense à utiliser les MAC adresses, mais pas encore sûr
    Le problème c'est que la carte réseau elle-même est virtualisée par la VM. En d'autres termes, il est tout à fait possible que toutes les VM possèdent la même adresse MAC.
    Par exemple, installe un VMWare avec une config réseau en Host-only (où même en NAT). Dans ce cas, l'adresse MAC n'est pas nécessaire pour que la trame ethernet arrive jusqu'à la machine hôte. Ensuite, c'est la VM qui l'acheminera jusqu'à la carte réseau virtuelle.
    Je crois que tu peux même aller jusqu'à définir manuellement l'adresse MAC de la carte virtuelle...

  4. #4
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2003
    Messages
    422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2003
    Messages : 422
    Points : 238
    Points
    238
    Par défaut
    Effectivement, d'après la continuation de mes recherches, je ne trouve rien pour différencier la machine physique sur laquelle est installée la machine virtuelle.

    Je me contenterai donc pour l'instant de bloquer l'installation des logiciels sur une machine virtuelle.

    Le code que j'ai déniché pour contrôler si l'on se trouve dans VMWare ou VPC

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    program IsInVM;
     
    {$APPTYPE CONSOLE}
     
    uses
      windows;
     
    function InVMware: Boolean;
    asm
        XOR     EAX, EAX
     
        PUSH    OFFSET @@Handler
        PUSH    DWORD PTR FS:[EAX]
        MOV     DWORD PTR FS:[EAX], ESP
        MOV     EAX, 564D5868h
        MOV     EBX, 3c6cf712h
        MOV     ECX, 0Ah
        MOV     DX, 5658h
        IN      EAX, DX
        MOV     EAX, True
        JMP     @@NotHandle
    @@Handler:
        MOV     EAX, [ESP+$C]
        MOV     TContext(EAX).EIP, OFFSET @@Handled
        XOR     EAX, EAX
        RET
    @@Handled:
        XOR     EAX, EAX
    @@NotHandle:
        XOR     EBX, EBX
        POP     DWORD PTR FS:[EBX]
        ADD     ESP, 4
    end;
     
     function IsInVPC: boolean; assembler;
    asm
      push ebp
     
      mov  ecx, offset @@exception_handler
      mov  ebp, esp
     
      push ebx
      push ecx
      push dword ptr fs:[0]
      mov  dword ptr fs:[0], esp
     
      mov  ebx, 0 // flag
      mov  eax, 1 // VPC function number
     
      // call VPC
      db 00Fh, 03Fh, 007h, 00Bh
     
      mov eax, dword ptr ss:[esp]
      mov dword ptr fs:[0], eax
      add esp, 8
     
      test ebx, ebx
      setz al
      lea esp, dword ptr ss:[ebp-4]
      mov ebx, dword ptr ss:[esp]
      mov ebp, dword ptr ss:[esp+4]
      add esp, 8
      jmp @@ret
      @@exception_handler:
      mov ecx, [esp+0Ch]
      mov dword ptr [ecx+0A4h], -1
      add dword ptr [ecx+0B8h], 4
      xor eax, eax
      ret
      @@ret:
    end;
     
    begin
     
     
    if IsInVPC then writeln('Virtual PC detected') else writeln('Virtual Pc not detected');
    if InVMware then writeln('VMWare Machine detected') else writeln('VMWare Machine not detected');
     
    readln;
     
    end.

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2005
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 1
    Points : 0
    Points
    0
    Par défaut Delphi 10 seattle
    Bonjour, jusqu'à présent j'utilisais ces deux fonctions pour détecter les machine virtuelle les plus utilisées et cela fonctionnait bien. Malheureusement cela n'a pas l'air de fonctionner avec la nouvelle version de delphi que nous vennons d'acquérir (delphi 10 seattle). Quelqun peu m'aider ? comment puis-je détecter que l'exécutable tourne dans une machine virtuelle autrement, ou corriger ce code pour delphi 10 ? merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Détecter la présence d'un SGBD sur une machine
    Par mysianne dans le forum Général Java
    Réponses: 8
    Dernier message: 12/02/2014, 17h57
  2. CPAN sur une machine virtuelle unix
    Par Jasmine80 dans le forum Modules
    Réponses: 9
    Dernier message: 13/08/2008, 09h19
  3. vista sur une machine virtuelle
    Par Nemesys dans le forum Windows Vista
    Réponses: 16
    Dernier message: 01/02/2007, 19h12
  4. Accéder à un serveur sur une machine virtuelle?
    Par Death83 dans le forum Administration
    Réponses: 2
    Dernier message: 21/11/2006, 16h13

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