Виртуальные машины

Тема в разделе "WASM.WIN32", создана пользователем Drakon, 17 янв 2006.

  1. Drakon

    Drakon New Member

    Публикаций:
    0
    Регистрация:
    24 сен 2004
    Сообщения:
    85
    Адрес:
    Russia
    Вот много читал про то, что их используют например StarForce, ACProtect, VMProtect... Но вот не нашёл в инете ни одной статьи насчёт того, что представляет из себя виртуальная машина и не нашёл исходников никаких на эту тему. :dntknw: Может кто подскажет?
     
  2. Drakon

    Drakon New Member

    Публикаций:
    0
    Регистрация:
    24 сен 2004
    Сообщения:
    85
    Адрес:
    Russia
    И ещё неплохо было бы найти описание того, какие методы защиты использует Starfoce.
     
  3. baduin

    baduin New Member

    Публикаций:
    0
    Регистрация:
    17 янв 2006
    Сообщения:
    6
    Да, вот это интересно...

    Интересно как ВМПротект работает и как это можно реализовать на Делфи или Си. Кто знает как записать в екзешник свою процедуру, реализовав это на вышеназванных языках?
     
  4. Grig de Griz

    Grig de Griz New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2005
    Сообщения:
    15
    Причем тут "виртуальные машины"? Это "протекторы" - "защитники", если угодно.

    Виртуальные машины (Virtual Machines) - это "VMware Workstation", "Microsoft Virtual PC" и т.д. Служат для полной (якобы) эмуляции персоналки, например, под WinXP (в виртуальной машине) можно поставить DOS, Unix или что-то еще и они будут нормально функционировать одновременно (как в окне, так и на полном экране). Очень удобно при отладке программы под разными платформами, или при изучении возможностей ОС.



    Про что именно вы спрашиваете?
     
  5. Drakon

    Drakon New Member

    Публикаций:
    0
    Регистрация:
    24 сен 2004
    Сообщения:
    85
    Адрес:
    Russia
    Мне интересно, свзяно-ли понятие виртуальная машина с каким-нибудь интерфейсом windows.

    Вот например ВМпротект просто переводит скормленный ему код в последовательность байтов а потом просто выполняется программа, которая в зависимости от того, что там за последовательность байтов получилась, выполняет различные команды? Так? И с виндой это получается никак не связано? Обычная програма получается?
     
  6. baduin

    baduin New Member

    Публикаций:
    0
    Регистрация:
    17 янв 2006
    Сообщения:
    6
    2 Grig de Griz:

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

    2 Drakon:

    ты прав, насколько я знаю работу этой программы. это обычная программа - а как же еще!? Просто изначально код шифруется(переводится в так называемый p-code), а затем, при вызове этого участка кода, интерпретатор ВМПротекта переводит шифрокод в код понятный процу. Вот этот алгоритм шифровки/дешифровки и есть так называемая виртуальная машина - код работает не напрямую с процом, а через интерпретатор.

    2 All:

    кто знает как это реализовать на Delphi или C? подскажите плз...
     
  7. Drakon

    Drakon New Member

    Публикаций:
    0
    Регистрация:
    24 сен 2004
    Сообщения:
    85
    Адрес:
    Russia
    baduin, короче можно сказать, что это распаковка по одной инструкции. Без записи её куда-либо.

    P-code... Хм... Где ты такое слово нашёл? Ведь наверняка в инете есть статьи и исходники на эту тему +)
     
  8. Drakon

    Drakon New Member

    Публикаций:
    0
    Регистрация:
    24 сен 2004
    Сообщения:
    85
    Адрес:
    Russia
    Вообще, я тут недавно нарыл исходники Real Permutation Engine by Z0mbie. Вот там вроде код переводится в какую-то сощность с полным изменение (обработка всех переходов и джампов). Я думаю, надо начать оттуда.
     
  9. dermatolog

    dermatolog Member

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    406
    Адрес:
    Екатеринбург


    Упаковка/распаковка тут даже рядом не валялась ...
     
  10. Grig de Griz

    Grig de Griz New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2005
    Сообщения:
    15
    Drakon:

    К интерфейсом windows виртуальные машины отношения не имеют 8).

    P-code - это из бейсика, программа на бейсике переводится в P-code. baduin имел в виду принцип действия.

    Статей я не видел - рано еще наверно. А так берешь хоть IDA, хоть дебагер от Delphi и изучаешь, если так интересно и времени не жаль. ;)



    Всем:

    VMProtect не «виртуальная машина». VMProtect РАБОТАЕТ КАК виртуальная машина (но это громко сказано), путем преобразования участков кода, указанных разработчиком в собственный формат команд. В процессе выполнения этого кода не производится расшифровка, а VMProtect непосредственно работает как интерпретатор процессорных команд. Важный недостаток интерпретаторов в том, что они очень медленно работают.

    Что касается зашиты, то сейчас у них постоянны сигнатуры участков выполнения - 58 61 9В С3 (POP EAX; POPAD; POPFD; RET), что сильно упрощает взлом.

    Правда, начиная с версии 1.1, доступна опция "Шифрование регистров при переходах" – эта штука не позволяет увидеть оригинальные значения регистров при условных и безусловных переходах. Однако, как это тоже замедляет выполнение программы!



    В общем случае, изучать программу защищенную VMProtect сейчас можно по следующей схеме:

    1. Ищем в защищенном файле сигнатуру 58 61 9В С3 (POP EAX; POPAD; POPFD; RET);

    2. Вычисляем адрес, по которому это все будет отображено в памяти (зависит от места загрузки секций .vmp0 и .vmp1);

    3. Ставим точку останова на этот адрес. Каждое срабатывание этой точки останова соответствует переходу к оригинальной (незащищенной) процедуре (JMP, CALL, JNZ и т.д.).

    В общем, отлавливаем все вызовы, которые делает процедуры защищенные VMProtect.



    По большому счету, из-за скорости работы пользоваться VMProtect не стоит, т.к. в большинстве серьезных программ скорость выполнения критична. Да и баловство все эти защиты, т.к. «Что один человек сделал, другой завсегда разломать сможет!». :)
     
  11. Drakon

    Drakon New Member

    Публикаций:
    0
    Регистрация:
    24 сен 2004
    Сообщения:
    85
    Адрес:
    Russia
    Ясно... А что же такое "Виртульная машина" поподробнее?
     
  12. dermatolog

    dermatolog Member

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    406
    Адрес:
    Екатеринбург


    Это уже прикрыто в 1.2





    Разработчики DAEMON Tools почему то так не считают :))
     
  13. baduin

    baduin New Member

    Публикаций:
    0
    Регистрация:
    17 янв 2006
    Сообщения:
    6
    2 Drakon:

    Некоторый процесс, который, подаваемые ему на вход команды (понятные только ему) преобразует в команды, понятные процессору(системе), на которой работает ВМ.



    p-code - это не только для бэйсика применяется(хотя может они это понятие и ввели). native-code - это и есть машинный код, а p-code - это код для интерпретирования на ВМ.



    2 All:

    ну дык, кто знает как это реализовать на Delphi или C? подскажите плз...
     
  14. Grig de Griz

    Grig de Griz New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2005
    Сообщения:
    15
    dermatolog:

    То, что закрыли сигнатуры, это, собственно, было ожидаемо (я давно этим интересовался).

    A разработчики DAEMON Tools... Ну, это понятно. Еще бы они так считали! :)



    Drakon:

    По поводу виртуальных машин - см. на сайтах их производителей:

    VMware Workstation - http://www.vmware.com



    Virtual PC - http://www.microsoft.com/windows/virtualpc



    В двух словах я и так описал, а больше смотри в их мануалах.



    VMware Workstation - Довольно большой, сложный и многофункциональный, кроме ДОС, всех Виндов, поддерживает с десяток клонов Юникса. Однако весьма сложен в настройке, особенно пока разбираешься с нуля.

    Virtual PC - Простой как три рубля, очень подходит для геймеров интересующихся старыми досовскими играми. Но особо ничего не умеет.
     
  15. dermatolog

    dermatolog Member

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    406
    Адрес:
    Екатеринбург


    Процесс генерации p-code можно представить как процесс компиляции (не важно что было на входе - программа на языке выского уровня или машинные команды).

    Т.е. тебе нужно "всего-то" написать такой "компилятор" (ну и ессно первым делом придумать принцип работы ВМ).
     
  16. baduin

    baduin New Member

    Публикаций:
    0
    Регистрация:
    17 янв 2006
    Сообщения:
    6
    лады, сделаем совсем просто: надо просто запоролить запуск файла, как это сделать? Чисто теоретически я знаю(может быть я дУмаю, что знаю) как это работает:dntknw:к виртуальной машине это мало отношения имеет, но все же) берем старую точку входа; сохраняяем ее; указываем новую точку входа, где будет моя процедура для ввода пароля; xor'ом проверяем пароль и если все ок, переходим на начало выполнения проги.

    Как это сделать практически, какие функции использовать надо, что делать то вообще?????
     
  17. Grig de Griz

    Grig de Griz New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2005
    Сообщения:
    15
    1. Способ классический. Сделать свой загрузчик и интегрировать его с закрываемой программой (как это делает тот же ASProtect). Нужно много знать, начиная с формата PE и т.д. (то что ты предлагаешь).

    2. Самый простой способ (но не самый красивый) добавить закрываемый файл как ресурс к своей программе, которая запрашивает пароль. После проверки пароля загружать данные ресурса и что-то с ними делать. Если это exe, то запускать через CreateProcess. Это версию можно сделать за 10 минут и не мучиться.



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



    Пароль лучше хранить не по XOR, а например в MD5 (хеш функции). Хоть твой пароль раздавать не будут, придется им патч писать. :)
     
  18. baduin

    baduin New Member

    Публикаций:
    0
    Регистрация:
    17 янв 2006
    Сообщения:
    6
    во-во, про первый способ я и говорю... как его делают то? как сделать саму интеграцию?

    я так понимаю свой загрузчик надо сначала откомпилить, потом его записать в файл, перед запуском загрузить его, и далее саму прогу...

    И как же этот загрузчик вставить то в файл?



    з.ы. есесно пароль надо шифровать не ксором, это я просто для примера привел, чтобы не заморачиваться на самом пароле. А вообще, я имел ввиду ксорить старую точку входа с введеным паролем(точка входа уже отксоренная хранится в файле), т.е. если ксор пройдет успешно, то управление передастся на нужное место, иначе - прога просто выдаст ошибку.
     
  19. Grig de Griz

    Grig de Griz New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2005
    Сообщения:
    15
    Готового примера у меня нет (так что народ у кого есть, пишите, сам хотел бы посмотреть). А общая идея, в принципе-то, понятна, мы ее описали. Кроме того, что, насколько я понимаю, на конечной стадии работы, загрузчик должен отобразить загружаемый EXE в свое\новое адресное пространство. Но информация все равно может храниться по методу 2.
     
  20. dermatolog

    dermatolog Member

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    406
    Адрес:
    Екатеринбург
    2 baduin:

    Возьми ORIEN. Он умеет ставить пароли на запуск