Старый 13.02.2012, 02:02   #1
16bit
 
Регистрация: 16.06.2011
Сообщений: 66
Репутация: 9
По умолчанию определение виртуалок

предлагаю собрать тут различные методики для определения -
на какой системе ты находишься -виртуальная,реальная,впс, варя и тд.
16bit вне форума   Ответить с цитированием
Старый 13.02.2012, 18:00   #2
snake
 
Регистрация: 05.07.2010
Сообщений: 173
Репутация: 12
По умолчанию

ls -la /boot
?
ps -ax |grep xen
ps -ax |grep vmwar
snake вне форума   Ответить с цитированием
Старый 14.02.2012, 16:31   #3
16bit
 
Регистрация: 16.06.2011
Сообщений: 66
Репутация: 9
По умолчанию

на что обратить внимание в /boot?
в процессах тоже ничего не видно (мне кажется,что и не должно быть)
16bit вне форума   Ответить с цитированием
Старый 14.02.2012, 20:25   #4
C3 ~ RET
 
Аватар для C3 ~ RET
 
Регистрация: 30.08.2010
Сообщений: 46
Репутация: 15
Post

Цитата:
Сообщение от 16bit Посмотреть сообщение
предлагаю собрать тут различные методики для определения -
на какой системе ты находишься -виртуальная,реальная,впс, варя и тд.
Консольки:
Код:
	# Run Method for when run command is issued
	def run
		print_status("Gathering System info ....")
		vm = nil
		dmi_info = nil

		if is_root?
			dmi_info = cmd_exec("/usr/sbin/dmidecode")
		end

		# Check DMi Info
		if dmi_info
			case dmi_info
			when /microsoft corporation/i
				vm = "MS Hyper-V"
			when /vmware/i
				vm = "VMware"
			when /virtualbox/i
				vm = "VirtualBox"
			when /qemu/i
				vm = "Qemu/KVM"
			when /domu/i
				vm = "Xen"
			end
		end

		# Check Modules
		if not vm
			loaded_modules = cmd_exec("/sbin/lsmod")
			case loaded_modules.gsub("\n", " ")
			when /vboxsf|vboxguest/i
				vm = "VirtualBox"
			when /vmw_ballon|vmxnet|vmw/i
				vm = "VMware"
			when /xen-vbd|xen-vnif/
				vm = "Xen"
			when /virtio_pci|virtio_net/
				vm = "Qemu/KVM"
			when /hv_vmbus|hv_blkvsc|hv_netvsc|hv_utils|hv_storvsc/
				vm = "MS Hyper-V"
			end
		end

		# Check SCSI Driver
		if not vm
			proc_scsi = read_file("/proc/scsi/scsi") rescue ""
			case proc_scsi.gsub("\n", " ")
			when /vmware/i
				vm = "VMware"
			when /vbox/
				vm = "VirtualBox"
			end
		end

		# Check IDE Devices
		if not vm
			case cmd_exec("cat /proc/ide/hd*/model")
			when /vbox/i
				vm = "VirtualBox"
			when /vmware/i
				vm = "VMware"
			when /qemu/i
				vm = "Qemu/KVM"
			when /virtual (hd|cd)/i
				vm = "Hyper-V/Virtual PC"
			end
		end

		# Check using lspci
		if not vm
			case get_sysinfo[:distro]
			when /oralce|centos|suse|redhat|mandrake|slackware|fedora/
				lspci_data = cmd_exec("/sbin/lspci")
			when /debian|ubuntu/
				lspci_data = cmd_exec("/usr/bin/lspci")
			else
				lspci_data = cmd_exec("lspci")
			end

			case lspci_data.gsub("\n", " ")
			when /vmware/i
				vm = "VMware"
			when /virtualbox/i
				vm = "VirtualBox"
			end
		end

		# Xen bus check
		if not vm
			if cmd_exec("ls -1 /sys/bus").split("\n").include?("xen")
				vm = "Xen"
			end
		end

		# Check using lscpu
		if not vm
			case cmd_exec("lscpu")
			when /Xen/
				vm = "Xen"
			when /KVM/
				vm = "KVM"
			when /Microsoft/
				vm = "MS Hyper-V"
			end
		end

		# Check dmesg Output
		if not vm
			dmesg = cmd_exec("dmesg")
			case dmesg
			when /vboxbios|vboxcput|vboxfacp|vboxxsdt|(vbox cd-rom)|(vbox harddisk)/i
				vm = "VirtualBox"
			when /(vmware virtual ide)|(vmware pvscsi)|(vmware virtual platform)/i
				vm = "VMware"
			when /(xen_mem)|(xen-vbd)/i
				vm =  "Xen"
			when /(qemu virtual cpu version)/i
				vm = "Qemu/KVM"
			when %r{/dev/vmnet}
				print_good("This appears to be a VMware %bldHost%clr")
