Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   VM erkennen (https://www.delphipraxis.net/133819-vm-erkennen.html)

macadamia 9. Mai 2009 21:13


VM erkennen
 
Ich möchte gerne in meiner Delphi-Anwendung (Win32) mit hoher Treffsicherheit herausfinden, ob das Programm in einer VM läuft. Hat da schon jemand Erfahrungen damit? Gibts dazu vielleicht schon Code? Das wäre mir eine große Hilfe!
Grüße
Andreas

Namenloser 9. Mai 2009 21:15

Re: VM erkennen
 
Willkommen in der DP :party:

Es gibt schon zu sehr vielen Fragen Lösungen hier im Forum, also benutze bitte zuerst die Suche, bevor du eine Frage stellst. Mit 5 Sekunden googlen, habe ich z.B. diese Unit gefunden.

macadamia 9. Mai 2009 21:33

Re: VM erkennen
 
Entschuldigung! Ich HABE ein paar Suchabfragen hier angestellt, habe aber nichts gefunden. "VM" gibt keine Treffer und "virtuell" gibt 320 Treffen, bei den ersten 100 ist nichts passendes dabei oder ich hab's übersehen. Naja, war vielleiche eine ungeschickte Suche von mir. Ist normal nicht meine Art, gleich mal loszuposten. Sorry... und Danke!
Gruß
Andreas

Namenloser 9. Mai 2009 21:36

Re: VM erkennen
 
Die Suchfunktion hier im Forum hat ein paar Macken. Ich suche meistens über Google mit site:delphipraxis.net <Suchbegriff>

generic 9. Mai 2009 23:01

Re: VM erkennen
 
Das funtkioniert für VMWare:

Delphi-Quellcode:
////////////////////////////////////////////////////////////////////////////////
//
//  Simple VMware check on i386
//
//    Note: There are plenty ways to detect VMware. This short version bases
//    on the fact that VMware intercepts IN instructions to port 0x5658 with
//    an magic value of 0x564D5868 in EAX. However, this is *NOT* officially
//    documented (used by VMware tools to communicate with the host via VM).
//
//    Because this might change in future versions - you should look out for
//    additional checks (e.g. hardware device IDs, BIOS informations, etc.).
//    Newer VMware BIOS has valid SMBIOS informations (you might use my BIOS
//    Helper unit to dump the ROM-BIOS ([url]http://www.bendlins.de/nico/delphi[/url]).
//

function IsVMwarePresent(): LongBool; stdcall; // platform;
begin
  Result := False;
 {$IFDEF CPU386}
  try
    asm
            mov    eax, 564D5868h
            mov    ebx, 00000000h
            mov    ecx, 0000000Ah
            mov    edx, 00005658h
            in     eax, dx
            cmp    ebx, 564D5868h
            jne    @@exit
            mov    Result, True
    @@exit:
    end;
  except
    Result := False;
  end;
{$ENDIF}
end;

DP-Maintenance 10. Mai 2009 00:19

DP-Maintenance
 
Dieses Thema wurde von "Christian Seehase" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Es geht um eine Delphi-Anwendung.

SirThornberry 10. Mai 2009 08:46

Re: VM erkennen
 
Ich frag mich immer wieder wozu sowas gut sein soll. Man benutzt eine VMWare meist zum testen von Programmen in einer sicheren Umgebung und da finde ich es kontraproduktiv wenn sich ein Programm dort anders verhält auf einem "richtigen" Rechner.
Zudem macht es auch Sinn VMs zu nutzen um auf einer Hardware mehrere Programme laufen lassen zu können die, auf dem gleichen BS installiert, in Konflikt kommen.
Ich finde es etwas daneben leute mit VM anders zu behandeln als Leute die sich 5 Rechner hinstellen.

macadamia 10. Mai 2009 10:17

Re: VM erkennen
 
Ich brauche das für folgendes: Ein Programm läuft als 30-Tage-Testversion ohne funktionale Einschränkung. Danach muss das Programm auf dem Rechner freigeschaltet werden. Das kann man mit einer VM leicht umgehen (immer nach 30 Tagen zum letzten Snapshot zurück und Testversion neu installieren). Daher würde ich die VM gerne erkennen und hier die Testversion einschränken...

RWarnecke 10. Mai 2009 11:13

Re: VM erkennen
 
Zitat:

Zitat von macadamia
Ich brauche das für folgendes: Ein Programm läuft als 30-Tage-Testversion ohne funktionale Einschränkung. Danach muss das Programm auf dem Rechner freigeschaltet werden. Das kann man mit einer VM leicht umgehen (immer nach 30 Tagen zum letzten Snapshot zurück und Testversion neu installieren). Daher würde ich die VM gerne erkennen und hier die Testversion einschränken...

Das gleiche kann ich ebenfalls machen, wenn ich meinen Rechner nach 30 Tage mit einem Images neu bespiele, wo Dein Programm noch nicht drauf ist.

Bernhard Geyer 10. Mai 2009 11:26

Re: VM erkennen
 
Zitat:

Zitat von RWarnecke
Zitat:

Zitat von macadamia
Ich brauche das für folgendes: Ein Programm läuft als 30-Tage-Testversion ohne funktionale Einschränkung. Danach muss das Programm auf dem Rechner freigeschaltet werden. Das kann man mit einer VM leicht umgehen (immer nach 30 Tagen zum letzten Snapshot zurück und Testversion neu installieren). Daher würde ich die VM gerne erkennen und hier die Testversion einschränken...

Das gleiche kann ich ebenfalls machen, wenn ich meinen Rechner nach 30 Tage mit einem Images neu bespiele, wo Dein Programm noch nicht drauf ist.

Aber vergiss nicht alle Dateistempel und Registry-Einträge zurück zu setzen. FlexLM als fertige Lizenzprüf-SW reagiert z.B. allergisch falls es Dateien mit Dateistempeln in der Zukunft findet. Und sowas lässt sich auch einfach selbst implementieren.

mjustin 10. Mai 2009 11:56

Re: VM erkennen
 
Zitat:

Zitat von macadamia
Ich möchte gerne in meiner Delphi-Anwendung (Win32) mit hoher Treffsicherheit herausfinden, ob das Programm in einer VM läuft. Hat da schon jemand Erfahrungen damit? Gibts dazu vielleicht schon Code? Das wäre mir eine große Hilfe!
Grüße
Andreas

Es ist nicht einfach zu lösen, da es mittlerweile viele Virutalisierungslösungen gibt, die alle unterschiedlich weit in das Gast-Betriebssystem eingreifen (im Idealfall merkt es überhaupt nichts). Ein einfacher Kopierschutz kann von Experten auch meistens mit wenig Aufwand geknackt werden...

Ein Ansatzpunkt wären die Netzwerkadapter, diese sind eventuell am Namen als VM Bestandteile erkennbar.

Zacherl 10. Mai 2009 12:44

Re: VM erkennen
 
Die Unit, die ich mit blackdrake entwickelt hatte, funktioniert soweit noch perfekt, allerdings darf keine vom Prozessor implementierte Technik wie xVM benutzt werden.

Fridolin Walther 10. Mai 2009 12:52

Re: VM erkennen
 
Alle in der Unit verwendeten Tests sind sinnbefreit und nutzlos, sobald eine der VMs die speziellen Virtualisierungstechniken der CPU nutzen. Auch nach bestimmter Hardware zu suchen ist sinnbefreit, zumal die ersten VM Lösungen diese Dinge bereits editierbar machen. Und wie bereits gesagt: Ob ich ne VM zurück setze oder alle 30 Tage ein Image zurück spiel ist nicht wirklich ein Unterschied.

Cyberbob 10. Mai 2009 13:04

Re: VM erkennen
 
Ausserdem scheint es hier um VMWare zu gehen, es gibt aber noch andere VM-Lösungen!

Reinhard Kern 10. Mai 2009 18:24

Re: VM erkennen
 
Zitat:

Zitat von macadamia
Ich brauche das für folgendes: Ein Programm läuft als 30-Tage-Testversion ohne funktionale Einschränkung. Danach muss das Programm auf dem Rechner freigeschaltet werden. Das kann man mit einer VM leicht umgehen (immer nach 30 Tagen zum letzten Snapshot zurück und Testversion neu installieren). Daher würde ich die VM gerne erkennen und hier die Testversion einschränken...

Hallo,

mal ganz abgesehen davon, dass ich das auch ohne VM umgehen kann - ich würde Software aus einer nicht vertrauenswürdigen Quelle (1. was weiss ich denn von dir 2. du vertraust mir ja auch nicht) erst mal in einer dafür vorhandenen VM testen - wenn das Programm dann nicht das Erwartete tut, ist der Test schon negativ beendet. Im Zweifelsfall verlange ich auch mein Geld zurück - eine VM ist ein PC wie andere auch und nichts kriminelles.

Gruss Reinhard

macadamia 10. Mai 2009 19:04

Re: VM erkennen
 
Bei der Software handelt es sich um eine Anwendung für Ingenieure, die unter den potentiellen Anwendern eine gewisse Bekanntheit hat. Insofern "kennt man mich" schon ein wenig. 90% sind auch bestehende Kunden, die eine neue Version testen wollen. Mir ist auch klar, das jeder Schutz überwindbar ist. Aber es ist schon deutlich mehr Aufwand, eine "echtes" Systemimage auf einem realen Computer aufzuspielen als eine VM zu Clonen. Ich würde das Testen auf der VM ja auch nicht unterbinden, nur würde ich dann z. B. erst mal die Druckfunktion deaktivieren.

Ich mache das jetzt in der Tat mal über die virtuelle Hardware. Die virtuellen Geräte lassen sich sehr gut am Namen erkennen. Und die meissten Namen lassen sich nicht so leicht ändern. Es soll ja, wie bei jeden Programmschutz, nur um ein gewisses Hinerniss gehen.

Andererseits werden wohl unter den "normalen" Anwendern nicht viele sein, die schon mit VM's arbeiten. Dürfte eher selten vorkomen, vielleicht lohnt auch mein Aufwand nicht.

SirThornberry 10. Mai 2009 19:12

Re: VM erkennen
 
Vorallem gibt es nicht nur VMWare sondern auch VirtualBox, VirtualPC etc.

Zacherl 10. Mai 2009 21:26

Re: VM erkennen
 
Zitat:

Zitat von 0xF30FC7
Alle in der Unit verwendeten Tests sind sinnbefreit und nutzlos, sobald eine der VMs die speziellen Virtualisierungstechniken der CPU nutzen.

Habe ich doch ein paar Posts weiter oben gesagt ..

Fridolin Walther 10. Mai 2009 21:27

Re: VM erkennen
 
Wie Dir vielleicht aufgefallen sein mag, gabs die Posts fast gleichzeitig ;).

