виртуализация кода

Тема в разделе "WASM.RESEARCH", создана пользователем vladqq, 4 июн 2009.

  1. vladqq

    vladqq New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2009
    Сообщения:
    69
    хай всем

    сидел тут изучал как работают виртуальные машины для защиты кода. возник вопрос.
    к примеру беру я ВМ генератор, говорю ему закриптовать функцию с адреса X1 до X2.
    он добавляет секцию к exe, куда записывает код завиртуаленый, ну и, допустим, код который исполняет этот код.
    сама же область с X1 до X2 забивается NOP-ами, а вначало ставится переход на начало исполнения завиртуаленого кода
    (так, например, поступает rewolf x86 virt).

    Сразу возникает вопрос - как быть, если кусок этой функции использовала другая? visual c++ при оптимизации частенько делает так
    что функции сливаются в некоторых местах. дизассемблировать весь файл в поисках слившегося кода?

    подскажите плз кто рыл протекторы в которых такое было реализовано.
     
  2. je_

    je_ New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    143
    да. только своими глазами можно увериться в правильности выбора участка.
    проще всего брать целые функции
     
  3. vladqq

    vladqq New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2009
    Сообщения:
    69
    вот к примеру vmprotect. он позволяет виртуализировать отдельную функцию. для этого он дизассемблирует весь exe и ищет всех кто на неё ссылается?
     
  4. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    ну забивать можно и cc
    кроме того оптимайзер мутит строго в пределах отдельного объектника.
    ну и сам вм криптор можно встроить в линкер, отказавшись от забиваний, отдельных секций и прочией мути. и компилить перед этим криптуемый объектник можно под более вразумительный проц. не придется различать 1000 хитрокодированых хитрых команд
     
  5. vladqq

    vladqq New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2009
    Сообщения:
    69
    "забивать" это в каком смысле ?
    криптор встроить в линкер - как по мне это не даст особых приимуществ. По map файлу мы и так можем узнать какие функции в каких объектниках находились. видимо таки прийдётся полностью проходить по всем функциям и вычислять кто обращается к завиртуаленому коду :dntknw:
     
  6. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    vladqq
    странное заявление
     
  7. vladqq

    vladqq New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2009
    Сообщения:
    69
    _basmp_
    объясни плз какие возможности даёт встроить в линкер криптор вм