Одно из предложений - использовать какой-то запущенный веб-сервис, конечно, для этого вам нужен главный сервер. На этом сервере вы можете иметь данные некоторых ваших клиентских серверов (IP авторизованных серверов, идентификаторы ЦП и материнской платы и другие важные данные).
Этот веб-сервис должен запускать важную логику программы и возвращать значение авторизованным серверам. Если данные авторизации, отправленные клиентом, не совпадают, сервер не выполнит процедуру.
Конечно, я предполагаю, что эта сторона логики включена в DLL в приложении, а не в простом коде.