Zacherl 10. Mai 2009 21:29

Re: VM erkennen
 
Zitat:

Zitat von 0xF30FC7
Wie Dir vielleicht aufgefallen sein mag, gabs die Posts fast gleichzeitig ;).

Ist mir in der Tat entgangen :mrgreen:

R2009 11. Mai 2009 05:21

Re: VM erkennen
 
Hi,
warum hackt ihr denn alle auf macadamia herum.

1.) Ich finde es bescheuert, dass man hier immer wieder die Suchfunktion um die Ohren gehauen bekommt.
Er wird sich schon was dabei gedacht haben, wenn er den Thread eröffnet. Vielleicht kommt dabei etwas neues raus.

2.) Er hat doch eine ganz klare Frage gestellt. Warum muss er sich dafür rechtfertigen warum er wie wo was macht. Das ist eine Unsitte die sich hier in letzter Zeit breit gemacht hat.

Viele Grüsse!
PS: Dies ist meine ganz persönliche Meinung zu dieser Diskussion!

macadamia 11. Mai 2009 08:42

Re: VM erkennen
 
Also, ich würde vorschlagen, jetzt keinen Flame aus dem Thread zu machen. Das mit der Google-Suche ist gut, hab ich was dazu gelernt, danke! Und meine Frage ist eigentlich auch beantworetet worde, Meinungen dazu habe ich ja schon eine Menge... Den Thread können wir also gerne abschliessen.

