Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Bitte testen! IDT base Adresse auslesen + VMM detection (https://www.delphipraxis.net/99543-bitte-testen-idt-base-adresse-auslesen-vmm-detection.html)

Zacherl 13. Sep 2007 15:53


Bitte testen! IDT base Adresse auslesen + VMM detection
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hey,

in Anlehnung an meinen Thread wie man virtuelle Maschienen mittels der SIDT base address erkennen kann habe ich aufgrund von Problemen unter allen emulierten Systemen außer XP eine weitere Variante versucht. Die IDT base Adresse.

Diese Methode erkennt zuverlässig alle XP, Win2000 und Vista unter VirtualBox. Das einzige Problem: Es erkennt ein richtiges Vista (und vermutlich ein richtiges Win2000) auch als virtuelle Maschine.

Nun brauche ich möglichst viele Testwerte von Vista und Win2000 Systemen. Ob innerhalb einer VM oder außerhalb ist mir egal. Am besten beides.

Folgendes Testprogramm zeigt euch die IDT base address in Hexadezimaler Zahl an und eine vorläufige Hypothese ob das System eine VM ist oder nicht. (Klapt halt nur richtig unter XP)

Bitte postet einfach das verwendete Betriebsystem und die Adresse der IDT die angezeigt wird.

Vielen Dank

Leonard 13. Sep 2007 16:19

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

auf meinem Win2000 bekomme ich folgendes Ergebnis:

Code:
80 03 64 00
Code:
[Probably] NOT running in virtual maschine!
mfg Leonard

Zacherl 13. Sep 2007 16:25

Re: Bitte testen! IDT base Adresse auslesen + VMM detection
 
Danke dir, damit kann ich Win2000 jetzt sogar schon ausschließen :) Bleibt also nur noch Vista zu testen. Scheinbar wurde der Bereich in dem die IDT liegen kann von XP auf Vista geändert.

Die Muhkuh 13. Sep 2007 16:30

Re: Bitte testen! IDT base Adresse auslesen + VMM detection
 
Code:
---------------------------
Info
---------------------------
E386D400
---------------------------
OK  
---------------------------
Code:
---------------------------
Info
---------------------------
[Probably] running IN virtual maschine!   
---------------------------
OK  
---------------------------
Windows Vista Ultimate 32-Bit, läuft NICHT in einer VM ;-)

Leonard 13. Sep 2007 16:32

Re: Bitte testen! IDT base Adresse auslesen + VMM detection
 
Ich habs eben nochmal gestartet und da zeigt das Programm eine andere Adresse.

Code:
89 05 77 E8
Der Text bleibt der gleiche.

freak4fun 13. Sep 2007 16:35

Re: Bitte testen! IDT base Adresse auslesen + VMM detection
 
Code:
---------------------------
Info
---------------------------
82648960
---------------------------
OK  
---------------------------
Code:
---------------------------
Info
---------------------------
[Probably] running IN virtual maschine!   
---------------------------
OK  
---------------------------
Laptop Windows Vista Business 32Bit aus der *.zip gestartet.

Code:
---------------------------
Info
---------------------------
81AFF400
---------------------------
OK  
---------------------------
Code:
---------------------------
Info
---------------------------
[Probably] running IN virtual maschine!   
---------------------------
OK  
---------------------------
Laptop Windows Vista Business 32Bit normal gestartet.


Ich benutze keine VM.

MfG
freak

Zacherl 13. Sep 2007 16:41

Re: Bitte testen! IDT base Adresse auslesen + VMM detection
 
Habt ihr beiden Dualcore Systeme? Habe jetzt mal eine Version hochgeladen die die AffinityMask direkt auf die erste CPU setzt. Nun sollte auch ein einheitlicher Wert angezeigt werden.

Die Muhkuh 13. Sep 2007 16:42

Re: Bitte testen! IDT base Adresse auslesen + VMM detection
 
Ja, den E6600

freak4fun 13. Sep 2007 16:43

Re: Bitte testen! IDT base Adresse auslesen + VMM detection
 
Ja! AMD Turion 64 X2 M TL-56 1,8Ghz :mrgreen:

MfG
freak

Zacherl 13. Sep 2007 16:44

Re: Bitte testen! IDT base Adresse auslesen + VMM detection
 
Ich hab mal eine neue Version hochgeladen .. bitte nocheinmal testen :)

Leonard 13. Sep 2007 16:46

Re: Bitte testen! IDT base Adresse auslesen + VMM detection
 
