Laden...

Erkennen, ob Programm auf PC oder VM (Image) des PCs läuft

Erstellt von Lynix vor 13 Jahren Letzter Beitrag vor 13 Jahren 6.476 Views
L
Lynix Themenstarter:in
667 Beiträge seit 2004
vor 13 Jahren
Erkennen, ob Programm auf PC oder VM (Image) des PCs läuft

Hallo zusammen,

angenommen ich habe einen PC und ziehe ein Image davon, z.B. mit Acronis - gibt es dann eine softwareseitige (nach Möglichkeit C#-seitige) Möglichkeit zu erkennen, ob der PC oder das Image verwendet wird ? Also ich will die Software auf dem PC starten und angezeigt bekommen Rechner X wird verwendet. Dann die Software in der VM mit dem Image starten und angezeigt bekommen Rechner Y wird verwendet...

Generell brauche ich also eine Möglichkeit, Rechner eindeutig zu identifizieren. Grundsätzlich müsste das doch über die Mac-Adresse gehen, oder ? Die müsste ja auch bei einer VM anders sein als beim PC von dem das VM-Image abstammt ?

Wie könnte ich die Mac-Adresse mit C# auslesen ? Ich könnte natürlich über Ausführung von ipconfig /all und anschließendes Auslesen des Ausgabestreams die Macadresse ablesen, aber gibt es vielleicht eine "eingebaute" / "elegantere" Möglichkeit ? Oder gibt es bessere Möglichkeiten als die Mac-Adresse ?

Danke ...

Nachtrag : Außerdem würde mich interessieren kann, ob man generell irgendwie abfragen kann, ob es sich bei dem aktuellen System um eine VM oder einen echten PC handelt.

"It is not wise to be wise" - Sun Tzu

3.430 Beiträge seit 2007
vor 13 Jahren

Hallo,

theoretisch würde es schon mit der MAC-Adresse funktionieren.
Aber diese kann man sehr leicht faken und somit vorgauckeln jemand anderes zu sein.
Ich glaube dass man in VMware beim Netzwerkadapter auswählen kann dass er die Macadresse vom Host verwenden soll.
Somit würde diese Variante schon ins Wasser fallen.

AFAIK gibt es da keine wirklich eindeutige ID.
Du könntest dir aber über die verbaute Hardware mit einem Algorithmus eine ID generieren.

Guck mal hier: Detect if your program is running inside a Virtual Machine

Gruss
Michael

Gelöschter Account
vor 13 Jahren

Siehe auch:
http://en.wikipedia.org/wiki/Redpill

Der CodeProject Link basiert auf dem so benannten Exploit einer Hackerin dessen Namen ich mir leider nie merken kann. Funktioniert allerdings nur bei x86 Sytemen!

Edit: Die eindeutige Identifizierbarkeit ist dabei natürlich noch ungeklärt bzw. eine Frage des Context. Inwiefern musst du eindeutig identifizieren, innerhalb einer Gruppe(Netzwerk) oder einfach nur ob es sich nach dem Neustart deines Programs immer noch um den gleichen Rechner bzw. das gleiche System handelt?

L
Lynix Themenstarter:in
667 Beiträge seit 2004
vor 13 Jahren

Danke Dir für die Antwort - aber bist Du sicher, dass man die Mac-Adresse der VM einstellen kann ? Ich kanns mir nur schwer vorstellen - wenn sie z.B. identisch zum Host-System wäre würde es doch ziemliche Probleme geben ?

Dein Vorschlag, eine ID aus Hardwarekomponenten zu bilden klingt auch interessant - gibt es dazu verfügbare Algorithmen ? Hätte man dabei aber nicht das selbe bzw. ein ähnliches Problem wie bei der Mac-Adresse ? Ich meine wenn man die bei einer VM faken kann, dann doch wohl auch Festplatten-, Graka- usw. IDs ?

"It is not wise to be wise" - Sun Tzu

3.170 Beiträge seit 2006
vor 13 Jahren

Hallo,

aber bist Du sicher, dass man die Mac-Adresse der VM einstellen kann ? Ich kanns mir nur schwer vorstellen - wenn sie z.B. identisch zum Host-System wäre würde es doch ziemliche Probleme geben ? Das würde mich auch interessieren.
Als ich das gelesen habe dachte ich mir erst, das kann ja nicht sein...
Denn es ist doch ganz entscheidend für funktionierendes Routing, daß innerhalb eines Subnetzes die MAC-Adresen eindeutig vergeben sind. Sonst können von einem Router die Antwortpakete nicht zugeordnet werden, weil die Geräte, die die selbe MAC benutzen, vom Router dann nicht unterschieden werden können.

Aber vielleicht haben die von VMWare da was gebaut, was die Zuordnung letztlich lokal auf dem Host ermöglicht.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

L
Lynix Themenstarter:in
667 Beiträge seit 2004
vor 13 Jahren

Inwiefern musst du eindeutig identifizieren, innerhalb einer Gruppe(Netzwerk) oder einfach nur ob es sich nach dem Neustart deines Programs immer noch um den gleichen Rechner bzw. das gleiche System handelt?

Letzteres - es geht konkret darum, dass eine Kopie / Seriennummer der Software nur auf genau dem Rechner laufen darf, auf dem sie freigeschaltet wurde. D.h. ich muss die Seriennummer z.B. aus einer eindeutig identifizierbaren Komponenten des PCs bauen, der Kunde ruft an und gibt diese Seriennummer durch, und der passende "Freischaltcode" wird aus dieser Seriennummer erzeugt. Wird die SW nun auf einen anderen PC kopiert oder in Form einer VM vervielfältigt, soll sie erkennen, dass der Freischaltcode nicht zur für diesen Rechner ermittelten Seriennummer passt und den Dienst verweigern.

Die beste Lösung für sowas wäre wohl ein Dongle, wobei das aber den finanziellen Rahmen der Lizenzeinnahmen in meinem Fall wohl sprengen würde, weshalb ich nach einer SW-Lösung suche.

"It is not wise to be wise" - Sun Tzu

Gelöschter Account
vor 13 Jahren

Also Guid's werden dem hörensagen nach aus Mac Adresse und HardwareComponenten Id's gebildet... Google doch mal.

Das man die Mac ändern können soll in VMWare wundert mich auch.
Irgenwie muss der VMWare Brigde Networking Treiber die Ip Pakete doch den einzelnen VMWare System zuordnen können. Nach meinem Verständniss geht das nur über die Mac Adresse auf dem Ethernet Layer.

Ob die Harddisk Seriennummer auf einem VM System anders ist als die auf dem
Host System oder zu einem anderen VM System wirst du wohl selbst rauskriegen müssen(kann bei VM Ware sein bei Virtual Pc vielleicht nicht).

Edit: Aaah okay, hab dein Posting kam dazwischen.

Also deine Software könnte sich nutze machen das VM Systeme übers Netzwerk mit dem Host kommunizieren können.

Lausche auf einem ausgewählten Port mit deiner Software und mache einen Broadcast innerhalb des LAN's. Das lässt sich mit Firewalls natürlich leicht aushebeln. Das Problem ist du musst nicht einfach nur eindeutig identifizieren, du musst du mit anderen VM System und /oder Host System in Verbindung treten.
Das kannst du so knicken denk ich, das kann kann man leicht blockieren.

Richte eine RemoteComponente ein zu der sich die Software beim Start übers Internet zwingend registrieren muss, dann hättest du ne Chance dein Vorhaben durchziehen zu können.

3.170 Beiträge seit 2006
vor 13 Jahren

Hallo,

Das man die Mac ändern können soll in VMWare wundert mich auch. Das wundert mich eigentlich nicht. Bei Qemu kann ich auch alle MACs von Hand vergeben. Das es aber dieselbe MAC wie die des Hosts sein soll finde ich in der Tat verwunderlich.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

L
Lynix Themenstarter:in
667 Beiträge seit 2004
vor 13 Jahren

Die Guids, die man sich im VS erstellen lassen kann sind rein zufällig soweit ich weiß, oder meinst Du etwas Anderes ? Dahin ging meine erste Idee - GUID erstellen, irgendwo im System "verstecken" und dann diese GUID als PC-ID verwenden. Allerdings bringt das für VMs / Images nichts, da die im System hinterlegte GUID mit kopiert wird...

"It is not wise to be wise" - Sun Tzu

S
167 Beiträge seit 2008
vor 13 Jahren

Vielleicht hilft dir http://invisiblethings.org/papers/redpill.html
Aber mit abschließender Sicherheit wird sich das wohl nie feststellen lassen.

Gelöschter Account
vor 13 Jahren

Die Guids, die man sich im VS erstellen lassen kann sind rein zufällig soweit ich weiß

Also als Guids damals quasi neu rauskamen da weiss ich nich sehr genau, war die Diskussion gross in Mode, wie kommen diese zustande. Die Hardware spielt da wohl eine Rolle so man mir sagte.

Ich glaube du hast noch ein Verstädnissproblem, ich hab mein letztes Posting nochmal editiert deswegen.

Eine Identifizierung in dem Sinn ist garnicht das was du willst.
Du muss entweder
a) einen gemeinsamen Bereich für alle VM Syteme und Host Systeme einrichten auf den du Zugriff hast, so eine Art Shared Memory über die Systeme hinweg.
Ich wüsste nicht das sowas geht, gottseidank sonst hätten russische Rootkit-Programmierer da schon was übles gebastelt.
b) du richtest eine externe RegistrierungsStelle ein bei der sich die Komponenten registrieren müssen, in diesem Fall würde eine Identifizierung auf welchem tatsächlichen PC bin ich und laufe ich hier schon reichen. Da KÖNNTE! dir die Mac Adresse in Verbindung mit RedPill tatsächlich helfen da ich immer noch davon ausgehe das diese eindeutig sein muss auch wenn das Posting von MichlG was anderes vermuten lässt

