AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Unit zur VM detection + Testprogramm
Thema durchsuchen
Ansicht
Themen-Optionen

Unit zur VM detection + Testprogramm

Ein Thema von Zacherl · begonnen am 23. Sep 2007 · letzter Beitrag vom 11. Jul 2010
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    
Benutzerbild von Zacherl
Zacherl
Registriert seit: 3. Sep 2004
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:
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
 
Benutzerbild von MagicAndre1981
MagicAndre1981

 
Delphi 7 Enterprise
 
#2
  Alt 23. Sep 2007, 16:49
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.
Miniaturansicht angehängter Grafiken
parallels_147.png  
André
  Mit Zitat antworten Zitat
blackdrake

 
Delphi 10.3 Rio
 
#3
  Alt 23. Sep 2007, 17:01
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
Daniel Marschall
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

 
Delphi 10.2 Tokyo Starter
 
#4
  Alt 23. Sep 2007, 17:19
(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:
// 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;
  Mit Zitat antworten Zitat
Benutzerbild von MagicAndre1981
MagicAndre1981

 
Delphi 7 Enterprise
 
#5
  Alt 23. Sep 2007, 20:46
ich installiere gleich mal ein XP. Das Ergebnis gibts dann morgen.
André
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

 
Delphi 10.2 Tokyo Starter
 
#6
  Alt 23. Sep 2007, 21:03
Danke dir
  Mit Zitat antworten Zitat
Benutzerbild von MagicAndre1981
MagicAndre1981

 
Delphi 7 Enterprise
 
#7
  Alt 24. Sep 2007, 05:53
hier das Ergebnis für XP unter Parallels-


ich werde auch noch ein Win9x installieren und dann die Werte posten.
Miniaturansicht angehängter Grafiken
parallels_xp_199.png  
André
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

 
Delphi 10.2 Tokyo Starter
 
#8
  Alt 24. Sep 2007, 11:39
Damit bestätigt sich unsere Annahme zumindest für NT Systeme schonmal Ein Win9x Test wäre sehr nett von dir ..
  Mit Zitat antworten Zitat
Benutzerbild von freak4fun
freak4fun

 
Delphi 10.2 Tokyo Starter
 
#9
  Alt 24. Sep 2007, 20:18
Laptop in VM:
Code:
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:
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.
  Mit Zitat antworten Zitat
blackdrake

 
Delphi 10.3 Rio
 
#10
  Alt 24. Sep 2007, 20:25
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
Daniel Marschall
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:52 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