rendered paste bodyfunction running_inside_vpc: boolean; assembler;
asm
push ebp
mov ecx, offset @@exception_handler
mov ebp, esp
push ebx
push ecx
push dword ptr fs:[0]
mov dword ptr fs:[0], esp
mov ebx, 0 // flag
mov eax, 1 // VPC function number
// call VPC
db 00Fh, 03Fh, 007h, 00Bh
mov eax, dword ptr ss:[esp]
mov dword ptr fs:[0], eax
add esp, 8
test ebx, ebx
setz al
lea esp, dword ptr ss:[ebp-4]
mov ebx, dword ptr ss:[esp]
mov ebp, dword ptr ss:[esp+4]
add esp, 8
jmp @@ret
@@exception_handler:
mov ecx, [esp+0Ch]
mov dword ptr [ecx+0A4h], -1 // EBX = -1 -> not running, ebx = 0 -> running
add dword ptr [ecx+0B8h], 4 // -> skip past the detection code
xor eax, eax // exception is handled
ret
@@ret:
end;
function running_inside_vmware: Boolean;
var
rc: Boolean;
begin
rc := False;
try
asm
push edx
push ecx
push ebx
mov eax, 'VMXh'
mov ebx, 0
mov ecx, 10
mov edx, 'VX'
in eax, dx
cmp ebx, 'VMXh'
setz [rc]
pop ebx
pop ecx
pop edx
end;
except
on EPrivilege do rc := False;
end;
Result := rc;
end;
Function IsInSandBox: Boolean;
Var
TCount1 :Integer;
TCount2 :Integer;
TCount3 :Integer;
Begin
Result := False;
TCount1 := GetTickCount();
Sleep(5000);
TCount2 := GetTickCount();
Sleep(5000);
TCount3 := GetTickCount();
If ((TCount2 - TCount1) < 5000) And
((TCount3 - TCount1) < 10000) Then
Result := True;
End;
////////////////////////////////////////////////////////////////////////////////
begin
////////////////////////////////////////////////////////////////////////////////
if running_inside_vpc=true then exit;
if running_inside_vmware=true then exit;
if IsInSandBox=true then exit;