Parsi Coders

نسخه‌ی کامل: AntiVmWare
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
The virtual machine system VMware uses a “backdoor
communication port” to be able to pass data between the host
and the guest operating system. This communication port is
used to read and write clipboard information, drag and drop
between host and guest operating system, and allow file
sharing between the two running systems. Communication on
this port occurs by using two privileged x86 instructions, “IN”
and “OUT”. These two instructions cannot normally be run
from an unprivileged vantage point and would generate an
exception; however when running under VMware, the
emulation layer has implemented these particular instructions
differently allowing them to be executed from an unprivileged
vantage point. As such we can use these methods to detect if
we are in a VMware virtual environment.
In the inline assembly below we setup a call to the “IN”
instruction by pushing a number of static values onto the stack.
The first parameter of interest is the static string ‘VMXh’.
This string is the “magic” value that must be present for the
virtual machine to know that the request is legitimate. The
value 10 is the particular VMware backdoor function that we
wish to execute, while the value ‘VX’ is the default port that
the VMware backdoor IO listens for. Finally we execute the
“IN” call and analyze the return value. If the return value is
zero, and we have reached our exception handler, we know
that we are not running in a virtual session. If the return value
is non zero and we do not reach out exception handler we are
running inside of VMware
کد:
Function AntiVMware():boolean;
begin
try
  asm
   push edx;
   push ecx;
   push ebx;
   mov eax, 'VMXh';
   mov ebx, 0; // This can be any value except MAGIC
   mov ecx, 10; // "CODE" to get the VMware Version
   mov edx, 'VX'; // Port Number
   in eax, dx; // Read port
   //On return EAX returns the VERSION
   cmp ebx, 'VMXh'; // is it VMware
   setz Result; //Set flag state
   pop ebx;
   pop ecx;
   pop edx;
  end;
except
  Result:= False;
end;
end;



[code]

if AntiVMware then
  MessageBox(0, 'VMware Instance Detected', 'VMware Detected', +MB_OK +MB_ICONINFORMATION)
  else
  MessageBox(0, 'No VMware Instance Detected', 'No VMware Detected', +MB_OK +MB_ICONINFORMATION);

با سورس بالا میتونید از اجرا شدن برنامه در محیط vm جلوگیری کنید.

بر روی این نسخه هم تست شده و جواب داده

VM WARE 7.1.0
تشکر
میشه در مورد الگوریتم و اینکه چطور تشخیص میده سیستم مجازی هست، توضیح بدین؟
مرسی
سپاس
بالاش توضیح داده اینم ترجمش که گویا هست :ر:
ماشین مجازی سیستم VMWARE با استفاده از درپشتی "
ارتباط پورت "را قادر به انتقال داده ها بین میزبان
و مهمان سیستم عامل. این پورت ارتباطی است
استفاده می شود به خواندن و نوشتن اطلاعات مربوط به کلیپ بورد، کشیدن و رها کردن
بین میزبان و مهمان سیستم عامل، و اجازه می دهد فایل
به اشتراک گذاری بین دو سیستم در حال اجرا است. ارتباطات در
این بندر رخ می دهد با استفاده از دو ممتاز دستورات x86، "در"
و "خارج". این دو دستورالعمل به طور معمول نمی تواند اجرا شود
از یک دیدگاه غیر ممتاز خواهد بود و تولید
استثنا، با این حال وقتی که در حال اجرا را تحت VMWare،
لایه شبیه ساز اجرا کرده است این دستورالعمل خاص
متفاوت اجازه می دهد آنها را به اجرا را از غیر ممتاز
دیدگاه. به این ترتیب ما می توانیم از این روش برای شناسایی استفاده کنید اگر
ما در یک محیط مجازی VMWARE هستیم.
مرسی
دقت نکرده بودم
یه سوال:
میشه در بعضی vmها، حالت dra & drop رو غیر فعال کرد، شبکه(NATو...) و همه راههای ارتباطی رو غیر فعال کرد. آیا باز هم کد بالایی جواب میده.
تشکر
سلام
بنظر من امکانش هست و توی سیستم عامل مجازی میشه غیر فعالشون کرد.
سمپل اماده ندارم
امین منظورش این بود اگه تمام ارتباط ها با سیستم اصلی مثل درگ دراپ فایل و شبکه و ... حذف بشه آیا باز هم این کد برای تشخیص ماشین مجازی کار میکنه ؟
که فکر نکنم ربطی داشته باشه کد بازم باید تشخیص بده.
اها
اره
مربوط نیست  من سوال جوری دیگه خوندم.
ببخشید
نه ربطی ندارن
تشخیص میده البته تا VM WARE 7.1.0 امکان داره نسخه های جدید تغییراتی داده باشن