Виртуальная машина

Материал из Russian Underground
Перейти к: навигация, поиск

Программный способ эмуляции аппаратуры. Виртуальная машина (сокр. ВМ) выполняет свой машинный код (это может быть байт-код, p-code). Обычно, виртуальная машина бывает полезна для эмуляции нескольких компьютеров на базе одного физического. Ярким примером может служить продукт VMWare Workstation. Такая эмуляция может помогать во многих видах деятельности, например вирусолог может изучать вирусы, работая в Windows, установленной на виртуальной машине, даже если вирус случайно выйдет из под контроля и совершит деструктивные действия, состояние ВМ можно легко "откатить" назад (на прошлую точку бэкапа) буквально за несколько секунд, самое важное, что основная операционная система, установленная на физическом компьютере никак не пострадает, так как виртуальная машина создаёт полностью изолированную среду. Вторым примером использования виртуальной машины может служить установка большого количества разных операционных систем, не рискуя при этом также работоспособностью собственно физически установленной на компьютер операционной системы. Такая установка большого числа операционных систем может быть полезна широкому кругу программистов, разрабатывающих кросс-платформенные приложения.

Крэкеру VMWare Workstation также может быть полезна, во-первых, чтобы использовать устаревший отладчик SoftIce, установив его на ВМ с установленной Windows XP SP2, во-вторых, некоторые программы, анализируемые крэкером могут также совершить некоторых деструктивные действия в процессе их отладки, поэтому полезно иметь возможность "отката".

Виртуальные машины в протекторах

Так как, каждая ВМ имеет свой собственный машинный код, отличный от классического машинного кода процессоров класса x86, Pentium, этим он представляет информационную сложность для исследователя. То есть, авторы протекторов специально создают ВМ, создают свой собственный набор команд для ВМ, которые не сопоставить напрямую общеизвестным ассемблерным командам, затем, в процессе обработки защищаемого EXE файла протектором, происходит перекодирование частей машинного кода исполняемого файла из классического машинного кода в машинный код данной ВМ. В итоге, код перестает быть дизассемблируемым и для того, чтобы разобрать защиту программы требуется полный разбор функционирования всей виртуальной машины, реализованной в данном протекторе. Особая сложность состоит в том, что сама виртуальная машина протектора содержит множество хитростей, например антиотладочные приемы, к тому же, код требующий изучения довольно объёмен и пишется разработчиками, которые зарабатывают этим изо дня в день, таким образом получается ситуация, что на крэкера ложится большой объём трудной неоплачиваемой работы, большие объёмы автоматически сгенерированных структур кода, требующих либо глубокого ручного разбора алгоритма всей защиты, либо ручного разбора текущего машинного кода, сгенерированного данной ВМ. То есть, проще говоря на крэкера ложится рутина и, учитывая, что крэкерство чаще всего это хобби, происходит ситуация, когда защита остается неповерженой в большинстве случаев.

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

Минусы виртуальных машин

  • Снижение быстродействия алгоритмов программы
  • Повышение нагрузки на процессор
  • Код виртуальной машины все равно исполняется на процессоре, таким образом преобразование исходного машинного кода в код виртуальной машины не означает необходимость изучения внутренней структуры ВМ - в отладчике все будет выглядеть как код, который был подвержен обычному обфускатору
  • Из предыдущего пункта следует еще один минус. Поскольку каждая ВМ должна виртуализовывать машинные команды, предназначенные для работы с памятью, логическими и арифметическими действиями, то всего несколько точек останова на обработчиках нужной группы виртуальных инструкций позволяют контролировать ВСЕ действия программы без необходимости ее трассировать.
  • Практика показывает, что для создания виртуальной машины требуется в два риз

Протекторы, реализующие собственную ВМ

Личные инструменты
Пространства имён

Варианты
Действия
Навигация
Сцена
Материалы
Разное
Donate
Инструменты