AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ASM Verständnisproblem

Ein Thema von delphinub23 · begonnen am 25. Sep 2013 · letzter Beitrag vom 26. Sep 2013
Antwort Antwort
delphinub23

Registriert seit: 27. Okt 2010
Ort: Chemnitz
110 Beiträge
 
Delphi XE3 Professional
 
#1

ASM Verständnisproblem

  Alt 25. Sep 2013, 16:04
Hallo delphianer,

ich versuche herauszufinden, ob meine Anwendung unter Parallels ausgeführt wird.
dazu habe ich folgenden Assembler-Code gefunden:

Code:
pushad
 mov esi, [ebp+xxxx]
 mov eax, [esi] ;load auth value
 mov ebx, [esi+4] ;load auth value
 mov ecx, [esi+8] ;load auth value
 mov edx, [esi+0Ch] ;load auth value
 mov edi, [esi+10h] ;load auth value
 mov esi, [ebp+xxxx] ;load real esi
 xor ebp, ebp
 push ebp ;upper bound value
 push ebp ;lower bound value
 mov ebp, '0x90'
 bound ebp, [esp] ;raise exception
 add esp, 8 ;discard bound values
 popad
In der Beschreibung steht, dass die Adressen spezifisch zu der "current execution session" sind.
Was bedeutet das und wie bekomme ich die Information?


Über folgende Funktionen finde ich bereits heraus, ob es sich um VMWare handelt.

Delphi-Quellcode:
function ObtainBIOSSerialNumber: string;
const
  WbemQuery = 'SELECT SerialNumber FROM Win32_BIOS';
  wbemFlagForwardOnly = $00000020;
var
  FSWbemLocator : OLEVariant;
  FWMIService : OLEVariant;
  FWbemObjectSet: OLEVariant;
  FWbemObject : OLEVariant;
  oEnum : IEnumvariant;
  iValue : LongWord;
begin;
  Result := '';
  try
    FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
    FWMIService := FSWbemLocator.ConnectServer('localhost', 'root\CIMV2', '', '');
    FWbemObjectSet:= FWMIService.ExecQuery(WbemQuery,'WQL', wbemFlagForwardOnly);
    oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
    if oEnum.Next(1, FWbemObject, iValue) = S_OK then
      Result := String(FWbemObject.SerialNumber);
  except
    on E:EOleException do
      OutputDebugString(PChar(Format('EOleException %s %x', [E.Message,E.ErrorCode])));
    on E:Exception do
      OutputDebugString(PChar(Format('%s: %s', [E.Classname, E.Message])));
  end;
end;

function IsVMWareBIOS: Boolean;
var
  BIOSSerial: string;
begin
  CoInitialize(nil);
  try
    BIOSSerial := ObtainBIOSSerialNumber;
    a := BIOSSerial; // test
    Result := (Pos('VMware-', BIOSSerial) > 0) or (Pos('VMW', BIOSSerial) > 0);
  finally
    CoUninitialize;
  end;
end;
Resultat unter Parallels: [Parallels-0C 37 30...] anstatt [VMWare-0C 37 30...].
Ist das zuverlässig genug um auch Parallels damit abzustecken?

Könnte mir jemand Hilfestellung zum ASM geben?

Geändert von delphinub23 (25. Sep 2013 um 16:17 Uhr) Grund: schlechte Formulierung
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#2

AW: ASM Verständnisproblem

  Alt 25. Sep 2013, 17:14
Ohne jetzt auf dein konkretes Problem eingehen zu können:
Von Zacherl gibt es in der DP eine Unit zum Erkennen von VMs.
Außerdem gab es auch eine interessante Diskussion (vermutlich bei der Entstehung) dazu.

Vielleicht hilft das dir weiter.
  Mit Zitat antworten Zitat
delphinub23

Registriert seit: 27. Okt 2010
Ort: Chemnitz
110 Beiträge
 
Delphi XE3 Professional
 
#3

AW: ASM Verständnisproblem

  Alt 25. Sep 2013, 19:32
Vielen Dank! Das hilft mir etwas weiter. Ich frage mich nur wo oder wie Zacherl und Co. auf die Adressen gekommen sind
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

AW: ASM Verständnisproblem

  Alt 26. Sep 2013, 13:10
Vielen Dank! Das hilft mir etwas weiter. Ich frage mich nur wo oder wie Zacherl und Co. auf die Adressen gekommen sind
Im Prinzip durch Testen unter den verschiedenen unterstüzten VM / OS Konstellationen. Die Unit wurde lange nicht mehr gewartet, deshalb kann ich leider nichts dazu sagen, ob sich eventuell einige Werte in neueren Versionen der Virtualisierungssoftware geändert haben.

Auch noch zu erwähnen ist, dass die verwendete Methode bei aktivierter Hardwarevirtualisierung (heute normalerweise Standard) nicht funktioniert.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Antwort Antwort


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 16:22 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