создание виртуальной машины

Тема в разделе "WASM.RESEARCH", создана пользователем sn0w, 14 фев 2012.

  1. sn0w

    sn0w Active Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    958
    господа, посоветуйте чего курнуть по матчасти, нарыл только вот это - http://sourceforge.net/projects/nano-vm
    но писать с нуля лень =(, денисом_поповым тоже неохота становиться.
    идея в том чтобы написать протектор для х64 и арма под винды (взяв за основу хотябы 86ю версию в плане стратегии), приветствуются любые материалы
     
  2. scf

    scf Member

    Публикаций:
    0
    Регистрация:
    12 сен 2005
    Сообщения:
    386
    LLVM
     
  3. Satsura

    Satsura S4(uR4 __r00tw0rm__

    Публикаций:
    0
    Регистрация:
    22 апр 2010
    Сообщения:
    374
    Адрес:
    Узбекистон, бляать!!11 :D
    А LLVM тут причем? Товарисч просит вм протектор типа аспротект, тимида, вмпрот, етц (; у меня гдет валялсо кодес, найду подкину.
     
  4. dermatolog

    dermatolog Member

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    406
    Адрес:
    Екатеринбург
    sn0w
    Вы опоздали с реализацией своей идеи. Мы уже полным ходом пилим ARM :))
     
  5. Cr4sh

    Cr4sh New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2006
    Сообщения:
    668
    sn0w
    Разработка, собственно, виртуальной машины и обфускатора для всей этой херни -- задача настолько тривиальная, что даже непонятно, что тут обсуждать.

    Сложности вызывает разве что разработка некоего транслятора, который будет преобразовывать x86/x64 код (НЕНАВИСТЬ! *БАНЫЙ CISC!!!) в промежуточное представление, из которого, в свою очередь, можно будет генерировать код для своей виртуальной машины.
    Из готовых либ для трансляции машинного кода в IR я знаю:
    LibVEX -- Вроде бы ок, но придется сильно копаться в исходниках, по причине крайне плохой документированности. Да, сам VEX IR -- single assignment, это хорошо для разработки алгоритмов оптимизации, но дополнительный головняк при генерации байткода для виртуального процессора, имеющего конечное число регистров.
    llvm-qemu -- Относительно молодой проект в рамках которого пилят бинарную трасляцию для QEMU в байт-код LLVM. Не уверен, что оно пригодно для использования в статике.
    libcpu -- Транслятор для множества архитектур в LLVM байт-код, сильно сырой, x86, например, в настоящий момент реализован только до уровня 8086.
    Ariadne -- интересный проект в рамках которого разрабатывается фреймворк для деобфускации. Платный, исходники закрыты, не уверен в том, что полноценная генерация Ariadne IR возможна в чистой статике.

    Такие дела.
     
  6. Cr4sh

    Cr4sh New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2006
    Сообщения:
    668
    При том что самому конвертировать машинный код нужной архитектуры в байт-код виртуальной машины -- достаточно ресурсоёмкая задача в плане затрат на разработку. Проще работать с байт-кодом LLVM, машинный код в который будет конвертироваться какой-то готовой либой.
     
  7. NTarakanov

    NTarakanov New Member

    Публикаций:
    0
    Регистрация:
    19 ноя 2010
    Сообщения:
    94
    имхо, как уже отметил Cr4sh - LibVEX самый лучший вариант, но на изучение сырцов уйдёт уйма времени, да и с портабельностью возможны траблы.
     
  8. shchetinin

    shchetinin Member

    Публикаций:
    0
    Регистрация:
    27 май 2011
    Сообщения:
    715
    NTarakanov
    Cr4sh
    LibVEX - Как с лицензиеё ? или просто стырить и все ок?

    Кстати с семплы есть , например
    http://koders.com/c/fid384AF1BC9C75227C567DE08B4F00BE0E010F19AC.aspx?s=LibVEX_Translate#L84
     
  9. NTarakanov

    NTarakanov New Member

    Публикаций:
    0
    Регистрация:
    19 ноя 2010
    Сообщения:
    94
    shchetinin
    Там двойная лицензия, если LibVEX используется для кода, который GPL v2, то соот-но GPL v2.
    Иначе - надо делать запрос в OpenWorks LLP
     
  10. Satsura

    Satsura S4(uR4 __r00tw0rm__

    Публикаций:
    0
    Регистрация:
    22 апр 2010
    Сообщения:
    374
    Адрес:
    Узбекистон, бляать!!11 :D
    Вообще Таненбаум в своей книге "архитектура современных ..." очень хорошо осветил разработку вм с нуля (; кодесы к книге прилагаются, для новичка в этой области самое то. Есть парочка интересных глав в так называемой "книге дракона". удачи (;
     
  11. seniour_juggler

    seniour_juggler Member

    Публикаций:
    0
    Регистрация:
    27 дек 2009
    Сообщения:
    35
    Полагаю, скоро вопрос решится этот.
     
  12. zxcv

    zxcv New Member

    Публикаций:
    0
    Регистрация:
    30 дек 2011
    Сообщения:
    257
    NTarakanov
    нет там особых проблем с изучением. портабельность - гцц онли. однако, есть особенности работы

    Cr4sh
    наскоко помню, они сменили внутренний формат. но в доке по прежнему ИР. прямо счас подробности не вспомню. год назад встречался последний раз.
     
  13. sn0w

    sn0w Active Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    958
    dermatolog
    да я так для общего развития. кстати, в8 вроде ж еще не появился?

    Satsura,Cr4sh,NTarakanov,scf
    спасибо за советы, неплохая альтернатива занять себя эдак на полгода)
     
  14. Cr4sh

    Cr4sh New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2006
    Сообщения:
    668
    Таки реквестирую подробностей, т.к. совсем недавно встраивал LibVEX в инструментальный модуль для DynamoRIO, и работал по "High-level IR description" из pub/libvex_ir.h
    Вот, кстати, трасса исполнения calc.exe по линейным блокам под инструментализацией, на лету сконверченная в VEX IR: http://dl.dropbox.com/u/22903093/vextrace-8164-1440.log :3
     
  15. zxcv

    zxcv New Member

    Публикаций:
    0
    Регистрация:
    30 дек 2011
    Сообщения:
    257
    Cr4sh
    честно говоря, не помню подробностей (лениво винт тот искать, но если надо бут таки попробую). помню, что тогда формат описанный в доке и наличествующий в сорцах были абсолютно разными, что порадовало внеплановой работой по разбору по сорцам (требовалась строгая отчетность по кажому шажку). оттого и запомнилось

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

    не понимаю самого подхода этого: ЯВУ -> x86 -> виртуалка + х86
    почему не так : ЯВУ -> виртуалка + х86
    ?

    ADD
    что это? волгринд для виндовз?
     
  16. Cr4sh

    Cr4sh New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2006
    Сообщения:
    668
    Я вообще в доках не нашел ничего по IR, разбирался по комментариям из заголовочных файлов и исходникам Lackey/Nulgrind.

    ЯВУ в цепочке нет, т.к. работаю главным образом с приложениями без исходных текстов. LibVEX использую как реализацию IR для анализа кода в процессе инструменализации (т.е., обратно я из VEX IR машинного кода не собираю), что бы абстрагироваться от конкретной архитектуры. Плюс со временем хочу перенести на связку DynamoRIO + LibVEX интересные мне инструменты для Valgrind (Avalance, Fuzzgrind).

    Sort of, поддерживает Windows и Linux на IA-32 и AMD64.
    Так же отличается от Valgrind отсутствием IR и тем, что это в первую очередь не ready to use набор инструментов для разработчика, а именно фреймворк для динамического анализа кода в более широком смысле.
    Ну и BSD лицензия.
     
  17. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    Cr4sh
    мне предоставили, но тк обнаружилось оч серьезное расхождение, то пришлось обновлядь. за те же деньги
    не. вопрос был по теме топика. почему все ползают в москоу через южный полюс, когда есть путь ближе, проще и бонусовей?
    если нет веха или его аналога (те перетрансляции через некое промежуточное общее представление), то это платформенно зависимая прибла со всеми недостатками привяки. вех как раз и дает общее представление + разбивает на линейные участки.
    кстати, насчет сорт оф и общего смысла - решили ли в динамоРИО проблему с виндовыми сисколами?
     
  18. Cr4sh

    Cr4sh New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2006
    Сообщения:
    668
    Смотри: при разработке протектора с виртуальной машиной для сторонних исполняемых файлов (т.е., исходники защищаемого приложения заведомо недоступны) помимо, собственно, виртуальной машины нужно писать и компонент, который бы конвертировал нужные участки кода целевого приложения в байт-код вм (это куда муторнее, чем разработка самой вм), а так как топикстартеру нужен и x86 и x64 и ARM -- то на мой взгляд, целесообразно взять какую-то готовую библиотеку, которая могла бы конвертировать машинный код всех этих архитектур в платформонезависимое промежуточное представление, из которого уже и генерировать байт-код для своей вм-ки (вм-ка, к слову, тоже должна генерироваться более-менее уникальная, если в каждом запротекченом файле будет использоваться одна и та же система команд -- это не очень ок).
    Если у вас есть более адекватные идеи как это сделать с минимальными ресурсозатратами -- поделитесь.

    Да, всё так, поэтому список поддерживаемых архитектур там куда скромнее, чем в Valgrind.

    А что за проблема? Линк на тикет в багтрекере или описание есть?
    Вообще та версия DynamoRIO, что доступна в виде скомпиленых бинарников -- дико бажная, поэтому его нужно в обязательном порядке собирать из актуальных исходников с репозитория, где многие известные проблемы уже решены.
     
  19. cactus

    cactus New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2008
    Сообщения:
    3
    Когда планируется первая версия? В первую очередь интересует Android на Cortex-ах.
     
  20. shchetinin

    shchetinin Member

    Публикаций:
    0
    Регистрация:
    27 май 2011
    Сообщения:
    715
    LightMoon
    1) Не всегда есть возможность запустить таргет(имедж).
    2) Не которые особи очень боятся не которых кодесов (Хотя и вполне ясна причина, не зря наверное АВ юзают снапы для ВМ.)