Вопрос по защите числовых переменных.

Post here any topics that related to Enigma Protector, its functionality, your misunderstanding, offers to improvements etc etc etc
Post Reply
WaterLoo
Posts: 10
Joined: Tue Sep 05, 2017 4:50 pm

Вопрос по защите числовых переменных.

Post by WaterLoo »

По необходимости пришлось впервые столкнуться с защитой своего приложения, заранее извиняюсь если вопрос покажется детским. Хотелось бы узнать как при помощи маркеров и api-функций лучше всего защитить числовые переменные и поля классов. К примеру имеется приложение, незарегистрированная версия которого, ограничивает некоторый функционал в количественной мере (в зарегистрированной версии этих ограничений нет). Т.е. после проверки лицензии, в зависимости от ее результатов, происходит проверка переданных пользователем данных которые отображают эти самые количества, далее эти значения присваиваются переменным, и в случае необходимости происходит их замена на значения с ограничением. Затем эти данные передаются в поток с замкнутым циком, где тоже присваиваются некоторым переменным или полям класса. Если проверку переменных можно защитить виртуализацией при помощи маркеров vm_begin/vm_end, то виртуализация работы с переменными внутри цикла, судя по всему, приведет к заметной потере производительности. Подскажите пожалуйста какими средствами эффективней всего организовать защиту таких переменных в данной ситуации?
Enigma
Site Admin
Posts: 2938
Joined: Wed Aug 20, 2008 2:24 pm

Re: Вопрос по защите числовых переменных.

Post by Enigma »

Здравствуйте,

Вы смотрите в правильном направлении. Необходимо использовать именно виртуализацию функций, причем, виртуализировать надо все функции, где используются такие переменные.

Так же, я советую использовать виртуализацию через мап файл и функцию Virtual Machine - Functions Selecting. Эта функция обеспечивает покрытие бОльшего числа инструкций в функции чем маркеры, так что ее использование предпочтительнее.

Последняя версия Enigma Protector позволяет выбрать тип виртуализации для каждой функции, это либо RISC либо CLASSIC. Первая тип ВМ более медленная, но взломоустойчивая, вторая быстрая, но проще. Так что можете использовать RISC для функций где нет циклов и где важна производительность, и CLASSIC где код код надо выполнить быстрее. Хотя, так же протестируйте, на сколько сильно RISC будет занижать скорость цикла, возможно, что этого даже не будет заметно, тогда применений этой ВМ более предпочтительно.
WaterLoo
Posts: 10
Joined: Tue Sep 05, 2017 4:50 pm

Re: Вопрос по защите числовых переменных.

Post by WaterLoo »

Здравствуйте.
Спасибо за подробный ответ. Правильно ли я понял что, RISC виртуализация не доступна в в демо-версии, как через маркеры так и через VM - Functions Selecting? И поддерживаются ли протектором последние версии Delphi: Tokyo, Berlin?
WaterLoo
Posts: 10
Joined: Tue Sep 05, 2017 4:50 pm

Re: Вопрос по защите числовых переменных.

Post by WaterLoo »

И сразу добавлю еще вопрос который возник по мере ознакомления с вашим продуктом.
В списке Functions Selecting имеются записи наподобие "Unit1..TForm1", это виртуализация объявления классов или что-то иное?
Enigma
Site Admin
Posts: 2938
Joined: Wed Aug 20, 2008 2:24 pm

Re: Вопрос по защите числовых переменных.

Post by Enigma »

WaterLoo wrote:Правильно ли я понял что, RISC виртуализация не доступна в в демо-версии, как через маркеры так и через VM - Functions Selecting?
Да, все верно, RISC есть только в полной версии протектора.
WaterLoo wrote:И поддерживаются ли протектором последние версии Delphi: Tokyo, Berlin?
Мы целенаправлено эту версию не тестировали, но более чем уверен, что там все в порядке. В любом случае, если будут какие проблемы, мы с можем их оперативно решить.
WaterLoo wrote:В списке Functions Selecting имеются записи наподобие "Unit1..TForm1", это виртуализация объявления классов или что-то иное?
Не могу сказать точно, возможно это конструктор формы. Но, что могу сказать точно, что если данная функция (конструктор формы) не содержит кастомный код, который потенциально подвержен к взлому, то защищать его с помощью ВМ нет смысла. Вообще никакие стандартные классы и функции не стоит защищать с помощью ВМ, иначе это приведет к увеличению размера файла, уменьшению скорости работы, но не добавит защиты файлу. Лучше всего защищать те функции, которые работают с лицензией, показывают информацию о лицензировании, которые как то ограничивают функционал, где вызываются Enigma API функции.
Post Reply