Luckie 11. Mai 2009 12:49

Re: VM erkennen
 
Gerade ein Kundenkreis wird zu sehen, dass sie mit einer legal erworbenen Anwendung arbeitet. Denn wenn rauskommt, dass sie mit einer nicht lizensierten Anwendung geaerbeitet haben, sind sie ziemlich am Arsch. Wenn deine Anwendung Ausrrucke macht, würde ich einfach ein Wasserzeichen in der Demoversion mitdrucken. Oder die Demoversion mittels Kompilerschalter in der Funktionalität einschränken.

@R2009: Hier wird nicht auf igrndwen rumgehackt, ihr werden nur möglich alternative Lösungebn aufgezeigft und die Schwächen der bestehenden. Letztendlich handelt es sich ja auch um ein Diskussionsforum.

R2009 11. Mai 2009 13:30

Re: VM erkennen
 
Hugh, der grosse Moderator hat gesprochen!
Dann muss das wohl so sein.
(Meine persönliche Meinung dazu ändert sich aber nicht!)

Mithrandir 11. Mai 2009 13:45

Re: VM erkennen
 
Er hat aber Recht, egal, was du von Luckie hältst. Wer ein Problem damit hat, hat den Sinn eines Internetforums in den letzten 10 Jahren noch nicht gerallt.

