Спасибо за все ваши ответы!
Мы не совсем сделали то, что предложил один человек, но использовали идеи нескольких из вас.
Во-первых, мы перестали называть это бомбой замедленного действия и вместо этого назвали ее лицензией. Поскольку в настоящее время программное обеспечение (возможно) является неполным, и поскольку клиент не заплатил за него, мы можем назвать его тестовой версией, срок действия которой истекает. Это (вероятно) позволяет нам преодолеть большую часть законного минного поля, и (как указал zsharp), если они утверждают, что продукт не соответствует стандартам, они не могут жаловаться, если не могут его использовать.
В любом случае, техническая реализация выглядит так:
Мы хотели, чтобы дата истечения срока была скрыта там, где ее нельзя было бы наткнуться, и, если бы она была замечена, была бы в форме, которую нельзя было бы легко изменить. Это также должно было быть где-то, мы могли быть уверены, что не пострадали бы непреднамеренно, даже несмотря на то, что на сервере мы не имеем такого большого контроля.
Итак, мы зашифровали дату окончания срока действия и поместили ее в Расширенное свойство в базе данных, которую использует приложение, присвоив ей подходящее вводящее в заблуждение имя.
Приложение проверяет ключ при запуске, устанавливая статический логический флаг в значение true, если срок действия приложения не истек. Каждая страница сайта проверяет этот флаг и перенаправляет пользователя на страницу ошибки, если флаг имеет значение false.
Мы рады этому решению по следующим причинам:
- Нам легко изменить дату истечения срока действия заявки.
- Нет никакой зависимости от доступности интернета или чего-либо еще кроме их сервера.
- Защита выживет при резервном копировании и восстановлении, или если приложение будет перемещено в другой ящик.
Когда аргументы прекратились, они заплатили нам, и мы снова все друзья, следующее обновление их приложения вообще не будет проверено, гарантируя, что этот забытый кусок кода не будет случайно срабатывает в какой-то момент года спустя (спасибо, Кристен!).