| |
|
|
 |
Autor |
Nachricht |
 |
| |
| Zacherl |
#1| Verfasst am: 23.09.2007, 14:54 Titel: Unit zur VM detection + Testprogramm |
 |
 |
 |
|
aktives Mitglied Alter: 18 Status: offline Beiträge: 2.647 angemeldet: 03.09.2004 Delphi 2005 Personal

|
Hey,
zusammen mit blackdrake habe ich eine Unit entwickelt die sehr zuverlässig erkennen kann, ob das eigene Programm auf einer virtuellen Maschiene ausgeführt wird. Dabei sind sogar Fingerprints möglich, die eine Identifizierung der verschiedenen Emulations Software zulässt.
Delphi-Quellcode: | zusammenfalten | markieren | 1 · · · 5 · · · · 10 · · · · 15 · · · · 20 · · · · 25 · · · · 30 31
| type
TVMFingerprint = (fpUnknown, fpVMWare, fpVirtualPC, fpVirtualBox, fpNative,
fpWINE, fpParallelsWorkstation, fpQEMU);
type
TxDTEntry = record
GDTBase: DWord;
IDTBase: DWord;
LDTRBase: DWord;
GDTLimit: Word;
IDTLimit: Word;
end;
type
TxDTArray = array of TxDTEntry;
TFingerprintArray = array of TVMFingerprint;
// Prüft auf eine VM, wobei angegeben werden kann, ob WinE als VM gehandhabt werden soll
function IsVirtualMachine(const DetectWINE: Boolean = true): Boolean;
// Gibt einen Fingerprint anhand eines TxDTEntrys zurück
function GetVMFingerprint(xDTEntry: TxDTEntry): TVMFingerPrint; overload;
// Gibt einen Fingerprint für eine CPU zurück
function GetVMFingerprint(CPU: Cardinal): TVMFingerPrint; overload;
// Konvertiert einen Fingerprint in einen String
function VMFingerprintToStr(FP: TVMFingerprint): String;
// Gibt einen TxDTEntry für eine CPU zurück
function GetxDTEntry(CPU: Cardinal): TxDTEntry;
// Gibt ein Array of TxDTEntry für alle CPUs zurück
function GetxDTArray(var Output: TxDTArray): Integer;
// Gibt ein Array of TVMFingerprint für alle CPUs zurück
function GetFingerprintArray(var Output: TFingerprintArray): Integer; |
|
Das ganze Funktioniert über verschiedene Tabellen, die für jede CPU existieren. Die GDT, die IDT und die LDT. Anhand deren Base Adressen und ihrer Größe (Limits) werden die VMs ermittelt.
Unterstützte Betriebssysteme:
* Win95 .. WinME
* WinNT .. WinVista
Unterstützt werden momentan:
* VirtualPC, VMWare, VirtualBox, ParallelsWorkstation und WinE.
* QEMU (Testphase)
Geplante Features:
* Sandbox detection
Download: www.viathinksoft.de/download.php?id=125
Im Archiv findet sich die Unit, der Source für das Testprogramm und eine Excel Tabelle mit unseren Messergebnissen. Wir würden uns über Feedback und weitere Messergebnisse freuen!
Gruß Zacherl |
Zuletzt bearbeitet von Zacherl am 26.09.2007, 21:54, insgesamt 3-mal bearbeitet. |
 |
|
|
|
| |
| MagicAndre1981 |
#2| Verfasst am: 23.09.2007, 17:49 Titel: Re: Unit zur VM detection + Testprogramm |
 |
 |
 |
|
aktives Mitglied Alter: 28 Beiträge: 2.051 angemeldet: 04.06.2004 Wohnort: Nordhausen Delphi 7 Enterprise

