Привкус виртуальности

Эмуляция (англ. emulation) — воспроизведение программными или аппаратными средствами работы других программ или устройств.

Неполная эмуляция. Linux & Windows

Многим пользователям так или иначе становится известно о такой операционной системе, как Linux; рано или поздно приходит время, и некоторые из них, по вполне понятным соображениям, стараются пересесть на нее. После установки, естественно, не сразу привыкаешь к Linux, но главная проблема состоит в том, что Windows-приложения не запускаются под Linux, и наоборот. На то есть несколько причин. Исполняемые файлы (exe) в Windows представлены PE-форматом, имеющим свою структуру, отличную от структуры исполняемых файлов в Linux, здесь они представлены ELF-форматом (англ. Executable and Linkable Format — формат исполняемых и компонуемых файлов), для каждого из этих форматов нужен свой, особый загрузчик. Допустим, не проблема, разобравшись в форматах, написать свой загрузчик для каждой из систем. Но и здесь на нашем пути встает препятствие - разность в реализации api-функций.

Интерфейс прикладного программирования (англ. Application Programming Interface, API [эй-пи-ай], по-русски чаще произносят [апи?]) — набор готовых констант, структур и функций, используемых при программировании пользовательских приложений и обеспечивающих правильное взаимодействие между пользовательским приложением и операционной системой.

Естественно, эти самые api-функции в разных ОС будут различаться. Представьте: вы написали загрузчик и пытаетесь запустить программу для Windows под Linux, программа запускается, начинает выполняться. Доходит до места, где вызывается какая-нибудь api-функция, а этой функции, естественно, нет под Linux. Программа не может дальше выполняться; но вот в чем фишка, хоть ОС и разные, но встречаются api-функции, аналогичные друг другу, только вот названия разные. Как раз для таких случаев и создаются эмуляторы, например, программа вызывает какую-нибудь api-функцию, эмулятор берет аналогичную; если аналогичной функции не существует, то эмулятор сымитирует ее работу, это можно назвать неполной эмуляцией, так как эмулируются только api-функции, вот пример:

Своя ОС: вызов api =>>> Успех

Чужая ОС: вызов api =>>> Ошибка

Режим работы с эмулятором: вызов api =>>> симуляция >>> Успех

При таком подходе потеря в производительности программ незначительная, но существуют недокументированные api-функции, о которых может не знать разработчик эмулятора. Если такая функция (хоть одна) будет присутствовать в программе, запускаемой из-под эмулятора, то программа не будет функционировать, или будет, но неправильно, поэтому только 60-70% софта можно запустить на другой ОС.

Полная эмуляция. Виртуальные машины

Существуют программные продукты, позволяющие эмулировать не определенные api-функции одной системы в другой, а сразу целый компьютер. И правда, зачем заморачиваться, если можно эмулировать сразу весь компьютер, а потом установить на него нужную ОС. Это уже называется иначе — виртуализация, а машины, созданные с ее помощью, называются виртуальными машинами. Виртуальная машина — это вычислительная машина, которая эмулируется на реальном компьютере, причем она настолько же дееспособна, как и реальная система, только является не аппаратной, а программной реализацией. Представьте себе какую-нибудь игру — ведь это, можно сказать, виртуализация реальности. Здесь то же самое, только не игровой мир представлен в виде виртуальной реальности, а лишь отдельный компьютер, и он настолько хорошо проработан, что можно установить на него почти любую из существующих ОС, программы к ней, и работать так же полноценно, как и на обычном «реальном» компьютере. Таким образом, на одном мощном компьютере можно создать несколько послабее и даже объединить их в локальную сеть. Часто виртуальные машины используются для изучения вирусов, ведь вреда реальной системе они нанести не смогут, максимум угробят виртуальную, но восстановить ее - плевое дело.

Ubuntu под VirtualBox

