Page 1 of 1

Возвращение старого режима расположения кода ВМ

Posted: Tue Sep 12, 2023 12:26 pm
by 00p$
В старой версии (сужу по v3.5.1, не знаю когда это поведение поменялось) весь код ВМ располагался в секциях VMProtect, куда управление из защищаемых функций попадало через простые джампы. То есть есть весь код ВМ ссылался лишь сам на себя и на свои секции.

В последней версии (v3.8.4.1798) некоторая часть ВМ располагается прямо на месте защищаемых функций. На бумаге все хорошо, оптимизируется используемое пространство, но есть одно но в текущем положении дел: код ВМ из одной секции может бесконтрольно ссылаться на код ВМ из другой секции.

У меня это вылилось в то, что программа теперь крашится при доступе к секциям, которые были зачищены случайными байтами + помечены как NX, в те моменты когда таких доступов уже быть не должно. Я так понимаю, ВМ переиспользует различный код, чтоб не плодить копии по программе, что опять же хорошо, но лучше бы эту оптимизацию сделать только в рамках одной секции, либо же хотя бы учитывать discardable-флаг на секциях и не ссылаться на них из других секций.

Не знаю, что сделать проще, но просьба либо сделать чекбокс для использования старого режима (в котором весь код ВМ был лишь в секциях .vmp, а из остальных секций были джампы), либо поправить логику работы инлайнинга.

Re: Возвращение старого режима расположения кода ВМ

Posted: Tue Sep 12, 2023 12:36 pm
by Admin
Если честно, то совершенно непонятно зачем вы что-то зачищаете случайными байтами?

Re: Возвращение старого режима расположения кода ВМ

Posted: Tue Sep 12, 2023 12:38 pm
by 00p$
Чтоб не оставлять лишний код в памяти. В целом, просто уборка за собой.

Re: Возвращение старого режима расположения кода ВМ

Posted: Tue Sep 12, 2023 12:44 pm
by Admin
Простой пример прислать можете?

Re: Возвращение старого режима расположения кода ВМ

Posted: Tue Sep 12, 2023 4:10 pm
by 00p$
vmp-protection-test.zip
(2.08 MiB) Downloaded 696 times
пароль отправил в ЛС

Re: Возвращение старого режима расположения кода ВМ

Posted: Tue Sep 12, 2023 4:26 pm
by Admin
По поводу discardable секций - они должны быть все в конце файла (вместе с .rsrc), а не в середине.

Re: Возвращение старого режима расположения кода ВМ

Posted: Tue Sep 12, 2023 4:41 pm
by 00p$
необязательно, посмотрите на ntoskrnl.exe с Win11 22H2.
но в любом случае, опять же, можно и обойтись чекбоксом, для использования старого режима, если так проще будет

Re: Возвращение старого режима расположения кода ВМ

Posted: Tue Sep 12, 2023 5:14 pm
by Admin
В вашем примере ВМ генерируется для функции из ".text" (без discardable флага) и из "init.p" (с disсardable флагом), поэтому секция ВМ не имеет disacrdable флага и вмпротект снимает disacrdable флаг у всех секции, которые идут раньше в том числе и у "init.p".

P.S. Там еще и Exception Directory перезаписывается в новое место, для которой discardable тоже снимается.

Re: Возвращение старого режима расположения кода ВМ

Posted: Tue Sep 12, 2023 6:42 pm
by Admin
У меня это вылилось в то, что программа теперь крашится при доступе к секциям, которые были зачищены случайными байтами + помечены как NX, в те моменты когда таких доступов уже быть не должно.
Проверяйте 1805 билд.

Re: Возвращение старого режима расположения кода ВМ

Posted: Tue Sep 12, 2023 7:04 pm
by 00p$
супер, с 1805-м билдом крашей нет, спасибо!