хай всем сидел тут изучал как работают виртуальные машины для защиты кода. возник вопрос. к примеру беру я ВМ генератор, говорю ему закриптовать функцию с адреса X1 до X2. он добавляет секцию к exe, куда записывает код завиртуаленый, ну и, допустим, код который исполняет этот код. сама же область с X1 до X2 забивается NOP-ами, а вначало ставится переход на начало исполнения завиртуаленого кода (так, например, поступает rewolf x86 virt). Сразу возникает вопрос - как быть, если кусок этой функции использовала другая? visual c++ при оптимизации частенько делает так что функции сливаются в некоторых местах. дизассемблировать весь файл в поисках слившегося кода? подскажите плз кто рыл протекторы в которых такое было реализовано.
да. только своими глазами можно увериться в правильности выбора участка. проще всего брать целые функции
вот к примеру vmprotect. он позволяет виртуализировать отдельную функцию. для этого он дизассемблирует весь exe и ищет всех кто на неё ссылается?
ну забивать можно и cc кроме того оптимайзер мутит строго в пределах отдельного объектника. ну и сам вм криптор можно встроить в линкер, отказавшись от забиваний, отдельных секций и прочией мути. и компилить перед этим криптуемый объектник можно под более вразумительный проц. не придется различать 1000 хитрокодированых хитрых команд
"забивать" это в каком смысле ? криптор встроить в линкер - как по мне это не даст особых приимуществ. По map файлу мы и так можем узнать какие функции в каких объектниках находились. видимо таки прийдётся полностью проходить по всем функциям и вычислять кто обращается к завиртуаленому коду