Просьба реализовать возможность размещать код VMP не в отдельной секции, а внутри заранее выделенного самим программистом места (функция с мусором). Точно так же, как это умеет продукт от oreans.
Есть одна проблема, связанная с особенностями раскрутки стека при исключениях (насколько я знаю у oreans с этим вообще все плохо). Например для PE x64 (а также актуально для Mach-O и ELF) для каждой функции на уровне формата определен диапазон адресов, где она “лежит”, а также есть вся информация об используемом стеке. В текущей версии VMprotect место от старых функций никак не используются и на уровне PE остается информация для раскрутки стека, которая используется при исключениях в завиртуализированных функциях (исполнитель ВМ в своем обработчике исключений “подсовывает” операционке оригинальный PC, который она в дальнейшем использует для раскрутки стека). Если на старое “место” положить код, который связан с другой функцией, то все это благополучно грохнется при первом же исключении.
Поддержка исключений - дело хорошее, но далеко не всегда нужное. Есть куча вариантов программ, где не используется SEH или по ненадобности, или по невозможности (мануалмап). И тут гораздо выгоднее смотрится возможность еще сильнее надурачить реверсера, нежели иметь постоянную поддержку сеха там где оно не требуется.
Есть куча вариантов программ, где не используется SEH или по ненадобности, или по невозможности
А еще есть куча мест где SEH используется, а Вы даже об этом и не знаете (даже если в Вашем коде его явно нет), так что игнорировать работу этого механизма крайне не желательно и чревато.
Больше скажу в некоторых местах своей программы пришлось подставатся под фичи VMP, чтобы не падало.
Если мозги на месте, можешь проконтролировать создание своего бинарника так, чтоб в нем не было скрытых сюрпризов. Для скрипт-кидди, не знающих что им нужно, можно добавить активный по-умолчанию чекбокс “Полноценная поддержка любых программ” или что-то такое, что блокировало бы опасные фичи. А обрезать из-за этого функционал для всех - бред.
В версии 3.6 все место из под оригинального кода будет использоваться для размещения нового кода/данных. Для PE64 и для Mach-O/ELF ВМ и код под мутацией в любом случае будет размещаться в отдельном сегменте чтобы на уровне формата не “перекрывались” диапазоны RUNTIME_FUNCTION, что может привести к некорректной раскрутке при обработке исключений.