У меня следующая проблема. Есть приложение на C#, есть комплект разработчика с USB-ключем, в котором аппаратно реализованы алгоритмы шифрования. Из С# с ним можно работать через dll. Нужно защитить приложение от копирования, чтобы оно не работало без ключа. Чтобы стоимость взлома превышала стоимость приложения (2000 $)
Поискал на разных форумах, но пока приемлимого ответа не нашел.
Если вставлять в разные места кода проверки ключа, то их элементарно найти и заменить на нужный результат проверки. Даже после обфускации.
Видел советы — подписать сборку с помощью strong name. Но так и не понял пока, чем это может помочь.
Еще видел совет — генерировать часть IL-кода на лету. Идея интересная. Тогда его можно хранить в зашифрованном файле и при выполнении приложения расшифровывать, компилировать и запускать. Но тогда можно отследить какой IL-код получается при расшифровке и заменить вызов шифровнанного кода из файла — самим кодом. Можно ли как-то от этого защититься?
Пока самый подходящий вариант — вынести какой-то критичный кусок в отдельное приложение на C++ и его защитить по-нормальному. Проблема — сложно найти такой кусок, особенно учитывая, что работа с ключом медленная.