Счетчик времени, не привязанный к системному времени.

markyzz

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

BatoSan

Было бы желание - всё взломают. Стопроцентно работающий вариант - только выполнять проверки и часть кода программы на USB-донгле или удалённом недоступном пользователю сервере. Всё остальное можно тем или иным образом обойти.

markyzz

Было бы желание - всё взломают.
Не, не, не! забыл уточнить, что пользователь не обладает навыками дизассемблирования. Он только переставляет винду, копирует файлы, и балуется со временем :cool:

BatoSan

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

Werdna

Так вот... можно ли гарантированно отсчитать время работы программы? (и, как усложнение задачи - всех ее копий)
Мущина, вы интернетом умеете пользоваццо из вашей программы?
Программа твоя для ЭВМ должна брать какую угодно соль, например, sha256("экземпляр проги ПР-253345334, сейчас на компе 7 октября 2014 14:17, свободное место на диске 37 гигов, raw pointer на переменную херня 0x0000043342ff5400")
Далее по интернету ты делаешь запрос и просишь подписать этот хешик цифровой подписью.
Разумеется, надо обфускацию делать, без нее любую хрень дизассемблером можно решить.
Но это всё — порнотехнологии. Я не знаю какой дебил ещё пользуется такого рода "защищенными" программами. Это идиотизм, завязывать бизнес на говнецо, которое непредсказуемо может начать перестать работать.

markyzz

Я не знаю какой дебил ещё пользуется такого рода "защищенными" программами. Это идиотизм, завязывать бизнес на говнецо
Никто не завязывает никакой бизнес на этом принципе :)
Вопрос был чисто гипотетический. Может ли программа знать сколько она проработала. Где программа - это, к примеру, один исполняемый файл, она не пользуется интернетами, не сохраняет никаких пользовательских баз данных и тд итп.... в общем, я так понял по ответам, что не может, либо никто еще не знает, как это сделать :)
А так-то да, частичный код на флешке - вроде, и есть решение.

kiracher

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

agaaaa

Никто не завязывает никакой бизнес на этом принципе :)
Вопрос был чисто гипотетический. Может ли программа знать сколько она проработала. Где программа - это, к примеру, один исполняемый файл, она не пользуется интернетами, не сохраняет никаких пользовательских баз данных и тд итп.... в общем, я так понял по ответам, что не может, либо никто еще не знает, как это сделать :)
А так-то да, частичный код на флешке - вроде, и есть решение.
Я не понял, а чем тебя не устроил вариант с удалённым сервером?

markyzz

Я не понял, а чем тебя не устроил вариант с удалённым сервером?
например, отсутствие интернета :)
А вообще я реально сейчас ничего такого не пишу, просто задумался. То есть никакого прикладного приложения - чистой воды философия.
В общем, я придумал примерно так: при запуске программы считывается некий файлик, созданный этой же программой. В файлике в зашифрованном виде находится информация о данном компе и системе. Если инфа не совпадает с реальностью, то выходим. Далее, в нем же находится инфа о реальном времени работы программы, которую прога периодически приплюсовывает к нему. Ну, и в нем же указана дата собственного создания, которая должна опять же совпадать с реальностью.
Ну, как-то так.... :cool:

serega1604

В общем, я придумал примерно так: при запуске программы считывается некий файлик, созданный этой же программой. В файлике в зашифрованном виде находится информация о данном компе и системе. Если инфа не совпадает с реальностью, то выходим.
что делать, если пользователь поменял процессор/обновил систему?
Далее, в нем же находится инфа о реальном времени работы программы, которую прога периодически приплюсовывает к нему. Ну, и в нем же указана дата собственного создания, которая должна опять же совпадать с реальностью.
что делать, если пользователь запускает программу в виртуалке и периодически откатывает её снапшот?

markyzz

ну, да, согласен.
Безотказный вариант - логин+пароль конкретного юзера - и удаленный сервер, куда пишется сколько конкретный пользователь надрочил с программой.

AlexV769

Безотказный вариант
:smirk:

markyzz

Хватит стеба! Наш шарообразный юзер - не хакер! :cool:

Marinavo_0507

если не хакер то просто пиши в "Program Files" лог использования

apl13

Тогда уж в Local...Application Data.

YUAL

Надо просто выносит на сервера не только проверку, но и логику работы программы. Тогда всё будет ок. Собственно счас все главные пидарасы так и делают.

svetaslav212

Радиоактивный изотоп с небольшим периодом полураспада уже предлагали?

fufa58

Пользователь может его подменить!

svetaslav212

:shocked: Я бы не стал связываться с пользователем, имеющим доступ к расщепляемым материалам. :grin:

Dasar

имеющим доступ к расщепляемым материалам
их же у того же DealExtreme можно купить
Оставить комментарий
Имя или ник:
Комментарий: