Автор: (c)Крис Касперски ака мыщъх
Эмулятор компьютера - великая вещь! Кем бы вы ни были - продвинутым пользователем, администратором, программистом или даже воинствующим хакером, эмулятор вас выручит и поможет, весь вопрос в том - когда и как? Вот об этом мы и собираемся рассказать!
Эмуляторы прочно вошли в нашу жизнь и не собираются из нее никуда уходить. Напротив, численность их поголовья множится с каждым днем. Мы не будем рекламировать каких-то конкретных представителей этого вида - эмулятор своей мечты каждый может найти и самостоятельно (заходим в Google, говорим ему "обзор эмуляторов" или что-то в этом роде, щелкаем "мне повезет", после чего запускаем Осла и сливаем понравившийся эмулятор на халяву). Лучше мы расскажем, что с этим самым эмулятором можно сделать, то есть - как правильно его употребить?
Вообрази себе картину - ты читаешь в компьютерном журнале про замечательную игрушку, загораешься ею всеми фибрами души и вдруг обнаруживаешь, что на твоей оси она не идет. Прямо как обухом по голове! Хуже всего приходится пользователем FreeBSD - игр под нее не найдешь днем с огнем. Для Windows места не жалко, но перезагружаться каждый раз, чтобы запустить игру - нет уж, увольте! А если это игра под Mac или Sony Playstation? Современные аппаратные мощности позволяют забыть о родном "железе" и эмулировать весь компьютер целиком, открывая безграничный мир программного обеспечения. Теперь вы уже не привязаны к какой-то конкретной платформе и можете запускать любые программы, независимо для какого компьютера они были написаны - ZX SPECTRUM или X-Box. Главное - найти хороший эмулятор!
Основная операционная система становится как бы фундаментом для целого зоопарка гостей. Одну из клеток этого зверинца можно (и нужно!) выделить под своеобразный карантин-отстойник. Известно, что при установке новой программы, вы всегда рискуете уронить операционную систему - кривой инсталлятор, конфликт библиотек, Adware или просто карма у нее такая. Программы, полученные из ненадежных источников, лучше держать подальше ото всех остальных. Просто выделите им отдельную виртуальную машину в эмуляторе и хрен они вырвутся оттуда!
Рисунок 1. Неважно, какая у тебя ось! Важно - какой у тебя эмулятор!
Для администраторов эмулятор - это в первую очередь полигон для всевозможных экспериментов. Поставьте себе десяток различных UNIX'ов и издевайтесь над ними по полной программе. Устанавливайте систему, сносите ее и снова устанавливайте, слегка подкрутив конфигурацию. На работу ведь принимают не по диплому, а по специальности, а специальность приобретается только в боях. То же самое относится и к восстановлению данных. Без специальной подготовки Disk Editor на своей рабочей машине лучше всего не запускать, а Disk Doctor - тем более. Нет никакой гарантии, что он действительно вылечит диск, а не превратит его в винегрет. Короче говоря, эмулятор - это великолепный тестовый стенд, о котором раньше не приходилось даже мечтать.
В больших организациях администратор всегда держит на резервном компьютере точную копию сервера и все заплатки сначала обкатывает на нем. В конторах поменьше отдельной машины под это дело никто не даст и приходится прибегать к эмулятору. На нем же тестируются различные эксплоиты и, если факт уязвимости подтверждается, принимаются оперативные меры по ее устранению.
Общение виртуальной машины с основной операционной системой и другими виртуальными машинами обычно осуществляется через локальную сеть. Виртуальную, разумеется. При наличии 512 - 1024 Мбайт памяти можно создать настоящий корпоративный интранет - с SQL и WEB-серверами, DMZ-зоной, брандмауэром и несколькими рабочими станциями, свободно умещающимися внутри домашнего компьютера. Лучшего полигона для обучение сетевым премудростям и не придумаешь. Хочешь - атакуй, хочешь - администрируй.
Рисунок 2. Виртуальная сеть Андрея Бешкова.
Больше всего эмуляторы любят разработчики драйверов. Ядро не прощает ошибок и мстительно разрушает жесткий диск, уничтожая все данные, накопленные за многие годы. Перезагрузки и зависания - вообще обычное дело, к которому привыкаешь как к стуку колес или шороху шин. К тому же, большинство отладчиков ядерного уровня требует наличия двух компьютеров, соединенных COM-шнурком или локальной сетью. Для профессионального разработчика это не роскошь, но... куда их ставить? Окружишь себя мониторами, а потом, как дурак, крутишь во все стороны головой - отвались моя шея!
С эмулятором все намного проще. Ни тебе потери данных, ни перезагрузок, а всю работу по отладке можно выполнять на одном компьютере. Естественно, что совсем уж без перезагрузок дело не обходится, но пока перезагружается виртуальная машина, можно делать что-то полезное на основной (например, править исходный код драйвера). К тому же, мы можем заставить эмулятор писать команды в лог и потом посмотреть, что привело драйвер к смерти (правда, не все эмуляторы это умеют).
В GENETIC-ядре FreeBSD отладчика нет, а отладочное ядро вносит в систему побочные эффекты. В нем драйвер может работать нормально, но брехать GENETIC'e. Windows-отладчики ведут себя схожим образом и окончательное тестирование драйвера должно проходить в "безлошадной" конфигурации, начисто лишая разработчика всех средств отладки и мониторинга.
Рисунок 3. Разработка драйверов в доэмуляторную эпоху.
Рисунок 4. Еще один разработчик драйверов.
А что прикладные программисты? Эмуляторы позволяют держать им под рукой всю линейку операционных систем, подстраивая свои программы под особенности поведения каждой из них. У Windows всего две системы - NT плюс 9x, и то у них голова кругом идет, а UNIX намного более разнообразен!
Коварство багов в том, что они склонны появляться только в строго определенных конфигурациях. Установка дополнительного программного обеспечения, а уж тем более перекомпиляция ядра может их спугнуть и тогда - ищи-свищи. А это значит, что до тех пор, пока баг не будет найден, ничего нельзя менять в системе. На основной машине это требование выполнить затруднительно, но легко на эмуляторе! Виртуальная машина, отключенная от сети (в том числе и виртуальной) в заплатах не нуждается. Но как же тогда обмениваться данными? К вашим услугам - дискета и CD-R.
Самое главное - эмуляторы позволяют создавать "слепки" состояние системы и возвращаться к ним в любое время неограниченное количество раз. Это значительно упрощает задачу воспроизведения сбоя (т.е. определения обстоятельств его возникновения). Чем такой слепок отличается от дампа памяти, сбрасываемого системой при сбое? Как и следует из его названия, дамп включает в себя только память, а "слепок" все компоненты системы целиком - диск, память, регистры контроллеров и т.д.
Разработчики сетевых приложений от эмуляторов вообще в полном восторге. Раньше ведь как - ставишь второй компьютер, сажаешь за него жену и долго и нудно объясняешь какие клавиши ей нажимать. Теперь же отладка сетевых приложений упростилась до предела.
Рисунок 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 эмулируется с приемлемой скоростью, а это значит, что время поголовной установки эмуляторов уже пришло. Стоит только попробовать и вы уже ни за что не откажетесь от десятка своих любимых виртуальный машин, позабыв про основную платформу.