Наиболее эффективным оказывается программно-технический метод. На этапе разработки в программу внедряется фрагмент кода, проверяющий условия её использования, и блокирующий её работу, в случае не соответствия условий лицензии.
В настоящее время существует несколько классов программно-технической защиты. Но каждый из них имеет свои недостатки, например один серийный номер может использоваться на нескольких компьютерах.
Для наиболее эффективной защиты программного продукта целесообразно использовать комбинацию нескольких классов. Одна из самых надёжных комбинаций - объединения криптографической защиты исполняемого кода и внешнего аппаратного устройства, выполняющего функции электронного ключа и внешнего вычислительного модуля, выполняющего часть вычислений, необходимых программному продукту. Данный способ не подвержен типичным атакам на программное обеспечение, таким как дезассемблирование, отладка, анализ дампов памяти, в силу защиты исполняемого кода стойкими криптографическими алгоритмами [2]. А перехват информации, передаваемых между компьютером и ключом не приносит желаемого результата для злоумышленника, так как ключ выполняет вычислительные функции.