В старой версии (сужу по v3.5.1, не знаю когда это поведение поменялось) весь код ВМ располагался в секциях VMProtect, куда управление из защищаемых функций попадало через простые джампы. То есть есть весь код ВМ ссылался лишь сам на себя и на свои секции.
В последней версии (v3.8.4.1798) некоторая часть ВМ располагается прямо на месте защищаемых функций. На бумаге все хорошо, оптимизируется используемое пространство, но есть одно но в текущем положении дел: код ВМ из одной секции может бесконтрольно ссылаться на код ВМ из другой секции.
У меня это вылилось в то, что программа теперь крашится при доступе к секциям, которые были зачищены случайными байтами + помечены как NX, в те моменты когда таких доступов уже быть не должно. Я так понимаю, ВМ переиспользует различный код, чтоб не плодить копии по программе, что опять же хорошо, но лучше бы эту оптимизацию сделать только в рамках одной секции, либо же хотя бы учитывать discardable-флаг на секциях и не ссылаться на них из других секций.
Не знаю, что сделать проще, но просьба либо сделать чекбокс для использования старого режима (в котором весь код ВМ был лишь в секциях .vmp, а из остальных секций были джампы), либо поправить логику работы инлайнинга.
Возвращение старого режима расположения кода ВМ
Re: Возвращение старого режима расположения кода ВМ
Если честно, то совершенно непонятно зачем вы что-то зачищаете случайными байтами?
Re: Возвращение старого режима расположения кода ВМ
Чтоб не оставлять лишний код в памяти. В целом, просто уборка за собой.
Re: Возвращение старого режима расположения кода ВМ
Простой пример прислать можете?
Re: Возвращение старого режима расположения кода ВМ
пароль отправил в ЛС
Re: Возвращение старого режима расположения кода ВМ
По поводу discardable секций - они должны быть все в конце файла (вместе с .rsrc), а не в середине.
Re: Возвращение старого режима расположения кода ВМ
необязательно, посмотрите на ntoskrnl.exe с Win11 22H2.
но в любом случае, опять же, можно и обойтись чекбоксом, для использования старого режима, если так проще будет
но в любом случае, опять же, можно и обойтись чекбоксом, для использования старого режима, если так проще будет
Re: Возвращение старого режима расположения кода ВМ
В вашем примере ВМ генерируется для функции из ".text" (без discardable флага) и из "init.p" (с disсardable флагом), поэтому секция ВМ не имеет disacrdable флага и вмпротект снимает disacrdable флаг у всех секции, которые идут раньше в том числе и у "init.p".
P.S. Там еще и Exception Directory перезаписывается в новое место, для которой discardable тоже снимается.
P.S. Там еще и Exception Directory перезаписывается в новое место, для которой discardable тоже снимается.
Re: Возвращение старого режима расположения кода ВМ
Проверяйте 1805 билд.У меня это вылилось в то, что программа теперь крашится при доступе к секциям, которые были зачищены случайными байтами + помечены как NX, в те моменты когда таких доступов уже быть не должно.
Re: Возвращение старого режима расположения кода ВМ
супер, с 1805-м билдом крашей нет, спасибо!