Есть много способов реализовать что-то подобное, но вот тот, который не должен быть слишком сложным:
Вам нужен общедоступный веб-сайт, где размещен файл, содержащий хэши лицензионных ключей, которые были в черном списке. Как вы управляете этим файлом, зависит только от вас, но сам файл должен иметь только хэш в каждой строке.
Затем, периодически, ваше программное обеспечение инициирует загрузку этого файла (большинство языков на стороне сервера обеспечивают это), а затем ищет в нем хэш установленного лицензионного ключа. Если он найден, то приложение знает, что оно должно умереть, пока черный список не будет удален.
MD5 или аналогичный плюс секрет должен быть достаточным для этого. Вы можете стать более привлекательным, если бы приложение отправляло запрос на ваш сайт, и вы могли бы найти его в базе данных на лету, но файл (который, я предполагаю, будет коротким списком), надеюсь, останется небольшим и может быть самый простой способ.
Сложнее будет сохранить приложение мертвым. В конце концов, вы должны хранить это где-то внутри, что означает, что если оно слишком очевидно, его можно легко подорвать, и даже если оно не слишком очевидно, его можно легко отменить, восстановив соответствующую таблицу (таблицы) / файл (ы). Поэтому я предлагаю и второй способ защиты.
Этот метод будет хранить «LIVE» или «DEAD» (или что-то достаточно похожее) в таблице или файле, но снова HASHed. Это должно быть хешировано с вашей солью и отметкой времени. Каждый раз, когда страница вашего приложения запускается, проверяйте это значение с помощью хэшированной версии «LIVE» + соль + временная метка, а затем разрешите допустимый диапазон временных отметок (например, один день, два дня, одна неделя, один месяц и т. Д.). Имейте в виду, что чем больше диапазон, тем тяжелее будет результативность.). Пока все совпадает (или найдено совпадение), приложение остается живым; в противном случае, даже если значение в специальном файле или таблице равно «LIVE», оно все равно будет мертвым, если будет предпринята попытка восстановления из резервной копии, поскольку отметка времени выйдет за пределы вашего порогового значения.
В итоге (это предполагает, что у вас есть какой-то программный метод проверки действительности лицензионного ключа, такой как какая-то контрольная сумма или другой метод):
- CheckBlacklist
- Преобразовать лицензионный ключ в хеш с солью
- Запросить файл черного списка с сервера
- Мой хеш в файле?
- Если ДА, то сохраните хэш "DEAD" + соль + метка времени (усеченный до дня; нет необходимости хранить часы + дни + минуты)
- Если НЕТ, то сохраните хеш "LIVE" + соль + метка времени (trunc'd)
- IsKeyAlive
- Создать хеш из "LIVE" + соль + trunc'd отметка времени
- Загрузить DeadAlive хеш
- Они согласны?
- Если ДА, то мы живы; вернуть ИСТИНА.
- Если НЕТ, то мы, возможно, мертвы, но мы все еще можем находиться в нашем окне отметки времени:
- Вычтите день из отметки времени и повторите хэш.
- Согласны ли мы сейчас?
- ДА? Возврат ИСТИНА
- Добавьте день к метке времени и повторите хэш
- Согласны ли мы сейчас?
- ДА? Возврат ИСТИНА
- На данный момент мы вышли за пределы диапазона меток времени без совпадений. Вернуть ЛОЖЬ. (Убить приложение)
Теперь, боже мой, есть миллион и один способ, которым это может потерпеть неудачу. Рассмотрите все возможные способы и создайте надежную систему (включая ту, которая предполагает, что клиент прав, если файл черного списка не может быть загружен). Протестируйте, протестируйте, протестируйте его, а затем протестируйте еще несколько перед развертыванием, потому что, если это пойдет не так, вы потеряете доверие своего клиента.