Одним из подходов является наличие сервера лицензирования. Когда вы вводите код лицензии в клиент (на виртуальной машине), он связывается с сервером и отправляет ему свой код лицензии и другую информацию. Он связывается с ним несколько раз (вы определяете интервал - возможно, раз в несколько часов), спрашивая «Я все еще действителен?» Наряду с этим запросом он отправляет уникальный идентификатор. Сервер отвечает «Да, вы действительны» и отправляет новый уникальный идентификатор обратно клиенту. Клиент отправляет этот уникальный идентификатор обратно со своим следующим запросом на сервер. Сервер проверяет, что это тот же идентификатор, который он отправил клиенту для этой лицензии, предыдущий запрос.
Если виртуальная машина дублируется, то в следующий раз, когда она спросит сервер «Я действителен?», Уникальный идентификатор будет неправильным как для нее, так и для другой виртуальной машины. Оба не будут продолжать работать.
Вам нужно будет определить, что делать, если сервер выходит из строя или сеть выходит из строя, так что клиент не может связаться с сервером. Вы немедленно отключаете свое программное обеспечение? Плохая идея! Не зли своих клиентов. Вы хотите дать им льготный период. Как долго это должно быть? Несколько дней? Недель
Допустим, вы даете им льготный период в 1 месяц. Теоретически, они могут клонировать родительскую виртуальную машину сразу после ввода лицензионного ключа, а затем восстановить другие виртуальные машины в этом клоне незадолго до истечения льготного периода, отключив к ним сетевой доступ. Это будет хлопотно для ваших клиентов, просто иметь дополнительные пиратские копии вашего программного обеспечения. Вы должны определить, какой льготный период не будет беспокоить ваших законных клиентов, и, надеюсь, даст вам защиту, к которой вы стремитесь.
Дополнительная защита может быть достигнута путем проверки правильности установки часов виртуальной машины. Это предотвратит приведенный выше подход к пиратству.
Другое соображение заключается в том, что опытный пользователь может написать свой собственный сервер лицензирования для связи с экземплярами виртуальной машины и сказать им «все хорошо», поэтому шифрование связи может помочь предотвратить это. Как далеко вы хотите зайти, зависит от того, насколько, по вашему мнению, пиратство может быть проблемой для ваших клиентов. В конце концов, вы не сможете остановить настоящих пиратов, у которых есть время, но вы можете сохранить честность честных пользователей.