Побег из-под vm ware

         

который должен быть заранее установлен


       ; подготавливаем аргументы и магические пирожки

       mov ecx, 0Ah         ; номер команды — определение версии

       mov eax, 564d5868h   ; 'VMXh' - магический номер типа "пирожок"

       mov edx, 00005658h   ; '..VX' - магический порт back-door интерфейса

      

       ; дергаем за "веревочку"

       in eax, dx           ; вызываем команду по back-door интерфейсу

                           ; возвращенные параметры помещаются в EAX/EBX/ECX

      

       ; внимание!

       ; в среде чистой Windows

без vm-ware при обращении к порту ввода-вывода

       ; произойдет исключение и управление будет передано SEH-обработчику,

       ; который должен быть заранее установлен (иначе выполнение программы

       ; будет завершено системой)

       ; если же мы еще здесь, следовательно, исключения не произошло

       ; и, либо какой-то хитрый драйвер открыл порты ввода-вывода,

       ; либо мы находимся под управлением непатченной vm-ware

       ; или чего-то очень на нее похожего

       cmp ebx, 'VMXh'      ; анализируем возвращенный магический пирожок

       je under_VMware      ; если пирожок возвращен, мы под vm-ware

      

       xor eax,eax          ; возвращаем ноль в знак того, что мы не под vm-ware!

       ret                  ; выходим из функции

      

under_VMware:

       ret                  ; мы под непатченной vm-ware, в eax номер версии

       }

}

main()

{

       // вызываем функцию get_vm

из блока __try,

       // чтобы отлавливать возникающие исключения

       // для простоты и наглядности, версия vm-ware, возвращенная get_vm,

       // не выводится на экран и сообщается лишь о том, был ли обнаружен

       // непатченный эмулятор или нет (если исключения не произошло,

       // vm-ware считается обнаруженной)

       __try { printf("%s %s\n",VM, (get_vm())?VM_DETECTED:VM_NOT_RECOGNZD);}

      

       // обработчик исключения, получающий управление при выполнении программы

       // в среде чистой Windows, под патченной vm-ware или на другом эмуляторе

       __except(1) {printf("%s %s\n",VM, VM_NOT_DETECTED);}

}

Листинг 1 программа, демонстрирующая взаимодействия с виртуальной машиной через back-door интерфейс и определяющая версию VM Ware (на экран она не выводится)


Содержание  Назад  Вперед







Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий