AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi VMWare, VirtualPC, VirtualBox, etc detection
Thema durchsuchen
Ansicht
Themen-Optionen

VMWare, VirtualPC, VirtualBox, etc detection

Offene Frage von "Zacherl"
Ein Thema von Zacherl · begonnen am 12. Sep 2007 · letzter Beitrag vom 13. Sep 2007
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von Zacherl
Zacherl

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

VMWare, VirtualPC, VirtualBox, etc detection

  Alt 12. Sep 2007, 19:49
Hey,

ich habe folgende Methode gesehen, mit der man testen kann, ob das eigene Programm virtualisiert wird.

Code:
SIDT FWORD PTR opIDT <-- Store IDT.
CMP DWORD PTR [opIDT+2], 0F0000000h <-- Check IDT location (possibly Virtual PC check).
JLE _check_virtualpc
CMP DWORD PTR [opIDT+2], 0FF000000h <-- Check IDT VMWare.
JG_vmware_detected

check_virtualpc:
CMP DWORD PTR [opIDT+2], 0D0000000h <-- Check IDT Virtual PC.
JGE _virtualpc_detected
Nur habe ich leider keine Idee, wie ich das ganze in eine inline Assembler Funktion konvertieren könnte. Kann da jemand helfen?

Gruß
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#2

Re: VMWare, VirtualPC, VirtualBox, etc detection

  Alt 12. Sep 2007, 20:18
Einfach die Bytefolge des Opcodes mit "DB" in einem Inline-ASM-Block einbinden.

Allerdings ist SIDT Dummfug und selbst Frau Rutkowska hat das bereits implizit eingestanden, indem sie es in ihrem SVV garnicht erst aus dem Usermode aufruft ... naja, und Thema Kernelmode und Delphi will ich hier nicht aufwaermen. Zur weiteren Lektuere, warum es Dummfug ist empfehle ich meine beiden Blogeintraege sowie den von dort herunterladbaren Artikel und das Programm mit Treiber:

http://blog.assarbad.net/20061105/re...ing-colorless/
http://blog.assarbad.net/20070401/re...ess-continued/

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



Nachtrag: Uebrigens bin ich persoenlich bei diesem Thema immer aeusserst skeptisch. Bisher habe ich nur zwei Anwendungen fuer das was du willst gesehen: Forschung (i.e. Neugierde) und Malware.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

Re: VMWare, VirtualPC, VirtualBox, etc detection

  Alt 12. Sep 2007, 20:48
Sehr interessante Artikel. Den Maleware Aspekt hatte ich bisher nie so betrachtet. Ich möchte den User meines Programmes darauf hinweisen, dass einige Rechenintensive Aufgaben nicht in einer WM ausgeführt werden können, da die Ausführzeit einfach zu lange dauern würde.

Wie mache ich das mit dem Opcode?
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#4

Re: VMWare, VirtualPC, VirtualBox, etc detection

  Alt 12. Sep 2007, 21:06
Zitat von Zacherl:
Wie mache ich das mit dem Opcode?
Bspw. bei Rutkowska im Code nachschauen:

Das sind alle Opcodes als einfache Bytes: \x0f\x01\x0d\x00\x00\x00\x00\xc3

Ansonsten die ueblichen Verdaechtigen, sprich Intel Manuals. Und die sagen:

SIDT = 0F 01 /1 .. .. .. .. (wobei die 4 freien Stellen eine Speicheradresse darstellen)

Bsp. fuer die Verwendung von "DB": http://www.delphipraxis.net/internal...=763908#763908
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

Re: VMWare, VirtualPC, VirtualBox, etc detection

  Alt 12. Sep 2007, 21:25
Da ich das mit den Opcodes nicht ganz verstehe habe ich es mal so versucht, weiß aber nicht, ob das ganze noch funktioniert. Im normalen System kommt eine AV und unter VirtualBox keine. Klingt eigentlich nicht schlecht oder?

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  opIDT: Pointer;

procedure _vmware_detected;
begin
  Caption := 'VMWare';
