господа, посоветуйте чего курнуть по матчасти, нарыл только вот это - http://sourceforge.net/projects/nano-vm но писать с нуля лень =(, денисом_поповым тоже неохота становиться. идея в том чтобы написать протектор для х64 и арма под винды (взяв за основу хотябы 86ю версию в плане стратегии), приветствуются любые материалы
А LLVM тут причем? Товарисч просит вм протектор типа аспротект, тимида, вмпрот, етц (; у меня гдет валялсо кодес, найду подкину.
sn0w Разработка, собственно, виртуальной машины и обфускатора для всей этой херни -- задача настолько тривиальная, что даже непонятно, что тут обсуждать. Сложности вызывает разве что разработка некоего транслятора, который будет преобразовывать x86/x64 код (НЕНАВИСТЬ! *БАНЫЙ CISC!!!) в промежуточное представление, из которого, в свою очередь, можно будет генерировать код для своей виртуальной машины. Из готовых либ для трансляции машинного кода в IR я знаю: LibVEX -- Вроде бы ок, но придется сильно копаться в исходниках, по причине крайне плохой документированности. Да, сам VEX IR -- single assignment, это хорошо для разработки алгоритмов оптимизации, но дополнительный головняк при генерации байткода для виртуального процессора, имеющего конечное число регистров. llvm-qemu -- Относительно молодой проект в рамках которого пилят бинарную трасляцию для QEMU в байт-код LLVM. Не уверен, что оно пригодно для использования в статике. libcpu -- Транслятор для множества архитектур в LLVM байт-код, сильно сырой, x86, например, в настоящий момент реализован только до уровня 8086. Ariadne -- интересный проект в рамках которого разрабатывается фреймворк для деобфускации. Платный, исходники закрыты, не уверен в том, что полноценная генерация Ariadne IR возможна в чистой статике. Такие дела.
При том что самому конвертировать машинный код нужной архитектуры в байт-код виртуальной машины -- достаточно ресурсоёмкая задача в плане затрат на разработку. Проще работать с байт-кодом LLVM, машинный код в который будет конвертироваться какой-то готовой либой.
имхо, как уже отметил Cr4sh - LibVEX самый лучший вариант, но на изучение сырцов уйдёт уйма времени, да и с портабельностью возможны траблы.
NTarakanov Cr4sh LibVEX - Как с лицензиеё ? или просто стырить и все ок? Кстати с семплы есть , например http://koders.com/c/fid384AF1BC9C75227C567DE08B4F00BE0E010F19AC.aspx?s=LibVEX_Translate#L84
shchetinin Там двойная лицензия, если LibVEX используется для кода, который GPL v2, то соот-но GPL v2. Иначе - надо делать запрос в OpenWorks LLP
Вообще Таненбаум в своей книге "архитектура современных ..." очень хорошо осветил разработку вм с нуля (; кодесы к книге прилагаются, для новичка в этой области самое то. Есть парочка интересных глав в так называемой "книге дракона". удачи (;
NTarakanov нет там особых проблем с изучением. портабельность - гцц онли. однако, есть особенности работы Cr4sh наскоко помню, они сменили внутренний формат. но в доке по прежнему ИР. прямо счас подробности не вспомню. год назад встречался последний раз.
dermatolog да я так для общего развития. кстати, в8 вроде ж еще не появился? Satsura,Cr4sh,NTarakanov,scf спасибо за советы, неплохая альтернатива занять себя эдак на полгода)
Таки реквестирую подробностей, т.к. совсем недавно встраивал 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
Cr4sh честно говоря, не помню подробностей (лениво винт тот искать, но если надо бут таки попробую). помню, что тогда формат описанный в доке и наличествующий в сорцах были абсолютно разными, что порадовало внеплановой работой по разбору по сорцам (требовалась строгая отчетность по кажому шажку). оттого и запомнилось да. линейные блоки и на лету. могу представить вех для запуска х86 на арме, но для конверчения в виртуалку придется чуть поточить не понимаю самого подхода этого: ЯВУ -> x86 -> виртуалка + х86 почему не так : ЯВУ -> виртуалка + х86 ? ADD что это? волгринд для виндовз?
Я вообще в доках не нашел ничего по 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 лицензия.
Cr4sh мне предоставили, но тк обнаружилось оч серьезное расхождение, то пришлось обновлядь. за те же деньги не. вопрос был по теме топика. почему все ползают в москоу через южный полюс, когда есть путь ближе, проще и бонусовей? если нет веха или его аналога (те перетрансляции через некое промежуточное общее представление), то это платформенно зависимая прибла со всеми недостатками привяки. вех как раз и дает общее представление + разбивает на линейные участки. кстати, насчет сорт оф и общего смысла - решили ли в динамоРИО проблему с виндовыми сисколами?
Смотри: при разработке протектора с виртуальной машиной для сторонних исполняемых файлов (т.е., исходники защищаемого приложения заведомо недоступны) помимо, собственно, виртуальной машины нужно писать и компонент, который бы конвертировал нужные участки кода целевого приложения в байт-код вм (это куда муторнее, чем разработка самой вм), а так как топикстартеру нужен и x86 и x64 и ARM -- то на мой взгляд, целесообразно взять какую-то готовую библиотеку, которая могла бы конвертировать машинный код всех этих архитектур в платформонезависимое промежуточное представление, из которого уже и генерировать байт-код для своей вм-ки (вм-ка, к слову, тоже должна генерироваться более-менее уникальная, если в каждом запротекченом файле будет использоваться одна и та же система команд -- это не очень ок). Если у вас есть более адекватные идеи как это сделать с минимальными ресурсозатратами -- поделитесь. Да, всё так, поэтому список поддерживаемых архитектур там куда скромнее, чем в Valgrind. А что за проблема? Линк на тикет в багтрекере или описание есть? Вообще та версия DynamoRIO, что доступна в виде скомпиленых бинарников -- дико бажная, поэтому его нужно в обязательном порядке собирать из актуальных исходников с репозитория, где многие известные проблемы уже решены.
LightMoon 1) Не всегда есть возможность запустить таргет(имедж). 2) Не которые особи очень боятся не которых кодесов (Хотя и вполне ясна причина, не зря наверное АВ юзают снапы для ВМ.)