PDA

View Full Version : حرفه ای: برنامه ای که احتمالاً می تواند محیط مجازی (مثل Virtual PC و یا VmWare) را از محیط واقعی تشخیص دهد



BORHAN TEC
یک شنبه 27 تیر 1389, 19:16 عصر
سلام به همه دوستان.:قلب:
من برنامه ای نوشته ام که احتمالاً می تواند تشخیص دهد که بر روی یک محیط مجازی اجرا شده است یا خیر.
راستش این برنامه با یک روش ابتکاری ساخته شده که در تستهای انجام شده با نرم افزار مجازی ساز Parallels Workstation به درستی عمل کرده است.
هدف من از ایجاد این تاپیک این است که دوستان این نرم افزار را تست کنند و نتیجه را در این تاپیک قرار دهند تا مطمئن شوم که آیا به درستی کار می کند یا خیر.
در ضمن از دوستان عزیز خواهشمندم که در صورت تست نام نرم افزار مجازی ساز را هم در این تاپیک ذکر کنند.:چشمک:

در زیر لینک دانلود نرم افزار قرار داده شده است:

Felony
یک شنبه 27 تیر 1389, 19:50 عصر
من با WMware تست کردم ، درست جواب نداد و به عنوان یک سیستم واقعی شناختش .

BORHAN TEC
یک شنبه 27 تیر 1389, 21:25 عصر
من با WMware تست کردم ، درست جواب نداد و به عنوان یک سیستم واقعی شناختش .
همانطور که دیدید این برنامه در محیط VmWare به درستی کار نکرد.
آیا دوستان می توانند راه حلهای احتمالی خودشان برای یک تشخیص درست در این ضمینه را ارائه کنند؟:متفکر:







.

شبیر کریمی
شنبه 06 شهریور 1389, 10:03 صبح
اینجا روش کار رو توضیح داده:

http://www.codeproject.com/KB/system/VmDetect.aspx

mossaferin
شنبه 06 شهریور 1389, 14:59 عصر
راستش این برنامه با یک روش ابتکاری ساخته شده که در تستهای انجام شده با نرم افزار مجازی ساز Parallels Workstation به درستی عمل کرده است.
هدف من از ایجاد این تاپیک این است که دوستان این نرم افزار را تست کنند و نتیجه را در این تاپیک قرار دهند تا مطمئن شوم که آیا به درستی کار می کند یا خیر.
در ضمن از دوستان عزیز خواهشمندم که در صورت تست نام نرم افزار مجازی ساز را هم در این تاپیک ذکر کنند.


حقیقت امر اینه که از روی exe نمیشه راجع به روش ابتکاری و راه کارهای دیگه بحث کرد ، بهتر بود که سورسش رو قرار میدادید

اینها چندتا نمونه کد که شاید بدردتون بخوره



function 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 IsVMwarePresent(): LongBool; stdcall; begin
Result := False;
{$IFDEF CPU386}
try
asm
mov eax, 564D5868h
mov ebx, 00000000h
mov ecx, 0000000Ah
mov edx, 00005658h
in eax, dx
cmp ebx, 564D5868h
jne @@exit
mov Result, True
@@exit:
end;
except
Result := False;
end;
{$ENDIF}
end;


uses SysUtils;

function IsInsideVMWare: Boolean;
var
rc: Boolean;
begin
rc := False;

try
asm
push edx
push ecx
push ebx

mov eax, 'VMXh'
mov ebx, 0 // any value but not the MAGIC VALUE
mov ecx, 10 // get VMWare version
mov edx, 'VX' // port number

in eax, dx // read port
// on return EAX returns the VERSION
cmp ebx, 'VMXh' // is it a reply from VMWare?
setz [rc] // set return value

pop ebx
pop ecx
pop edx
end;
except
on EPrivilege do rc := False;
end;

Result := rc;
end;


موفق باشی