Следует ли шифровать/запутывать код поставщика HASP?
-
27-12-2019 - |
Вопрос
Это касается ключей HASP SafeNet/Aladdin Sentinel.Я разместил сообщение на их сайте, но на случай, если кто-то еще знает ответ или найдет ответ полезным, я тоже публикую здесь.
Согласно документам, предоставленным SafeNet в «Руководстве по защите и лицензированию программного обеспечения.pdf», мы должны хранить наш код поставщика в секрете, верно?
Что ж, если я создам образец, представленный в «\Samples untime\csharp», затем защитим приложение с помощью Envelope, а затем декомпилируем приложение Enveloped в JetBrains dotPeek, я очень легко увижу там строку кода поставщика.Похоже, что Envelope не запутывает константные строки.Или, может быть, это строки уровня класса, я не знаю.
Рекомендуемый ли это способ использования кода поставщика?Вроде не очень секретно.Если я помещу строку кода поставщика во временную переменную в функции, она запутается.Так ли это должно быть?Если да, то разве пример кода не должен это отражать?
Спасибо.
Решение
Мы заметили то же самое.Причина const
строки не запутаны, вероятно, из-за того, что константная переменная является константа времени компиляции, что позволяет компилятору заменять ссылки на const
переменная с постоянным значением во время компиляции.Так что в принципе нет const
строковое поле, которое нужно запутать к моменту запуска процесса конвертирования.(Это не совсем так – определение const
сохраняется в IL, но только для целей документации;на него не ссылается какой-либо код.)
Мы справились с этим, используя static
readonly
строки, инициализированные в static
конструктор.При этом строковые значения сохраняются как константы времени выполнения, что позволяет обволакивающему процессу правильно обращаться к ним для обфускации.(Это проверяется декомпиляцией сборки, как вы упомянули.)