Мысли, желания по поводу ExpiredData защиты.
Мысли, желания по поводу ExpiredData защиты.
Как я понял, эта защита опирается на системное время компьютера. Поэтому обходится элементарным изменением системного времени (переустановкой даты-времени на компе). Предлагаю в функции VMProtect.SDK.SetSerialNumber(), VMProtect.SDK.GetSerialNumberState() и VMProtect.SDK.GetSerialNumberData() ввести необязательный входной аргумент этого системного времени. Чтобы эту ExpiredData сравнивать именно с ним. Для тех кому это не интересно, ничего не изменится. Ну а у таких как я появится возможность не давать пользователю "крутить" системное время. Или ввести этот аргумент только в функцию VMProtect.SDK.SetSerialNumber(), а в протекторе реализовать собственные системные часы, которые как раз и будут синхронизироваться по этому аргументу.
Re: Мысли, желания по поводу ExpiredData защиты.
Чем не устраивает собственная проверка VMProtectSerialNumberData.dtExpire после VMProtectSetSerialNumber и VMProtectGetSerialNumberData если у вас на руках есть "правильная" дата?
Re: Мысли, желания по поводу ExpiredData защиты.
Я не говорю, что сложно сделать свою проверку правильной даты и ExpiredData. Просто флаги состояния защиты будут указывать, что период действия еще не истек. А так все красиво получится, вызовешь данные о лицензии, а там "извините, время использования программы закончилось". Да и меньше кода городить. Все по фэншую, так сказать. Просто на данном этапе, чтобы в данных о лицензии высвечивалось именно сообщение о истекшем сроке действия, приходится перед каждым запросом состояния защиты, синхронизировать системные часы с правильным временем. А это отловить можно проще, чем когда я правильное время передам в ядро протектора.
Re: Мысли, желания по поводу ExpiredData защиты.
Сделайте собственную обертку над VMprotectSetSerialNumber и передавайте туда правильное время. Я не вижу никакой проблемы.Просто флаги состояния защиты будут указывать, что период действия еще не истек.
Re: Мысли, желания по поводу ExpiredData защиты.
Зачем заворачивать VMprotectSetSerialNumber? Наоборот нужно заворачивать GetSerialNumberData() и GetSerialNumberState(), а SetSerialNumber нужно заворачивать только если используем его значение тут-же для проверки состояния. У меня она, SetSerialNumber, единожды вызывается, при старте, и только для "ввода серийника". Далее все, защищенные в демо-режиме, функции проверяются именно теми двумя функциями. Теперь представим, что я эти две обертки завиртуализую и заморфлю. Одна потеря производительности. Потом нужно еще защитить сам вызов этой обертки, опять виртуализация+морф, получу еще вторую потерю производительности.
А так у меня был-бы только один вызов, сразу апи-защиты, который я завиртуализую и заморфлю только один раз.
Ну очень удобно.
А еще лучше, как я уже говорил, когда системные часы есть в ядре протектора и синхронизируются только в SetSerialNumber. Ввел точное время и забыл, дальше только проверяй флаги состояния. Не придется думать, что эталонное время нужно периодически обновлять.
Я не заставляю вас это делать, я просто говорю, что так будет грамотнее. Я и тему назвал соответственно.
А так у меня был-бы только один вызов, сразу апи-защиты, который я завиртуализую и заморфлю только один раз.
Code: Select all
if(VMProtect.SDK.GetSerialNumberState(currentDateTime) == VMProtect.SerialState.Success){...}
А еще лучше, как я уже говорил, когда системные часы есть в ядре протектора и синхронизируются только в SetSerialNumber. Ввел точное время и забыл, дальше только проверяй флаги состояния. Не придется думать, что эталонное время нужно периодически обновлять.
Я не заставляю вас это делать, я просто говорю, что так будет грамотнее. Я и тему назвал соответственно.
Re: Мысли, желания по поводу ExpiredData защиты.
Мы не будем ничего менять в SDK.
Re: Мысли, желания по поводу ExpiredData защиты.
Согласен, баги проще устранять, чем функциональность улучшать.