|
danke, deine Unit erkennt auch auch VMs die unter Parallels Workstation laufen. Nur als Typ steht VirtualBox da.
Hier das Ergebnis (siehe Anhang) von deinem Testprogramm innerhalb einer Windows Server 2008 VM. |
| [ An diesen Beitrag wurden eine oder mehrere Dateien angehängt. Zum Herunterladen bitte anmelden. ] |
 "A programmer is just a tool which converts caffeine into code", daran wirds wohl liegen, dass ich Abends nie pennen kann
| Luckie hat folgendes geschrieben: | | Nicht nur dass ihr offtopic geworden seid, jetzt werdet ihr selber im Offtopic noch offtopic | |
 |
|
|
|
| |
| blackdrake |
#3| Verfasst am: 23.09.2007, 18:01 Titel: Re: Unit zur VM detection + Testprogramm |
 |
 |
 |
|
Mitglied Alter: 21 Status: offline Beiträge: 569 angemeldet: 22.08.2003 Wohnort: Bammental Turbo Delphi für Win32

|
Hallo.
Danke für den Beitrag. Hier wäre die Vermutung nahe, dass Parallels Workstation stets die LDTR-Base 0xDEADFF5B verwendet (Beispiel: Microsoft Virtual PC 2007 verwendet immer 0xDEADFFA8). Hast du auf Parallels Workstation noch ein anderes Betriebssystem, damit die 0xDEADFF5B-Theorie bestätigt werden kann?
Gruß
blackdrake |
 Und nun was lustiges: How to tern on your computor
www.daniel-marschall.de / www.viathinksoft.de |
 |
|
|
|
| |
| Zacherl |
#4| Verfasst am: 23.09.2007, 18:19 Titel: Re: Unit zur VM detection + Testprogramm |
 |
 |
 |
|
aktives Mitglied Alter: 18 Status: offline Beiträge: 2.647 angemeldet: 03.09.2004 Delphi 2005 Personal

|
(Hui, unter Parallel Workstations hatten wir bisher gar keine Testergebnisse. Bisher haben wir für VirtualBox als Erkennungsmerkmal nur das GDT Limit.
Bei Parallel Workstations scheint ja auch noch die LDTR Base anders zu sein. Da bräuchten wir allerdings mehr Messwerte. Hast du zufällig noch andere Systeme auf Parallel Workstations installiert?) - zu spät.
Habe die Unit schonmal so angepasst, dass unter VirtualBox die LDTR der Nativen LDTR des Entsprechenden Systems entspricht. Die Ausgabe dürfte dann für Parallel Workstations "Unknown" sein.
[Edit: Parallels Workstation wird nun auch erkannt. (BETA!)]
Neue Funktionen:
| Delphi-Quellcode: | markieren | // Gibt ein Array of TxDTEntry für alle CPUs zurück
function GetxDTArray(var Output: TxDTArray): Integer;
// Gibt ein Array of TVMFingerprint für alle CPUs zurück
function GetFingerprintArray(var Output: TFingerprintArray): Integer; |
| |
Zuletzt bearbeitet von Zacherl am 23.09.2007, 18:58, insgesamt 2-mal bearbeitet. |
 |
|
|
|
| |
| MagicAndre1981 |
#5| Verfasst am: 23.09.2007, 21:46 Titel: Re: Unit zur VM detection + Testprogramm |
 |
 |
 |
|
aktives Mitglied Alter: 28 Beiträge: 2.051 angemeldet: 04.06.2004 Wohnort: Nordhausen Delphi 7 Enterprise

|
ich installiere gleich mal ein XP. Das Ergebnis gibts dann morgen. |
 "A programmer is just a tool which converts caffeine into code", daran wirds wohl liegen, dass ich Abends nie pennen kann
| Luckie hat folgendes geschrieben: | | Nicht nur dass ihr offtopic geworden seid, jetzt werdet ihr selber im Offtopic noch offtopic | |
 |
|
|
|
| |
| Zacherl |
#6| Verfasst am: 23.09.2007, 22:03 Titel: Re: Unit zur VM detection + Testprogramm |
 |
 |
 |