Ich habe einen P4 HT. Mit der neuen Version wird immer die gleiche Adresse angezeigt.

Die Muhkuh 13. Sep 2007 16:47

Re: Bitte testen! IDT base Adresse auslesen + VMM detection
 
Code:
---------------------------
Info
---------------------------
E386D400
---------------------------
OK  
---------------------------
Code:
---------------------------
Info
---------------------------
[Probably] running IN virtual maschine!   
---------------------------
OK  
---------------------------

freak4fun 13. Sep 2007 16:48

Re: Bitte testen! IDT base Adresse auslesen + VMM detection
 
Gleiche Ergebnis. Running IN VM. Brauchst die Zahlen?

Code:
---------------------------
Info
---------------------------
81AFF400
---------------------------
OK  
---------------------------
Code:
---------------------------
Info
---------------------------
[Probably] running IN virtual maschine!   
---------------------------
OK  
---------------------------

Zacherl 13. Sep 2007 16:49

Re: Bitte testen! IDT base Adresse auslesen + VMM detection
 
@Leonard: Welcher Wert? Der erste oder der zweite?
@freak4fun: Jap die Zahlen bitte :)

Leonard 13. Sep 2007 16:51

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

Zitat von Zacherl
@Leonard: Welcher Wert? Der erste oder der zweite?

Die erste, also 80 03 64 00.

Edit:
Was ich noch gar nicht erwähnt habe, ich habe hier keine VM...

Zacherl 13. Sep 2007 16:57

Re: Bitte testen! IDT base Adresse auslesen + VMM detection
 
Bei dem Wert sollte auch keine VM angezeigt werden .. Bei allen Systemen <= XP ist der Bereich in dem die IDT liegen kann für die erste CPU zwischen 80000000 und 80FFFFFF. Ab Vista scheint sich das leider geändert zu haben =/

Die bisherigen Werte sind:
Code:
WinVista Ultimate
---------------------------
83ABF400
E386D400 
---------------------------

WinVista Buisness
81AFF400
---------------------------

WinVista Home Premium
---------------------------
83D20400
---------------------------
Ich brauche allerdings noch viel mehr Werte um eine Hypothese aufzustellen, in welchem Bereich die Werte unter Vista liegen dürfen.

Olli 13. Sep 2007 17:39

Re: Bitte testen! IDT base Adresse auslesen + VMM detection
 
Ja, was soll ich sagen ... da hat wohl einer doch nicht meinen ganzen Artikel gelesen. Weil ja Englisch eine schwere Sprache ist, zitiere ich mich hier einfach mal selber auf Englisch:

Zitat:

Zitat von Olli
So if the IDT base address is at a higher position than 0xD0000000, she concludes to be inside a virtual machine. This conclusion is wrong, even if we would assume for a moment that her claim about the relocated GDTR/IDTR - see the foreword - are right. But despite that, the problem would already arise on multi-processor machines where a test run could give reasonably high addresses for one processor and "normal" ones for the other. Since the redpill.c does not take this into account the result is per-se unreliable. I have also seen some papers that attempted to call the instruction a number of times under the assumption that the result would show an even distribution between the processors. In my opinion this is also not quite the best approach, given that one can easily set the affinity of the process without special privilege requirements.

http://blog.assarbad.net/wp-content/..._colorless.pdf

Ja, Zacherl, habe mal in dein Programm geschaut und da leider nichts davon gesehen, dass du auf diese Problematik eingehst. Die Ergebnisse hier sind also in etwa so sinnvoll wie Lottozahlen. Neue Variante? Warum gibst du ihnen nicht einfach SIDTcon? Ist kleiner, macht es fuer Kernelmode und Usermode und beachtet die Affinitaet.

Zacherl 13. Sep 2007 18:02

Re: Bitte testen! IDT base Adresse auslesen + VMM detection
 
Das Programm von mir setzt die Affinity Mask auf die erste CPU. Daher wird doch auch nur die Base Adresse der IDT von CPU1 angezeigt. Bei meinen Tests hatte eigentlich immer die erste CPU die "normalen" Werte. Oder ist das nicht immer so?

Edit: Naja hab mal zur Sicherheit eine Version hochgeladen die alle CPUs durchgeht.

@Oli: Kann man sagen, dass wenn mindestens ein Wert der CPU "normal" ist es sich nicht um eine VM handelt?

freak4fun 13. Sep 2007 19:34

Re: Bitte testen! IDT base Adresse auslesen + VMM detection
 
Hallo, klar kann ich nochmal testen! ;)