Gelöschter Account
vor 13 Jahren

Joanna Rutkowska
danke .. vielleicht merk ichs mir diesmal

3.430 Beiträge seit 2007
vor 13 Jahren

Hallo zusammen,

da braucht man nur einen kleinen Denk / Schreibfehler machen um so eine Diskussion auszulösen 😉

Ich habe jetzt in VmWare nachgeguckt und es ist wirklich nicht möglich die MacAdresse vom host zu verwenden. Ich habe das mit dem "Connected directly to the physical network" verwechselt.
D.h. man hat direkt die Netzwerkverbindung vom host, aber ziemlich sicher eine andere MAC

Wenn man etwas nachdenkt dann ist es wirklich logisch dass das nicht funktionieren kann. Ausser Vmware würde sich da irgendwo dazwischen hängen.

Gruss
Michael

S
167 Beiträge seit 2008
vor 13 Jahren

Das grundproblem, dass die MAC Adresse "fake"bar ist bleibt trotzdem bestehen 😉

3.170 Beiträge seit 2006
vor 13 Jahren

Hallo,

es geht konkret darum, dass eine Kopie / Seriennummer der Software nur auf genau dem Rechner laufen darf, auf dem sie freigeschaltet wurde.

Dazu könnten noch die Diskussionen in Software mit Registrierungsschlüssel schützen (sowie den dort verlinkten Threads) und Sicherheit durch Lizenzvergabe für Software von Bedeutung sein.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca