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?