Code:
---------------------------
CPU 1     
---------------------------
Base adress:  

81AFF400
---------------------------
OK  
---------------------------
Code:
---------------------------
CPU 2     
---------------------------
Base adress:  

82648960
---------------------------
OK  
---------------------------
MfG
freak :firejump:

Zacherl 13. Sep 2007 19:45

Re: Bitte testen! IDT base Adresse auslesen + VMM detection
 
Danke dir nochmal :)

Die Muhkuh 13. Sep 2007 20:15

Re: Bitte testen! IDT base Adresse auslesen + VMM detection
 
Code:
---------------------------
CPU 1     
---------------------------
Base adress:  

E386D400
---------------------------
OK  
---------------------------
Code:
---------------------------
CPU 2     
---------------------------
Base adress:  

C61D98E0
---------------------------
OK  
---------------------------

Zacherl 13. Sep 2007 20:49

Re: Bitte testen! IDT base Adresse auslesen + VMM detection
 
Danke dir :) Du hast komische Werte :mrgreen: Dein Wert fällt vollkommen aus der Reihe:

Zitat:

WinVista Ultimate
---------------------------
CPU1: 83ABF400
CPU1: 82252400
CPU1: E386D400
CPU2: C61D98E0
---------------------------

WinVista Buisness
---------------------------
CPU1: 81AFF400
CPU2: 82648960
---------------------------

WinVista Home Premium
---------------------------
CPU1: 822CD400
CPU1: 83D20400
CPU1: 827FF400
CPU2: 835DE960
CPU1: 821A6400
CPU2: 82603960
---------------------------
Die anderen Werte der CPU1 liegen in einem Bereich nicht größer als 84000000 und nicht kleiner 81000000. Außerdem enden alle mit 400.

Die Muhkuh 13. Sep 2007 20:52

Re: Bitte testen! IDT base Adresse auslesen + VMM detection
 
Ich war schon immer anders, als die anderen :mrgreen:

Zacherl 13. Sep 2007 20:55

Re: Bitte testen! IDT base Adresse auslesen + VMM detection
 
:D hast du irgendwas an Antiviren Software oder Firewalls installiert, welche eventuell die Tabelle hooken könnten?

Olli 14. Sep 2007 01:37

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

Zitat von Zacherl
Das Programm von mir setzt die Affinity Mask auf die erste CPU. Daher wird doch auch nur die Base Adresse der IDT von CPU1 angezeigt. Bei meinen Tests hatte eigentlich immer die erste CPU die "normalen" Werte. Oder ist das nicht immer so?

Sagen wir mal so, es gibt Ausnahmen. Die hast du ja selber implizit schon genannt ... Software, die was hookt. Bspw. SoftICE soll es tun. Ich habe kein SoftICE, daher weiß ich es nicht hundertprozentig sicher. Allerdings hookte SoftICE so ziemlich jeden Aspekt des Systems ... vermutlich der Grund warum das Produkt eingestellt wurde.

Wichtiger wäre es wohl, eine Kombination aus GDT, LDT und IDT zusammen mit TSS zu benutzen und eben die CPUs zu beachten. Seit VMWare 5.5 (oder 6?) kannst du zumindest nicht mehr davon ausgehen, daß nur eine CPU in einer VM verfügbar ist. Abgesehen davon solltest du den Humbug, der in den Papers von Rutkowska und dem welches Blackdrake ausgegraben hat (was dank der Schreibfehler deutlich unprofessionell auf mich wirkt) nicht zu ernstnehmen. Was ich meine ist der Teil wo gesagt wird, daß die IDT reloziert werden muß, weil es sonst zum Konflikt kommen würde. Ich konnte in meinem Paper eindeutig nachweisen, daß diese Annahme falsch ist, auch wenn ich prinzipiell nicht unbedingt eine bessere Idee habe. Allerdings ist SIDT eben keine privilegierte Instruktion, so daß der VMM nicht wissen kann wann sie ausgeführt wird - es sei denn diese Instruktion wird komplett emuliert ... was wiederum die Relokation der IDT (usw.) überflüssig machen würde.

Zitat:

Zitat von Zacherl
Kann man sagen, dass wenn mindestens ein Wert der CPU "normal" ist es sich nicht um eine VM handelt?

Außer bei Hooks. Es dürfte wohl ziemlich effektiv sein, wenn man auf einem Device-IRQL die Adresse der IDT austauscht. Da man es ohnehin immer nur für eine CPU macht und die einzigen Anforderungen die Ausrichtung (Alignment) und die Tatsache, daß es im residenten Speicher untergebracht sein muß, sein dürften, ist es nicht schwer einen solchen Hook zu setzen.

