Einzelnen Beitrag anzeigen

Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#44

Re: Bitte testen! IDT base Adresse auslesen + VMM detection

  Alt 18. Sep 2007, 09:53
Zitat von Daniel:
Ist zwar kein Win9x, sondern Vista x64 - aber, wo ist da schon ein Unterschied.
Hehe Danke dir

Zitat von blackdrake:
Hier das Testergebnis von Win 95 native [..]
Heute bzw. morgen reiche ich noch das Ergebnis von Windows ME native nach.
Vielen Dank Das Ergebniss ist ja eigentlich wie erwartet. Theoretisch könnte ich einfach auf Win9x prüfen und dementsprechen den LDTR Test weglassen. Die Limit Prüfung der anderen Tabellen sollte nämlich ergeben, dass das System keine VM ist.

Zitat von blackdrake:
Du solltest auf jeden Fall noch jemand finden, der dir die Wert bei Windows NT nachweisen kann.
Ja das wäre vermutlich nicht schlecht, wobei ich start annehme, dass die LDTR dort auch $DEAD0000 ist, wie bisher auf allen NT basierten Systemen.

Zitat von blackdrake:
Ich würde mal behaupten, dass folgendes Muster sicher sein könnte:

IsVirtualMachine := DrittesByte(LDTR) = $FF; Das wäre mit der Annahme verbunden, dass jedes virtualisierte Windows System den LDTR 0xDEADFF.. verwendet

Es ist mir unbekannt, wie sich das LDTR bei mehreren Prozessoren oder bei mehreren VMM's oder bei Windows NT und Vista verhält! Ebenfalls weis ich nicht, ob VirtualBox oder VMWare etc ebenfalls das Muster LDTR = 0xDEADFF.. verwendet. Ich habe nur mit Microsoft Virtual PC 2007 getestet. Ich habe auch testweise mehrere verschiedene virtuelle Betriebssysteme gleichzeitig aufgemacht. Alle hatten dabei den LDTR 0xDEADFFA8.
Dies könnte korrekt sein, allerdings habe ich WinXP, Win2000 und WinVista 32 Bit auchmal bei mir unter VirtualBox getestet und VirtualBox scheint die LDT auch wie ein natives System nicht zu verwenden. Der Wert ist zumindest auch $DEAD0000. Von daher hatte ich diese Überorüfung sowieso nur optional eingebaut. Sprich: Das Testprogramm prüft erstmal das Limit der IDT und der GDT. Wenn dabei KEINE VM festgestellt wird, prüft das Programm auch noch die LDTR auf $DEAD0000. Fals der Wert nicht "normal" ist wird zurückgegeben, dass das Programm auf einer VM läuft. Bisher hatte diese Funktion ja optimale Ergebnisse. Bis halt auf Win9x Systemen, bei denen die LDT nativ noch verwendet wird und somit auch die LDTR Adresse <> $DEAD0000 ist.

Zitat von blackdrake:
Sollte ein anderes VirtualMachine-System beim dritten LDTR-Byte etwas anderes als $FF setzen, könnte es auch so funktionieren:

IsVirtualMachine := DrittesByte(LDTR) <> $00; Das wäre dann aber mit der Annahme verbunden, dass jedes native Windows System den LDTR 0xDEAD00.. verwendet
Die Annahme ist für Systeme >= WinNT richtig. Nur die alten Win9x Systeme fallen da aus dem Schema.

Zitat von blackdrake:
Ich finde das ein sehr interessantes Thema, zumal es im Internet kaum Informationen zu LDTR gib (bzw. mehr Fehlinformationen als absolut universell korrekte). Wenn du denkst, dass deine Methode überall korrekt funktioniert, wäre das ein perfekter Beitrag zur CodeLib. Leg dir auf jeden Fall eine Excel-Tabelle an, in der du alle Testergebnisse sammelst, die dir hier angeboten werden, sodass du schneller Zusammenhänge finden kannst.
Am Anfang sollte das ganze ja nur eine einfache Warnung an den Benutzer werden, aber mittlerweile ist bei mir auch theoretisches Interesse geweckt worden. Ich werde mal so eine Tabelle anlegen und diese sobald ist das ganze noch etwas optimiert / weiter getestet habe zusammen mit der Funktion in der CodeLib posten. Über die LDTR habe ich auch nicht viel Sinnvolles gefunden, außer dass man mittels des Assembler Befehls SLDT 2 Bytes des LDT Descriptor Selectors bekommen kann, welcher unter NT Systemen 0000 ist, da dort die LDT auf die der LDT Descriptor zeigt nicht mehr verwendet wird. Die vorangestellten Bytes $DEAD habe ich dem Programm "scoopy doo" entnommen, welches auch "versucht" VMs zu erkennen, allerdings auf eine andere Methode, welche nicht sehr zuverässig ist.

[Edit: Habe mal einen leicht modifizierten Test angehangen, welcher den LDTR Test auf Win9x Systemen einfach überspringt. Die Ergebnisse sollten so wieder stimmen]

Gruß Zacherl
Angehängte Dateien
Dateityp: zip xdtinfo_187.zip (11,3 KB, 6x aufgerufen)
  Mit Zitat antworten Zitat