Страницы

Поиск по вопросам

пятница, 13 декабря 2019 г.

Как сделать ограничение работы программы по времени (демо-версию)?

#c_sharp


Допустим, есть программа на c#, как сделать так, чтоб программа привязывалась к пк
и через месяц удалялась? Или блокировала доступ к файлам программы, можно сделать систему
с ключом (например, вводишь в окно KEY-KEY-KEY-KEY, и программа активируется на месяц).

Можно навсегда, но с проверкой железа, чтоб не сливали
    


Ответы

Ответ 1



Для начала ответьте на несколько простых вопросов: Насколько уникально ваше приложение и существуют ли бесплатные аналоги? Какие функции оно выполняет, что бы потенциальный пользователь захотел его, хотя бы, посмотреть? Каково количество потенциальных пользователей вашего приложения? Насколько оперативно вы или ваша команда готовы исправлять ошибки, обнаруженные пользователями, которые вам уже заплатили? Захотели бы вы сами купить такое приложение, если бы вы не могли его сделать сами и его сделал кто-то другой? ... Эти вопросы (их еще много, но для начала хватит и этих) помогут оценить потенциальную теоретическую ценность вашего приложения. Разумеется, только в том случае если вы, хотя бы себе, ответите на них честно. Любая защита рано или поздно ломается, поэтому все, что находится на компьютере клиента уязвимо априори. Однако стоит заметить, что опасаться того, что кто-то сломает вашу защиту стоит только тогда, когда у вас действительно полезный и востребованный продукт, на ненужный и бесполезный ни кто не будет тратить ни время, ни, тем более, деньги. Патентуйте ваши уникальные алгоритмы, если конечно они действительно уникальны. Работайте по схеме SaaS. Логика и данные на сервере, клиент простой и ни чем не уникальный терминал. Онлайн авторизация и активация. Да, есть всякие аппаратные ключи, обфускаторы и прочая ересь, все это лишь ненадолго замедляет процесс обхода защиты. Можете вспомнить, если конечно застали, судьбу StarForse, которым пытались защитить игры, распространявшиеся тогда на дисках или аппаратные ключи того же 1С, которые благополучно эмулируются и по сей день, а приобретение лицензий связано вовсе не с отсутствием возможности обойти защиту. По поводу пробного периода, стоит смотреть в сторону онлайн проверки, т.к. мало кто сейчас захочет добровольно ограничить себе выход в сеть ради какой-то программы. персональный аккаунт пользователя фиксация даты первого запуска на сервере фоновая проверка пробного периода во время работы и/или простоя приложения сигнатура лицензии шифруется на сервере любым стойким алгоритмом и сохраняется в файле на клиенте в бинарном виде. клиент не умеет расшифровывать лицензию, а только передает ее на сервер для проверки ее актуальности при проверке лицензии, на сервер, вместе с сигнатурой самой лицензии, передавайте дату модификации файла лицензии, она не меняется даже при запаковке в архив с последующей распаковкой, не говоря уже о простом копировании или перемещении. Если даты не сходятся - клиент пытался мухлевать, решайте сами что с ним делать. весь обмен данными, разумеется, по SSL при длительном отсутствии связи с сервером со стороны клиента, в качестве крайней меры, используйте время относительно даты модификации файла лицензии, да это ненадежно, но этого можно избежать, если вашей программе наличие выхода в сеть необходимо не только для проверки лицензии. И даже не пытайтесь ограничить пользователя одним компьютером, привязываясь к каким либо аппаратным данным. На это есть как минимум одна, но более чем веская причина: компьютеры все еще имеют нехорошую привычку устаревать и, иногда, просто ломаться. Может возникнуть необходимость замены абсолютно любых "железных" компонент в любом количестве и сочетаниях, что приведет к неработоспособности вашей программы и как-то решать эту проблему придется именно вам, если конечно вам нужны ваши пользователи.

Ответ 2



Несколько тезисов из моих способов защиты: Не использовать ключи вида ХХХХ-ХХХХ-ХХХХ-ХХХХ. Гораздо проще передавать ключи как сертификаты в Base64 строке сохранённой в файл лицензии. В текстовом виде хранить достаточно. Соответственно содержимое (дата окончания, уникальные данные ПК целевой машины) должно быть зашифровано любым криптом в зависимости от паранойи. Можно зашифровать в RSA 1024/2048 битным ключом. Для этого вам потребуется "слепок" данных о ПК пользователя. Т.е. пользователь должен сформировать файл запроса и передать его вам. В файл складываете уникальные данные о ПК чтобы сгенерировать лицензию для пользователя, чтобы исключить мульти- использование программы. Реальное время лучше всего проверять через NTP сервисы интернета, желательно иметь большой список серверов и использовать случайный выбор сервера. Это исключит попытки эмуляции NTP сервиса, если пользователь решить проверить трафик программы. На данный момент даже чайники подключаются к интернету, так что оффлайн режим не актуален. Это предотвратит перевод даты на ПК и уменьшит размер кода на всякие множественные проверки (больше знаете об инструментах очистки триал информации - больше паранойи). Используйте обфускацию своего C# проекта иначе любой декомпилятор отобразит всю вашу писанину вплоть до комментариев в коде. Для перестраховки можете добавить в программу отдельный поток, который будет независимо проверять лицензию (с плавающем периодом проверки) и в случае несоответствия прортить данные или закрывать программу. И не используйте те же методы для проверки лицензии - сделайте их уникальными для этого модуля. Это усложнит в разы реверс и поиск пасхалок. Ваша основная задача усложнить реверс вашего приложения до такого уровня, чтобы купить лицензию стоило бы дешевле потраченного времени и денег на крэкинг.

Ответ 3



Пример генерации серийника под железо я писал вот здесь: Как сделать генератор серийных номеров для программы? На тему того как привязать программу на работу в месяц: при первом запуске ты можешь генерировать в несколько мест дату первого запуска (или дату запуска триала). При чем не по местному времени, а по интернет-времени, если компьютер подключен к интернету. Например, записывать в настройки программы + в реестр. Вплоть до секунды. Если одна из дат меняется и не совпадает с другой - заблокировать программу и убить триал полностью. Если совпадает - сделать проверку на то что триал не истек. Использовать обсуфикацию. Но это все дизасемблируется и обходится довольно просто. Взлом можно некисло усложнить если разбить это все на десяток потоков которые делают какую-то работу подобную. В таком случае только один поток будет делать полезную работу с реальным ключем или с реальной частью ключа. А на дизасемблере работать с паралельными потоками будет оч сложно :) Хочешь защиту по-лучше -- делай онлайн-активацию. Хочешь реально качественную защиту - делай всю работу на стороне сервера, а не на стороне клиента. Сам же клиент не должен уметь делать нихрена окроме как авторизироватся на твоем сервисе и выдавать юай. Все что делается на стороне клиента - уязвимо к взлому.

Ответ 4



Как вариант, он конечно простой: при первом запуске, проверяешь наличие файла, если его нет, то создаёшь файл и в него записываешь дату запуска и при каждом последующем запуске сверять дату текущую с датой в файле или лучше счётчик сделать, если с момента первого запуска прошло более 30 дней - выводить окно ввода key'я, после ввода которого обнулять дату и все по той же схеме, либо все удалять. Как сказал ранее способ вообще простой, возможно опытные ребята подскажут красивые вещи.

Комментариев нет:

Отправить комментарий