VMware Workstation — программа, позволяющая создавать и запускать одновременно несколько виртуальных машин (x86-архитектуры), в каждой из которых работает своя гостевая операционная система. Например, позволяет пользователям компьютеров Macintosh или на базе платформ Intel/AMD запускать приложения, разработанные для других операционных систем, в том числе Windows и Linux. Поддерживаются как 32-битные, так и 64-битные версии ОС.

VirtualBox — программный продукт виртуализации для операционных систем Microsoft Windows, DOS, GNU/Linux, FreeBSD, Mac OS X и SUN Solaris/OpenSolaris.

Пример эмуляции. Wine & VirtualBox

Wine - это реализация api win32 над Unix и его графическим сервером XFree86/xorg. Поэтому программу под MS Windows с помощью Wine можно запустить только на x86-машине, так как все инструкции, кроме вызова API, выполняются процессором. Это позволяет достичь высокой производительности (многие программы работают из-под WINE с такой же скоростью, как и в "настоящей" Windows).

Пришло время попрактиковаться, попробуем установить Wine и посмотреть на все это чудо. Wine - не совсем эмулятор, но я все же осмелюсь его так называть.

Для начала нам нужна сама программа ( сайт ). Есть разные ее версии, и даже для Windows она используется для запуска устаревших приложений. Но сегодня мы задумали запускать Windows-приложения под Linux. Итак, скачали, распаковали.

Windows-приложения под Linux

Теперь установим программу. Для этого запускаем консоль, я точно не знаю, нужен ли для установки root, но на всякий случай войдем в сеанс root.
su — root

Вас попросят пароль root'а, вводите и приступим. Переходим в папку с программой, у меня это /home/Kerny/wine-1.1.26.

cd /home/Kerny/wine-1.1.26

Устанавливаем:

./tools/wineinstall

./configure

make depend

make

Устанавливаем Wine

После проверяем, установилось или нет; пробуем запустить одну из стандартных программ:

./wine notepad (блокнот)

./wine regedit (реестр)

./wine cmd (командная строка)

А обычные exe (pe-файлы) запускать так. Допустим, у меня по адресу /home/Kerny/ есть файл под названием redbook.exe, который нужно запустить:
./wine /home/Kerny/redbook.exe

Вот и все, никаких проблем, а лучше настроить, чтобы exe-файлы ассоциировались с приложением Wine. Для этого (в разных дистрибутивах по-разному, но смысл везде один):

правая кнопка мыши на приложении =>>> открыть с помощью =>>> выбираем Wine.

Теперь поставим VirtualBox ( сайт тут можно скачать версии под разные дистрибутивы, здесь мы качаем в rpm-пакете, поэтому устанавливать проще, чем Wine.

rpm -i [название пакета]

Допустим, пакет называется VirtualBox_fedora11.rpm, тогда наша команда примет вид:

rpm -i VirtualBox_fedora11.rpm

Теперь смотрим в каталоге, куда ставятся все программы по умолчанию (у меня /usr/share).

Безопасность

Всем известно, что под Windows написана небывалая куча разной малвари. А вот в Linux в этом плане относительная тишина, но после установки Wine и других эмуляторов на Linux многие вирусы смогут работать через эмулятор, некоторые, конечно, будут иметь сбои (например, реестра в Linux нет, и они не смогут прописаться в автозапуск и прочее). Так что перед установкой эмулятора следует подумать, и если вы все же его поставили, то лучше проверять все файлы, хоть как-то относящиеся к ОС Windows. Что касается виртуальных машин, тут ситуация более либеральная, при запуске на них вредоносного программного обеспечения будет повреждена только виртуальная система, хотя теоретически возможно написать вирус, который будет способен «понять», что запущен на виртуальной машине, и попробует прорваться в реальную ОС.

Kerny SASecurity gr. q@sa-sec.org


Компьютерная газета. Статья была опубликована в номере 01 за 2010 год в рубрике soft

©1997-2022 Компьютерная газета