Для управления виртуальной машиной многие эмуляторы используют специальный (и, по обыкновению, недокументированный) back door механизм вроде того, что есть в soft-ice (см. INT 03h в Interrupt List'е Ральфа Брауна). Virtual PC использует для той же цели инвалидные инструкции процессора (например, 0Fh3Fh 07h 0Bh), а VM Ware "магический" порт ввода/вывода.
Рисунок 15 back-door интерфейс – мощное оружие, бьющие точно в цель
Остановимся на VM Ware как на самом популярном эмуляторе. Чтобы передать back door команду на выполнение, необходимо выполнить следующие действия:
q в регистр EAX занести магическое число 564D5868h ('VMXh' в ASCII-представлении);
q в регистр DX занести магическое число 5658h (номер порта, 'VX' в ASCII);
q в регистр CX занести номер команды, а в регистр EBX ее параметры;
q выполнить команду IN EAX, DX (or OUT DX, EAX);
q если программа исполняется не под VM Ware (или VM Ware был предварительно пропатчен) на прикладном уровне защищенного режима возникнет исключение типа "нарушение доступа";
q при выполнении под VM Ware регистр EBX будет содержать магическое число 564D5868h ('VMXh' в ASCII-представлении), а в остальных регистрах — возвращенные данные (если они есть);
VM Ware поддерживает большое количество самых различных команд, подробно исследованных Ken'ом Kato и описанных в его статье "VMware's back" (http://chitchat.at.infoseek.co.jp/vmware/backdoor.html). Здесь можно найти и установку даты/времени, и работу с буфером обмена и даже механизм удаленного вызова процедур (RPC), но… потенциально опасных команд среди них нет. Вирус не может просто взять и вырываться из виртуальной машины! Или… все-таки сможет? Свыше двух десятков команд еще остаются неисследованными и неясно зачем они и почему.