|
aktives Mitglied Alter: 18 Status: offline Beiträge: 2.647 angemeldet: 03.09.2004 Delphi 2005 Personal

|
Danke dir |
|
 |
|
|
|
| |
| MagicAndre1981 |
#7| Verfasst am: 24.09.2007, 06:53 Titel: Re: Unit zur VM detection + Testprogramm |
 |
 |
 |
|
aktives Mitglied Alter: 28 Beiträge: 2.051 angemeldet: 04.06.2004 Wohnort: Nordhausen Delphi 7 Enterprise

|
hier das Ergebnis für XP unter Parallels-
ich werde auch noch ein Win9x installieren und dann die Werte posten. |
| [ An diesen Beitrag wurden eine oder mehrere Dateien angehängt. Zum Herunterladen bitte anmelden. ] |
 "A programmer is just a tool which converts caffeine into code", daran wirds wohl liegen, dass ich Abends nie pennen kann
| Luckie hat folgendes geschrieben: | | Nicht nur dass ihr offtopic geworden seid, jetzt werdet ihr selber im Offtopic noch offtopic | |
 |
|
|
|
| |
| Zacherl |
#8| Verfasst am: 24.09.2007, 12:39 Titel: Re: Unit zur VM detection + Testprogramm |
 |
 |
 |
|
aktives Mitglied Alter: 18 Status: offline Beiträge: 2.647 angemeldet: 03.09.2004 Delphi 2005 Personal

|
Damit bestätigt sich unsere Annahme zumindest für NT Systeme schonmal Ein Win9x Test wäre sehr nett von dir .. |
|
 |
|
|
|
| |
| freak4fun |
#9| Verfasst am: 24.09.2007, 21:18 Titel: Re: Unit zur VM detection + Testprogramm |
 |
 |
 |
|
aktives Mitglied Alter: 24 Status: offline Beiträge: 1.508 angemeldet: 22.09.2004 Wohnort: Wismar Turbo Delphi für Win32

|
Laptop in VM:
Code: | zusammenfalten | markieren | 1 · · · 5 · · · · 10 · · · 14
| System Info
-----------
Win Type : WinNT
CPU count: 1
Processor # 1
-------------
GDT : 0xFFC07000 <16687>
IDT : 0xFFC18000 < 2047>
LDTR: 0xDEAD4060 <WinNT>
Type: VMWare
This application is [probably] running IN a virtual machine! |
|
und ohne:
Code: | zusammenfalten | markieren | 1 · · · 5 · · · · 10 · · · · 15 · · · · 20 21
| System Info
-----------
Win Type : WinNT
CPU count: 2
Processor # 1
-------------
GDT : 0x81F3F000 < 1023>
IDT : 0x81F3F400 < 2047>
LDTR: 0xDEAD0000 <WinNT>
Type: Native
Processor # 2
-------------
GDT : 0x82A48560 < 1023>
IDT : 0x82A48960 < 2047>
LDTR: 0xDEAD0000 <WinNT>
Type: Native
This application is [probably] NOT running in a virtual machine! |
|
Ich weiß ja, dass man immer alles sofort will. |
 "Du glaubst doch nicht im Ernst, die User wären schlauer geworden?" [Das System von Karl Olsberg]
Kämpfe gegen mich!
Zuletzt bearbeitet von freak4fun am 24.09.2007, 21:21, insgesamt 1-mal bearbeitet. |
 |
|
|
|
| |
| blackdrake |
#10| Verfasst am: 24.09.2007, 21:25 Titel: Re: Unit zur VM detection + Testprogramm |
 |
 |
 |
|
Mitglied Alter: 21 Status: offline Beiträge: 569 angemeldet: 22.08.2003 Wohnort: Bammental Turbo Delphi für Win32

|
Hallo freak4fun.
Vielen Dank für die Ergebnisse! Unser Erkennungsmuster scheint bei VMWare mittlerweile sehr zuverlässig zu sein. Kann ich von Windows XP bei den Systemen ausgehen?
Gruß
blackdrake |
 Und nun was lustiges: How to tern on your computor
