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 3 von 5     123 45      
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 Zacherl
Zacherl

 
Delphi 10.2 Tokyo Starter
 
#21
  Alt 25. Sep 2007, 19:10
Ja klar .. das gibts für Windows, allerdings sind meine Images von VirtualBox nicht damit kompatibel. Ich meine gelesen zu haben, dass VMWare und VPC Images damit emuliert werden können.
  Mit Zitat antworten Zitat
blackdrake

 
Delphi 10.3 Rio
 
#22
  Alt 26. Sep 2007, 10:40
Oh je... ich hab mir "QEMU on Windows" (sollte es nicht "for Windows" heißen?) heruntergeladen und verstehe die 3 enthaltenen Konsolenprogramme irgendwie nicht... ich will eine GUI . Ich hab einige Virtual-PC-Images, weiß aber nicht, wie ich die nun mit QEMU aufmachen kann.
Daniel Marschall
  Mit Zitat antworten Zitat
Benutzerbild von MagicAndre1981
MagicAndre1981

 
Delphi 7 Enterprise
 
#23
  Alt 26. Sep 2007, 11:33
für QEMU gibts doch eine GUI. Nur ist QEMU unter Windows total lahm.

// edit: hier gibts die GUI: http://www.davereyn.co.uk/download.htm
André
  Mit Zitat antworten Zitat
blackdrake

 
Delphi 10.3 Rio
 
#24
  Alt 26. Sep 2007, 21:28
Ahh!!! Ich werde wahnsinnig mit diesem QEMU!

Meine VPC-Images kann ich nicht schreibbar öffnen, weswegen ME, 2000 und 98 mit einer Schutzverletzung abstürzen.

Nur Windows 95 kann ich mit QEMU starten:

Delphi-Quellcode:
System Info
-----------

Win Type : Win 9x
CPU count: 1

Processor #1
------------

GDT : 0xC005C374 (503)
IDT : 0x800A2000 (767)
LDTR: 0xDEAD00D0 (Win9x)
Type: Unknown

VM-Detektion: Positiv
Offenbar ist die LDTR-Erkennungssequenz für QEMU 0xDEAD00D0. Wir bräuchten aber mehr Tests, um ganz sicher zu sein.

Gruß
blackdrake

PS: Habe ich schonmal erwähnt, dass ich Linux nicht mag?
Daniel Marschall
  Mit Zitat antworten Zitat
Benutzerbild von MagicAndre1981
MagicAndre1981

 
Delphi 7 Enterprise
 
#25
  Alt 26. Sep 2007, 23:23
Zitat von blackdrake:
Ahh!!! Ich werde wahnsinnig mit diesem QEMU!
geht mir auch so. Unter Windows ist es lahm und Linux will ich nicht extra installieren, nur um das zu testen. Aber hier gibts doch etliche Linuxer, die sollten das doch testen können.
André
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

 
Delphi 10.2 Tokyo Starter
 
#26
  Alt 26. Sep 2007, 23:32
Hast du ne Idee, warum blackdrakes VPC2007 Images zwar erkannt werden, aber als "nicht beschreibbar" gehandhabt werden? Es können partu keine Daten geschrieben werden .. nur lesen geht.
  Mit Zitat antworten Zitat
Benutzerbild von MagicAndre1981
MagicAndre1981

 
Delphi 7 Enterprise
 
#27
  Alt 26. Sep 2007, 23:53
ne sorry. Ich hab QEMU bei version 0.7 das letzte Mal angeschaut. kA, wass da jetzt bei Version 0.9 so alles (nicht) geht.
André
  Mit Zitat antworten Zitat
DevidEspenschied

 
Delphi 12 Athens
 
#28
  Alt 14. Aug 2009, 13:11
Ich muss dieses Thema nochmal eröffnen, da ein aktuelles Virtual PC 2007 als Native erkannt wird. Hier sind die Daten des Testprogramms direkt aus Virtual PC 2007:

System Info
-----------
Version : Microsoft Windows XP Professional
Win9x : No
CPU count: 1

Processor # 1
-------------
GDT : 0x8003F000 < 1023>
IDT : 0x8003F400 < 2047>
LDTR: 0xDEAD0000 <WinNT>
Type: Native

This application is [probably] NOT running in a virtual machine!


Seltsamerweise sind die Werte auf dem Wirtssystem identisch, was ich nun garnicht verstehen kann:

System Info
-----------
Version : Microsoft Windows XP Professional
Win9x : No
CPU count: 8

Processor # 1
-------------
GDT : 0x8003F000 < 1023>
IDT : 0x8003F400 < 2047>
LDTR: 0xDEAD0000 <WinNT>
Type: Native

This application is [probably] NOT running in a virtual machine!

Hat jemand eine Lösung hierfür bzw. lebt dieses Projekt eigentlich noch ?
Devid
  Mit Zitat antworten Zitat
blackdrake

 
Delphi 10.3 Rio
 
#29
  Alt 14. Aug 2009, 15:52
Wir hatten desöfteren solche Einsendungen, bei denen Benutzer angegeben hatten, dass sie in der Tat eine VM verwendeten. In so fern ist das nicht der einzige Fall.

Bezüglich MS VPC 2007 dachten wir eigentlich, dass wir dies erkennen könnten. Kann es sein, dass in einer Minor-Version etwas geändert wurde?

Das Problem ist natürlich, dass eine VM ja gerade das Ziel hat, mit allen mitteln zu versuchen, sich selbst Werte eines nativen Systems zu geben und daher ist eine solche allgemeingültige Lösung nicht so einfach.

Bei einer VM hatte ich sogar mal die Idee, die Registry auszulesen, da die Hardwarekomponenten den Namen der VM trugen. Es war aber einfach zu hardgecoded und zu ungewiss, dachte ich mir und habe ies dann nicht implementiert.

Wenn uns neue Ideen einfallen würden, würden wir das Projekt in so fern schoneinmal wieder neu erweitern und eine neue Version rausbringen.
Daniel Marschall
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

 
Delphi 10.2 Tokyo Professional
 
#30
  Alt 14. Aug 2009, 16:15
Hi,

Hab mir jetzt nur mal den Code angeguckt ohne ihn zu testen. Von daher kann ich nicht viel dazu sagen aber ne kleine Sache am Rande:

Ich finde folgendes Record

Delphi-Quellcode:
TxDT = record
  Limit,
  BaseLow,
  BaseHigh: Word;
end;
und auch die Funktionen wie z.B. GetIDTLimit etwas irreführend..

Die Begriffe "Base" und "Limit" klingen eher nach Attributen eines GDT-Eintrags als das was es wirklich ist. Auch wenns etwas kleinlich ist... Da ich erstmal einen Moment verwirrt auf den Code gestarrt habe bevor ich wusste was gemeint ist würde ich doch eher die Begriffe "Size" und "Offset" vorschlagen

Und warum habt ihr BaseLow und BaseHigh als 2 einzelne Variablen deklariert? ein

Base: Cardinal; // bzw Offset: Cardinal wäre kürzer und man müsste nicht rumshiften

Michael
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 5     123 45      


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 13:45 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