Und das ist meine ganz persönliche Meinung dazu.

hathor 11. Mai 2009 18:45

Re: VM erkennen
 
INTEL schreibt:

There is no software-visible bit whose setting indicates whether a logical processor is in VMX non-root operation. This fact may allow a VMM to prevent guest software from determining that it is running in a virtual machine.

Quelle:
253669.pdf

kalmi01 12. Mai 2009 15:26

Re: VM erkennen
 
OK, am Prozessor vielleicht nicht.
Aber es gibt einige markante Merkmale, wie z.B. den Grafikkartentreiber, an denen man eine VM erkennen kann.

Hansa 12. Mai 2009 16:11

Re: VM erkennen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Man könnte doch bestimmt das im Screenshot auswerten ? Aber Achtung, ist Doc-Datei, bevor Luckie wieder meckert. :mrgreen: Paint fügt das nicht ein und ich muss noch weg. :P

mschaefer 12. Mai 2009 17:09

Re: VM erkennen
 
Das läuft darauf hinaus, dass man Testversionen nicht mehr mit vollem Funktiosumfang weitergeben kann...

Alter Mann 12. Mai 2009 17:20

Re: VM erkennen
 
Hi,

lasst ihm doch die 'Arbeit/Freude'. Warum er allerdings hier im Forum fragt und nicht beim Hersteller nach schaut???

Für VMWare gibt es die Möglichkeit die VMware SDKs und APIs herunter zu laden.

Gruss

Reinhard Kern 12. Mai 2009 18:11

Re: VM erkennen
 
Zitat:

Zitat von mschaefer
Das läuft darauf hinaus, dass man Testversionen nicht mehr mit vollem Funktiosumfang weitergeben kann...

Wieso das denn? Ob ich unbekannte Software sicherheitshalber auf einem per Image immer wieder "clean" gestartetem Extra-PC teste oder in einer VM, kommt doch auf dasselbe heraus, also hat sich durch die Virtualisierung auch nichts geändert.

Gruss Reinhard


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz