Moin,
ich werde hier einige VMDetection Methoden releasen von ziemlich banalen zu
etwas komplexeren. Note es kann sein das diese Methoden nicht zu 100% funktionieren, da sie teilweise
gezielt einzelne VM Anbieter ansprechen. Insgesamt habe ich 7 verschiedene Methoden die ich nun in C++ umschreibe
und für Windows Anpasse.
Mein C++ codingstyle ist scheiße!
Ich bin kein experte für WindowsAPI weder noch für c++.
Verbesserungsvorschläge gerne gesehn!
Kann man diese Methoden Bypassen?
Ja kann man. Aber kein 0815 Metin2 Pleb.
Folgende Methoden werden folgen:
-TSC Register
- MacAdresse Format First 3 Segements!
- HyperVisor Detection
- Via WMIC
- Via CPU Tempreature
- Via Network Interface
- CPUID Prefix
- Invalid ASM Instruction set
Die erste die ich mit euch teilen möchte nutzt das TSC Register.
Erklärung zum TSC Bitte melden Sie sich an, um diesen Link zu sehen.
Hier die eklärung zu __rdtsc() Bitte melden Sie sich an, um diesen Link zu sehen.
Edit: Doch kein ASM nötig __rdtsc() funktioniert auch für 32Bit!
Das obere Snippet ist für 64Bit und 32 Bit unten nur für 32Bit, da ASM nur auf 32 Bit compiled werden kann!
Die 2 gesammelten Timestamps werden subtrahiert.
Bei einem non virtualized System liegt die Differenz meistens bei 80-90.
Bei einem virtualisierten eher über 500.
Wieso funktioniert der Bums?
Die direkte Erklärung ist viel ausführlicher und komplexer bin dafür aber zu dumm!
VMware sagt folgendes zum TSC Timekeeping in einer virtuellen Maschiene.
ZitatVirtual TSC
Current VMware products virtualize the TSC in apparent time. The virtual TSC stays in step with the other
timer devices visible in the virtual machine. Like those devices, the virtual TSC falls behind real time when
there is a backlog of timer interrupts and catches up as the backlog is cleared. Thus, the virtual TSC does not
count cycles of code run on the virtual CPU; it advances even when the virtual CPU is not running. The virtual
TSC also does not match the TSC value on the host hardware ......
Weitere folgen die Tage.
MfG
Zynko