Da aber deine Absicht nur ist, den Anwender drauf hinzuweisen, daß er es nicht in einer VM laufen lassen soll, weil es rechenintensiv ist, sollte es ja kein Problem sein, wenn du auch mal innerhalb einer VM diesen Hinweis nicht anzeigst. Schlimmer wäre der umgekehrte Fall, wo du einen Nutzer auf einer nativen Maschine auf diese Sachen hinweist, weil du es fälschlicherweise als VM erkennst.

Zacherl 14. Sep 2007 05:52

Re: Bitte testen! IDT base Adresse auslesen + VMM detection
 
Danke für deine ausführliche Antwort :)

Zitat:

Zitat von Olli
Da aber deine Absicht nur ist, den Anwender drauf hinzuweisen, daß er es nicht in einer VM laufen lassen soll, weil es rechenintensiv ist, sollte es ja kein Problem sein, wenn du auch mal innerhalb einer VM diesen Hinweis nicht anzeigst. Schlimmer wäre der umgekehrte Fall, wo du einen Nutzer auf einer nativen Maschine auf diese Sachen hinweist, weil du es fälschlicherweise als VM erkennst.

Das leider ist bei Vista momentan das Problem wenn ich den IDT Source nehme. Muss ich es also doch mit dem SIDT Source versuchen.

Trotzdem bitte noch weiter testen.

Leonard 14. Sep 2007 07:55

Re: Bitte testen! IDT base Adresse auslesen + VMM detection
 
Guten Morgen,
hier nochmal meine Werte mit der aktuellen Version.

Code:
---------------------------
CPU 1     
---------------------------
Base adress:  

80036400
---------------------------
OK  
---------------------------
Code:
---------------------------
CPU 2     
---------------------------
Base adress:  

890577E8
---------------------------
OK  
---------------------------
mfg Leonard

Zacherl 14. Sep 2007 10:49

Re: Bitte testen! IDT base Adresse auslesen + VMM detection
 
Danke dir :) Die Werte der ersten CPU passen auch ins Konzepzt .. scheine aber den Bereich auf 80000000 - 84000000 erweitern zu müssen.

blackdrake 16. Sep 2007 17:07

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

Haben dir die Informationen von http://www.delphipraxis.net/internal...=777195#777195 eigentlich weitergeholfen oder soll ich die Tests mit dem neuen Testprogramm von diesem Thread durchführen? Microsoft Virtual PC 2007 hat dein Testprogramm bei meinen Windows Versionen jedenfalls perfekt detektiert.

Gruß
blackdrake

Zacherl 16. Sep 2007 20:55

Re: Bitte testen! IDT base Adresse auslesen + VMM detection
 
Ja danke dir, die Infos waren sehr nützlich. Hier mal ein neues Testprogramm, welches jetzt eine optimale Erkennungsrate haben sollte.

(Die LDT ist bisher noch 0 da mir der Code zum Auslesen fehlt. Siehe: http://www.delphipraxis.net/internal...t.php?p=778447)

[Edit: Neustes Programm im ersten Beitrag]

blackdrake 16. Sep 2007 21:27

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

Sag einfach bescheid, wann dein Testprogramm den dritten Wert erkennen kann. Dann führe ich das Testprogramm gerne nocheinmal auf den virtuellen PCs und in meiner Rechnerfarm aus. Freut mich, dass ich dir bei diesem Problem etwas weiterhelfen kann.

Gruß
blackdrake

Zacherl 16. Sep 2007 21:48

Re: Bitte testen! IDT base Adresse auslesen + VMM detection
 
Liste der Anhänge anzeigen (Anzahl: 1)
So also die LDT Base kann ich immer noch nicht auslesen, aber die ist eigentlich mehr Interessehalber. Was wichtig ist ist der LDTR. Auf normalen Systemen sollte dieser 0xDEAD0000 sein.

freak4fun 16. Sep 2007 22:00

Re: Bitte testen! IDT base Adresse auslesen + VMM detection
 
Ja. Unter XP auf Single Core und mein Turion Duo sagt auch ja bei beiden Kernen unter Vista. :)

@blackdrake: WO arbeitest du denn, das du ne Serverfarm hast? o.O

MfG
freak

blackdrake 16. Sep 2007 22:06

Re: Bitte testen! IDT base Adresse auslesen + VMM detection
 