end;

procedure _virtualpc_detected;
begin
  Caption := 'VirtualPC';
end;

procedure _check_virtualpc;
asm
  CMP DWORD PTR [opIDT+2], $0D0000000
  JGE _virtualpc_detected
end;

begin
  asm
    SIDT FWORD PTR opIDT
    CMP DWORD PTR [opIDT+2], $0F0000000
    JLE _check_virtualpc
    CMP DWORD PTR [opIDT+2], 0FF000000h
    JGE _vmware_detected
  end;
end;
Allerdings werden weder _vmware_detected noch _virtualpc_detected aufgerufen.
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#6

Re: VMWare, VirtualPC, VirtualBox, etc detection

  Alt 12. Sep 2007, 21:29
Bei dem Code wuerde ich immer eine AV erwarten. Werde nachher mal schauen, ob ich es in FP schreiben kann. Wie schon anderswo erwaehnt, habe ich kein Delphi installiert.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

Re: VMWare, VirtualPC, VirtualBox, etc detection

  Alt 12. Sep 2007, 21:33
Okey danke dir
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#8

Re: VMWare, VirtualPC, VirtualBox, etc detection

  Alt 13. Sep 2007, 00:56
Versuch's mal hiermit:

Delphi-Quellcode:
function GetSIDTBaseAddress: DWORD; assembler;
asm
  sub esp, 8 // create stack frame
  sidt qword ptr [esp]
  mov eax, dword ptr [esp+2] // write into EAX for return value
  add esp, 8 // clean up stack
end;
... oder wenn das nicht geht das hier

Delphi-Quellcode:
function GetSIDTBaseAddress: DWORD; assembler;
asm
  sub esp, 8 // create stack frame
  { sidt qword ptr [esp] }
  db $0F, $01, $0C, $24
  mov eax, dword ptr [esp+2] // write into EAX for return value
  add esp, 8 // clean up stack
end;
... und wenn das partout nicht geht, versuche

Delphi-Quellcode:
function GetSIDTBaseAddress: DWORD; assembler;
asm
  db $83, $EC, $08, $0F, $01, $0C, $24, $8B, $44, $24, $02, $83, $C4, $08
end;
Beide sind identisch, eben verschiedene Darstellungen. Und immer an die Besonderheiten denken, die ich u.a. im Artikel beschrieben habe.


Sobald du die BaseAddress hast, kannst du ja den Rest selber schreiben
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#9

Re: VMWare, VirtualPC, VirtualBox, etc detection

  Alt 13. Sep 2007, 01:50
Sorry, hatte einen Fehler drin. Statt [esp-2] muß es natürlich [esp+2] heißen. Habe es oben soeben korrigiert.

Noch für die Englischsprachigen: http://blog.assarbad.net/20070913/ge...s-with-delphi/
  Mit Zitat antworten Zitat
blackdrake

Registriert seit: 21. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#10

Re: VMWare, VirtualPC, VirtualBox, etc detection

  Alt 13. Sep 2007, 07:00
Hallo.

Besteht noch ein Problem? Leider habe ich noch nicht so das Vergnügen mit dem Inline-Assembler gehabt, aber ich glaube du hast ein Problem bei den Jump-Befehlen (JMP/JGE/... etc). Meines Wissens nach müsste ein Assembler Jump-Befehl in Delphi so aussehen:

Delphi-Quellcode:
procedure ...
asm
  ...
  jge @@sprungziel
  ...
  @@sprungziel
  ...
end;
Wenn du hingegen eine Funktionen aufrufen möchtes (z.B. VirtualPCErkannt() oder VMWareErkannt()), die dann deine Warnungen oder Captions erzeugen, müsste folgendes Funktonieren:

Delphi-Quellcode:
procedure XYZ;
begin
  showmessage('XYZ');
end;

procedure ABC;
asm
  CALL XYZ;
end;
Kann es leider derzeit nicht ausprobieren.

Gruß
blackdrake
Daniel Marschall
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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