www.daniel-marschall.de / www.viathinksoft.de |
 |
|
|
|
| |
| freak4fun |
#11| Verfasst am: 24.09.2007, 21:37 Titel: Re: Unit zur VM detection + Testprogramm |
 |
 |
 |
|
aktives Mitglied Alter: 24 Status: offline Beiträge: 1.508 angemeldet: 22.09.2004 Wohnort: Wismar Turbo Delphi für Win32

|
System auf Laptop unter dem der VMServer läuft ist WinVista. In der VM läuft XP. [Siehe Link in PN an mich] |
 "Du glaubst doch nicht im Ernst, die User wären schlauer geworden?" [Das System von Karl Olsberg]
Kämpfe gegen mich!
Zuletzt bearbeitet von freak4fun am 24.09.2007, 21:40, insgesamt 1-mal bearbeitet. |
 |
|
|
|
| |
| MagicAndre1981 |
#12| Verfasst am: 24.09.2007, 22:00 Titel: Re: Unit zur VM detection + Testprogramm |
 |
 |
 |
|
aktives Mitglied Alter: 28 Beiträge: 2.051 angemeldet: 04.06.2004 Wohnort: Nordhausen Delphi 7 Enterprise

|
| Zacherl hat folgendes geschrieben: | | Ein Win9x Test wäre sehr nett von dir .. |
das hatte ich mir schon gedacht und hab es probiert. Aber die Installation von WinME bleibt bei 10% hängen. Ich probier dann nochmal Win98 oder Win95. |
 "A programmer is just a tool which converts caffeine into code", daran wirds wohl liegen, dass ich Abends nie pennen kann
| Luckie hat folgendes geschrieben: | | Nicht nur dass ihr offtopic geworden seid, jetzt werdet ihr selber im Offtopic noch offtopic | |
 |
|
|
|
| |
| Zacherl |
#13| Verfasst am: 24.09.2007, 22:11 Titel: Re: Unit zur VM detection + Testprogramm |
 |
 |
 |
|
aktives Mitglied Alter: 18 Status: offline Beiträge: 2.647 angemeldet: 03.09.2004 Delphi 2005 Personal

|
Okey, danke für deine Mühe Bei VirtualBox funktioniert leider der Monitor Treiber von Win98 nicht, so dass ich damit auch nicht testen kann =/ |
|
 |
|
|
|
| |
| MagicAndre1981 |
#14| Verfasst am: 25.09.2007, 01:00 Titel: Re: Unit zur VM detection + Testprogramm |
 |
 |
 |
|
aktives Mitglied Alter: 28 Beiträge: 2.051 angemeldet: 04.06.2004 Wohnort: Nordhausen Delphi 7 Enterprise

|
so hier gibts das Ergebnis doch noch. Musste es einfach eine Weile laufen lassen, dann ging das Setup von ME doch noch. |
| [ An diesen Beitrag wurden eine oder mehrere Dateien angehängt. Zum Herunterladen bitte anmelden. ] |
 "A programmer is just a tool which converts caffeine into code", daran wirds wohl liegen, dass ich Abends nie pennen kann
| Luckie hat folgendes geschrieben: | | Nicht nur dass ihr offtopic geworden seid, jetzt werdet ihr selber im Offtopic noch offtopic | |
 |
|
|
|
| |
| Zacherl |
#15| Verfasst am: 25.09.2007, 09:37 Titel: Re: Unit zur VM detection + Testprogramm |
 |
 |
 |
|
aktives Mitglied Alter: 18 Status: offline Beiträge: 2.647 angemeldet: 03.09.2004 Delphi 2005 Personal

|
Danke dir recht herzlich Scheint zu funktionieren die Parallels Detection. |
|
 |
|
|
|
 |
|
 |
| |
|
|
| |
 
|
|