Ich habe nichts von Serverfarm geredet. Meine 5 PCs, darunter mein erster PC (Win 95, 166 MHz), der immer noch intakt ist und zur Emulation alter Spiele verwendet wird, die auf VPCs nicht laufen. Und auf diesen Systemen habe ich Win 95, 98, 2000 und XP. Das ist meine Rechnerfarm.

Zacherl 16. Sep 2007 22:10

Re: Bitte testen! IDT base Adresse auslesen + VMM detection
 
Und die Schlussfolgerung, ob das Programm auf einer VM ausgeführt wird oder nicht war auch immer korrekt?

[Edit: Könnte unter Win9x nicht stimmen, da dort noch die LDT verwendet wird. Ich prüfe momentan, ob der LDT Descriptor = 0 (LDT Descriptor = Letzte 2 Bytes) ist. Dies ist auf NT basierten System immer der Fall, solange sie nicht emuliert werden]

blackdrake 16. Sep 2007 22:31

Re: Bitte testen! IDT base Adresse auslesen + VMM detection
 
Delphi-Quellcode:
Test mit xDTInfo, Compiliert: 16. September 2007, 22:46:06
Daniel Marschall, LDA

                        CPU Count  GDT                IDT                    LDTR        VM-Detektion
-------------------------------------------------------------------------------------------------------------------
Windows XP NATIVE      1           0x8003F0000 (1023) 0x8003F400 (2047)      0xDEAD0000   Negativ (OK)
Windows XP MVPC 2007    1           ???                 ???                     ???          ???

Windows 2K NATIVE      1           0x80036000 (1023)  0x80036400 (2047)      0xDEAD0000   Negativ (OK)
Windows 2K MVPC 2007    1           0xBDF98D00 (65535) 0xBDF98500 (2047)      0xDEADFFA8   Positiv (OK)

Windows ME NATIVE      1           ???                 ???                     ???          ???
Windows ME MVPC 2007    1           0xE8398D00 (65535) 0xE8398500 (2047)      0xDEADFFA8   Positiv (OK) *

Windows 98 SE NATIVE   1           0xC0F59000 (4095)  0x800AC000 (767)       0xDEAD00B8   Positiv (FEHLER!) **
Windows 98 SE MVPC 2007 1           0xE8398D00 (65535) 0xE8398500 (2047)      0xDEADFFA8   Positiv (OK)

Windows 95b NATIVE     1           (Wird nachgereicht)
Windows 95b MVPC 2007   1           0xE8398D00 (65535) 0xE8398500 (2047)      0xDEADFFA8   Positiv (OK)

* Ein Dienst des MS VPC 2007 ist bei dem ersten Öffnen der Anwendung abgestürzt

** Bei deinem alten VM-Testprogramm (siehe anderer Thread) war die Prüfung noch unter Win98 SE NATIVE OK!

Wie du siehst, ist nicht bei allen nativen Systemen der LDTR 0xDEAD0000. Wenn ich dir durch Systeminformationen oder die Ausführung weiterer Testprogramme behilflich sein kann, sag bescheid.
Gruß
blackdrake

Zacherl 16. Sep 2007 23:10

Re: Bitte testen! IDT base Adresse auslesen + VMM detection
 
Das sieht doch schonmal sehr gut aus :) Bin gespannt auf die Werte der Nativen Win9x Systeme :D Denke da wird fälschlicherweise eine VM erkannt. Muss ich noch fixen.

Vielen Dank dir schonmal blackdrake :)

freak4fun 16. Sep 2007 23:12

Re: Bitte testen! IDT base Adresse auslesen + VMM detection
 
Code:
CPU count: 1

Processor # 1
-------------
        GDT: FFC07000 <16687>
        IDT: FFC18000 < 2047>
        LDT: 00000000 <   0>

This application is [probably] running IN a virtual maschine!
Windows XP in einer VM von VMWare auf Laptop mit Turion Duo. Er wird als Duo von WIndows erkannt, aber keine Ahnung ob er auch genutzt wird. xD

MfG
freak

Zacherl 17. Sep 2007 06:07

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

testest du nochmal die neuste Version aus diesem Beitrag: http://www.delphipraxis.net/internal...778546#778546?
Kann den ersten Post leider nicht mehr editieren..

Gruß

blackdrake 17. Sep 2007 06:25

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

Heute reiche ich das Win95-Ergebnis noch nach. Bei Windows 98 schlägt der Test fehl, siehe oben.

Gruß
blackdrake


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:21 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz