UNIX.emu

профессии эмуляторов

крис касперски ака мыщъх, no email

если под рукой нет линейки, используй подручные средства в качестве измерительных приборов: дискета – 9 х 9 см; видеокассета – 18,5 х 10 см; твой пенис – сам знаешь.

из лекций по метрологии

эмулятор компьютера – великая вещь! кем бы вы ни были – продвинутым пользователем, администратором, программистом или даже воинствующим хакером, эмулятор вас выручит и поможет, весь вопрос в том когда и как. вот об этом мы и собираемся рассказать!

Эмуляторы прочно вошли в нашу жизнь и не собираются из нее никуда уходить. Напротив, численность их поголовья множится с каждым днем. Мы не будем рекламировать каких-то конкретных представителей этого вида, – эмулятор своей мечты каждый может найти и самостоятельно (заходим в Google, говорим ему «обзор эмуляторов» или что-то в этом роде, щелкаем «мне повезет», после чего запускаем Осла и сливаем понравившийся эмулятор на халяву). Лучше мы расскажем, что с этим самым эмулятором можно сделать, то есть как правильно его употребить. Поручики! Ни слова о том, чтобы куда-то засунуть!

Вообрази себе картину – ты читаешь в компьютерном журнале про замечательную игрушку, загораешься ею всеми фибрами души и вдруг обнаруживаешь, что на твоей оси она не идет. Прямо как обухом по голове! Хуже всего приходится пользователем Free BSD – игр под нее найдешь днем с огнем. Для Windows места не жалко, но перезагружаться каждый раз, чтобы запустить игру – нет уж, увольте! А если это игра под Mac или Sony Playstation? Современные аппаратные мощности позволяют забыть о родном «железе» и эмулировать весь компьютер целиком, открывая безграничный мир программного обеспечения. Теперь вы уже не привязаны к какой-то конкретной платформе и можете запускать любые программы, независимо для какого компьютера они были написаны – ZX SPECTRUM или X-Box. Главное – найти хороший эмулятор!

Основная операционная система становится как бы фундаментом для целого зоопарка гостей. Одну из клеток этого зверинца можно (и нужно!) выделить под своеобразный карантин-отстойник. Известно, что при установке новой программы, вы всегда рискуете уронить операционную систему – кривой инсталлятор, конфликт библиотек, Add-Ware или просто карма у нее такая. Программы, полученные из ненадежных источников, лучше держать подальше ото всех остальных. Просто выделите им отдельную виртуальную машину в эмуляторе и хрен они вырвутся оттуда!

Рисунок 1 не важно какая у тебя ось! важно – какой у тебя эмулятор!

Для администраторов эмулятор это в первую очередь полигон для всевозможных экспериментов. Поставьте себе десяток различных UNIX'ов и издевайтесь над ними по полной программе. Устанавливайте систему, сносите ее и снова устанавливайте, слегка подкрутив конфигурацию. На работу ведь принимают не по диплому, а по специальности, а специальность приобретается только в боях. Тоже самое относится и к восстановлению данных. Без специальной подготовки Disk Editor на своей рабочей машине лучше всего не запускать, а Disk Doctor – тем более. Нет никакой гарантии, что он действительно вылечит диск, а не превратит его в винегрет. Короче говоря, эмулятор – это великолепный тестовый стенд, о котором раньше не приходилось даже мечтать.

В больших организациях администратор всегда держит на резервном компьютере точную копию сервера и все заплатки сначала обкатывает на нем. В конторах поменьше отдельной машины под это дело никто не даст и приходится прибегать к эмулятору. На нем же тестируются различные эксплоиты и если факт уязвимости подтверждается, принимаются оперативные меры по ее устранению.

Общение виртуальной машины с основной операционной системой и другими виртуальными машинами обычно осуществляется через локальную сеть. Виртуальную, разумеется. При наличии 512 – 1024 Мбайт памяти можно создать настоящий корпоративный интранет – с SQL и WEB-серверами, DMZ-зоной, брандмауэром и несколькими рабочими станциями, свободно умещающимися внутри домашнего компьютера. Лучшего полигона для обучение сетевым премудростям и не придумаешь. Хочешь – атакуй, хочешь – администрируй.

Рисунок 2 виртуальная сеть Андрея Бешкова

Больше всего эмуляторы любят разработчики драйверов. Ядро не прощает ошибок и мстительно разрушает жесткий диск, уничтожая все данные накопленные за многие годы. Перезагрузки и зависания – вообще обычное дело, к которому привыкаешь как к стуку колес или шороху шин. К тому же, большинство отладчиков ядерного уровня требует наличия двух компьютеров, соединенных COM-шнурком или локальной сетью. Для профессионального разработчика это не роскошь, но… куда их ставить? Окружишь себя мониторами, а потом как дурак крутишь во все стороны головой – отвались моя шея!

С эмулятором все намного проще. Ни тебе потери данных, ни перезагрузок, а всю работу по отладке можно выполнять на одном компьютере. Естественно, что совсем уж без перезагрузок дело не обходится, но пока перезагружается виртуальная машина, можно делать что-то полезное на основной (например, править исходный код драйвера). К тому же мы можем заставить эмулятор писать команды в лог и потом подсмотреть, что привело драйвер к смерти (правда, не все эмуляторы это умеют).

В GENETIC-ядре FreeBSD отладчика нет, а отладочное ядро вносит в систему побочные эффекты. В нем драйвер может работать нормально, но брехать GENETIC'e. Windows-отладчики ведут себя схожим образом и окончательное тестирование драйвера должно проходить в «безлошадной» конфигурации, начисто лишая разработчика всех средств отладки и мониторинга.

Рисунок 3 разработка драйверов в доэмуляторную эпоху

unix.emu_image_3.jpg

Рисунок 4 еще один разработчик драйверов

А что прикладные программисты? Эмуляторы позволяют держать им под рукой всю линейку операционных систем, подстраивая свои программу под особенности поведения каждой из них. У Windows всего две системы – NT плюс 9x, и то у них голова кругом идет, а UNIX намного более разнообразен!

Коварство багов в том, что они склонны появляться только в строго определенных конфигурациях. Установка дополнительного программного обеспечения, а уж тем более перекомпиляция ядра может их спугнуть и тогда – ищи-свищи. А это значит, что до тех пор пока баг не будет найден, ничего нельзя менять в системе. На основной машине это требование выполнить затруднительно, но легко на эмуляторе! Виртуальная машина, отключенная от сети (в том числе и виртуальной) в заплатах не нуждается. Но как же тогда обмениваться данными? К вашим услугам – дискета и CD-R.

Самое главное – эмуляторы позволяют создавать «слепки» состояние системы и возвращаться к ним в любое время неограниченное количество раз. Это значительно упрощает задачу воспроизведения сбоя (т. е. определения обстоятельств его возникновения). Чем такой слепок отличается от дампа памяти, сбрасываемого системой при сбое? Как и следует из его названия дамп включает в себя только память, а «слепок» все компоненты системы целиком – диск, память, регистры контроллеров и т. д.

Разработчики сетевых приложений от эмуляторов вообще в полном восторге. Раньше ведь как, ставишь второй компьютер, сажаешь за него жену и долго и нудно объясняешь какие клавиши ей нажимать. Теперь же отладка сетевых приложений упростилась до предела.

unix.emu_image_4.jpg

Рисунок 5 отладка прикладной программы под эмулятором

Эмулирующие отладчики появились еще во время MS-DOS и сразу же завоевали бешенную популярность. Неудивительно! Рядовые защитные механизмы применяют две основных методики для борьбы с отладчиками – пассивное обнаружение отладчика и активный захват отладочных ресурсов, делающий отладку невозможной. На эмулирующий отладчик эти действия никак не распространяются – он находится ниже виртуального процессора (а, потому, для отлаживаемого приложения совершенно невидим), и не использует никаких ресурсов эмулируемого процессора.

Слепки системы очень помогают во взломе программ с ограниченным сроком использования. Ставим программу, делаем слепок, переводим дату, делаем еще один слепок. Смотрим – что изменилось. Делаем выводы и отламываем от программы лишние запчасти. В ламерской редакции эта методика выглядит так: устанавливаем защищенную программу на отдельную виртуальную машину. Делаем «слепок». Все! Защите хана! Сколько бы мы не запускали «слепок», она будет наивно полагать, что запускается в первый раз. Не сможет она привязываться и к оборудованию – оборудование эмулятора не зависит от аппаратного окружения, предоставляя нам неограниченную свободу выбора последнего.

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

Рисунок 6 отладочная версия Windows 2000 в китайском исполнении

Рисунок 7 ща мы ее хакнем!

При попытке использования soft-ice под Windows 2000, запущенной из-под VMWare начинаются сплошные лапти – soft-ice работает только из text-mode режима, развернутого на весь экран (заходим в FAR, жмем <ALT>-<ENTER>, затем <CTRL>-<D>), а во всех остальных режимах наглухо завешивает систему. Еханный бабай! Кстати, под Windows 98 он чувствует себя вполне нормально, но переход на Windows 98 – не вариант.

Это известный глюк айса, признанный NuMega и устраненный лишь в Driver Studio версии 3.1 (в официальной формулировке это именуется «поддержкой VMWARE). Подробности можно найти в документации (см. \Compuware\DriverStudio\Books\Using SoftICE.pdf, приложение E – «SoftIce and VMware»). При этом в конфигурационный файл виртуальной машины (имя_виртуальной_машины.vmx) необходимо добавить строку svga.maxFullscreenRefreshTick = «2» и vmmouse.present = «FALSE». Мышь работать не будет, да она в soft-ice не сильно кому и нужна.

Помимо эмуляторов PC, существует огромное количество эмуляторов самых разнообразных устройств, например, сотовых телефонов, карманных компьютеров, контроллеров лифта и т. д. Возьмем сотовый телефон. Он не содержит средств разработки, а, значит, запрограммировать его, давая на клавиши принципиально невозможно (а среду разработки там помешать просто некуда – не хватает ни быстродействия процессора, ни памяти). Вот и приходится прибегать к эмуляторам. Это даже не вопрос удобства, это вопрос выживания!

Рисунок 8 эмулятор Z80 для встраиваемых устройств

Эмуляторы преображают компьютерный мир, с каждым днем наращивая потенциал своих возможностей. На мощнейших Pentium'ах даже DOOM III эмулируется с приемлемой скоростью, а это значит, что время поголовной установки эмуляторов уже пришло. Стоит только попробовать и вы уже ни за что не откажетесь от десятка своих любимых виртуальный машин, позабыв про основную платформу.