Для себя наиболее полезной нашёл dmidecode, т.к. ничего не слышал о ней ранее.

Окошки:
Код:
	# Method for detecting if it is a Hyper-V VM
	def hypervchk(session)
		begin
			vm = false
			key = session.sys.registry.open_key(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft', KEY_READ)
			sfmsvals = key.enum_key
			if sfmsvals.include?("Hyper-V")
				vm = true
			elsif sfmsvals.include?("VirtualMachine")
				vm = true
			end
			key.close
		rescue
		end
		if not vm
			begin
				key = session.sys.registry.open_key(HKEY_LOCAL_MACHINE, 'SYSTEM\ControlSet001\Services', KEY_READ)
				srvvals = key.enum_key
				if srvvals.include?("vmicheartbeat")
					vm = true
				elsif srvvals.include?("vmicvss")
					vm = true
				elsif srvvals.include?("vmicshutdown")
					vm = true
				elsif srvvals.include?("vmicexchange")
					vm = true
				end
			rescue
			end
		end
		print_status("This is a Hyper-V Virtual Machine") if vm
		return vm
	end

	# Method for checking if it is a VMware VM
	def vmwarechk(session)
		vm = false
		begin
			key = session.sys.registry.open_key(HKEY_LOCAL_MACHINE, 'SYSTEM\ControlSet001\Services', KEY_READ)
			srvvals = key.enum_key
			if srvvals.include?("vmdebug")
				vm = true
			elsif srvvals.include?("vmmouse")
				vm = true
			elsif srvvals.include?("VMTools")
				vm = true
			elsif srvvals.include?("VMMEMCTL")
				vm = true
			end
			key.close
		rescue
		end
		if not vm
			begin
				key = session.sys.registry.open_key(HKEY_LOCAL_MACHINE, 'HARDWARE\DEVICEMAP\Scsi\Scsi Port 0\Scsi Bus 0\Target Id 0\Logical Unit Id 0')
				if key.query_value('Identifier').data.downcase =~ /vmware/
					vm = true
				end
			rescue
			end
			key.close
		end
		if not vm
			vmwareprocs = [
				"vmwareuser.exe",
				"vmwaretray.exe"
			]
			session.sys.process.get_processes().each do |x|
				vmwareprocs.each do |p|
					if p == (x['name'].downcase)
						vm = true
					end
				end
			end
		end
		print_status("This is a VMware Virtual Machine") if vm
		return vm

	end

	# Method for checking if it is a Virtual PC VM
	def checkvrtlpc(session)
		vm = false
		vpcprocs = [
			"vmusrvc.exe",
			"vmsrvc.exe"
		]
		session.sys.process.get_processes().each do |x|
			vpcprocs.each do |p|
				if p == (x['name'].downcase)
					vm = true
				end
			end
		end
		if not vm
			begin
				key = session.sys.registry.open_key(HKEY_LOCAL_MACHINE, 'SYSTEM\ControlSet001\Services', KEY_READ)
				srvvals = key.enum_key

				if srvvals.include?("vpc-s3")
					vm = true
				elsif srvvals.include?("vpcuhub")
					vm = true
				elsif srvvals.include?("msvmmouf")
					vm = true
				end
				key.close
			rescue
			end
		end
		print_status("This is a VirtualPC Virtual Machine") if vm
		return vm
	end

	# Method for checking if it is a VirtualBox VM
	def vboxchk(session)
		vm = false
		vboxprocs = [
			"vboxservice.exe",
			"vboxtray.exe"
		]
		session.sys.process.get_processes().each do |x|
			vboxprocs.each do |p|
				if p == (x['name'].downcase)
					vm = true
				end
			end
		end
		if not vm
			begin
				key = session.sys.registry.open_key(HKEY_LOCAL_MACHINE, 'HARDWARE\ACPI\DSDT', KEY_READ)
				srvvals = key.enum_key
				if srvvals.include?("VBOX__")
					vm = true
				end
			rescue
			end
		end
		if not vm
			begin
				key = session.sys.registry.open_key(HKEY_LOCAL_MACHINE, 'HARDWARE\ACPI\FADT', KEY_READ)
				srvvals = key.enum_key
				if srvvals.include?("VBOX__")
					vm = true
				end
			rescue
			end
		end
		if not vm
			begin
				key = session.sys.registry.open_key(HKEY_LOCAL_MACHINE, 'HARDWARE\ACPI\RSDT', KEY_READ)
				srvvals = key.enum_key
				if srvvals.include?("VBOX__")
					vm = true
				end
			rescue
			end
		end
		if not vm
			begin
				key = session.sys.registry.open_key(HKEY_LOCAL_MACHINE, 'HARDWARE\DEVICEMAP\Scsi\Scsi Port 0\Scsi Bus 0\Target Id 0\Logical Unit Id 0')
				if key.query_value('Identifier').data.downcase =~ /vbox/
					vm = true
				end
			rescue
			end
		end
		if not vm
			begin
				key = session.sys.registry.open_key(HKEY_LOCAL_MACHINE, 'HARDWARE\DESCRIPTION\System')
				if key.query_value('SystemBiosVersion').data.downcase =~ /vbox/
					vm = true
				end
			rescue
			end
		end
		if not vm
			begin
				key = session.sys.registry.open_key(HKEY_LOCAL_MACHINE, 'SYSTEM\ControlSet001\Services', KEY_READ)
				srvvals = key.enum_key
				if srvvals.include?("VBoxMouse")
					vm = true
				elsif srvvals.include?("VBoxGuest")
					vm = true
				elsif srvvals.include?("VBoxService")
					vm = true
				elsif srvvals.include?("VBoxSF")
					vm = true
				end
				key.close
			rescue
			end
		end
		print_status("This is a Sun VirtualBox Virtual Machine") if vm
		return vm
	end

	# Method for checking if it is a Xen VM
	def xenchk(session)
		vm = false
		xenprocs = [
			"xenservice.exe"
		]
		session.sys.process.get_processes().each do |x|
			xenprocs.each do |p|
				if p == (x['name'].downcase)
					vm = true
				end
			end
		end
		if not vm
			begin
				key = session.sys.registry.open_key(HKEY_LOCAL_MACHINE, 'HARDWARE\ACPI\DSDT', KEY_READ)
				srvvals = key.enum_key
				if srvvals.include?("Xen")
					vm = true
				end
			rescue
			end
		end
		if not vm
			begin
				key = session.sys.registry.open_key(HKEY_LOCAL_MACHINE, 'HARDWARE\ACPI\FADT', KEY_READ)
				srvvals = key.enum_key
				if srvvals.include?("Xen")
					vm = true
				end
			rescue
			end
		end
		if not vm
			begin
				key = session.sys.registry.open_key(HKEY_LOCAL_MACHINE, 'HARDWARE\ACPI\RSDT', KEY_READ)
				srvvals = key.enum_key
				if srvvals.include?("Xen")
					vm = true
				end
			rescue
			end
		end
		if not vm
			begin
				key = session.sys.registry.open_key(HKEY_LOCAL_MACHINE, 'SYSTEM\ControlSet001\Services', KEY_READ)
				srvvals = key.enum_key
				if srvvals.include?("xenevtchn")
					vm = true
				elsif srvvals.include?("xennet")
					vm = true
				elsif srvvals.include?("xennet6")
					vm = true
				elsif srvvals.include?("xensvc")
					vm = true
				elsif srvvals.include?("xenvdb")
					vm = true
				end
				key.close
			rescue
			end
		end
		print_status("This is a Xen Virtual Machine") if vm
		return vm
	end

	def qemuchk(session)
		vm = false
		if not vm
			begin
				key = session.sys.registry.open_key(HKEY_LOCAL_MACHINE, 'HARDWARE\DEVICEMAP\Scsi\Scsi Port 0\Scsi Bus 0\Target Id 0\Logical Unit Id 0')
				if key.query_value('Identifier').data.downcase =~ /qemu/
					print_status("This is a QEMU/KVM Virtual Machine")
					vm = true
				end
			rescue
			end
		end
		if not vm
			begin
				key = session.sys.registry.open_key(HKEY_LOCAL_MACHINE, 'HARDWARE\DESCRIPTION\System\CentralProcessor\0')
				if key.query_value('ProcessorNameString').data.downcase =~ /qemu/
					print_status("This is a QEMU/KVM Virtual Machine")
					vm = true
				end
			rescue
			end
		end

		return vm
	end

	# run Method
	def run
		print_status("Checking if #{sysinfo['Computer']} is a Virtual Machine .....")
		found = hypervchk(session)
		found = vmwarechk(session) if not found
		found = checkvrtlpc(session) if not found
		found = vboxchk(session) if not found
		found = xenchk(session) if not found
		found = qemuchk(session) if not found
		print_status("It appears to be a physical host.") if not found
	end
end
Всё труднее найти то, что ещё не придумано.

Последний раз редактировалось C3 ~ RET; 14.02.2012 в 20:28..
C3 ~ RET вне форума   Ответить с цитированием
Старый 14.02.2012, 21:24   #5
destiny
 
Аватар для destiny
 
Регистрация: 11.08.2010
Сообщений: 243
Репутация: 80
По умолчанию

названия дисков (которые серийные номера) под виртуалками характерные, например. если хайдов нету (читай: если за виртуалкой сидит не реверсер, исследующий софт, который не хочет запускаться под виртуалкой), то есть вообще стандартные способы узнать. Например, под вмварькой можно что-то из какого-то порта прочитать.
__________________
тьеу-тьеу-тьеу-ти-ть-ть-тьеу
destiny вне форума   Ответить с цитированием
Старый 14.02.2012, 21:27   #6
16bit
 
Регистрация: 16.06.2011
Сообщений: 66
Репутация: 9
По умолчанию

варю я детектил так

dmesg |grep -i vmware
[ 3.324108] hda: VMware Virtual IDE CDROM Drive, ATAPI CD/DVD-ROM drive
[ 3.985253] scsi 0:0:0:0: Direct-Access VMware, VMware Virtual S 1.0 PQ: 0 ANSI: 2
16bit вне форума   Ответить с цитированием
Старый 14.02.2012, 23:00   #7
yesday
 
Регистрация: 28.11.2011
Сообщений: 36
Репутация: 12
По умолчанию

MAC-адреса ещё характерные у Xen, KVM, OpenVZ.

Кроме того, названия дисков:
/dev/simfs -- OpenVZ, Virtuozzo
/dev/xvda* -- Xen

OpenVZ со 100% вероятностью можно сдетектить по наличию файла /proc/user_beancounters
yesday вне форума   Ответить с цитированием
Старый 14.02.2012, 23:20   #8
yesday
 
Регистрация: 28.11.2011
Сообщений: 36
Репутация: 12
По умолчанию

MAC-адреса ещё характерные у Xen, KVM, OpenVZ.

Кроме того, названия дисков:
/dev/simfs -- OpenVZ, Virtuozzo
/dev/xvda* -- Xen

OpenVZ со 100% вероятностью можно сдетектить по наличию файла /proc/user_beancounters
yesday вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход



Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot