Если собираетесь хорошо защитить своё ПО, то надо использовать ключи с возможностью исполнения кода внутри ключа.
Но есть несколько нюансов.
1) Не из каждой программы можно что-то вынести в ключ.
2) Ключи с возможностью выполнения кода сделаны не на Pentium процессорах. Поэтому код в них выполняется не быстро.
3) Необходимы некоторые навыки разработки защиты под такие ключи, потому как самая малая ошибка может скомпрометировать всю вашу защиту.
VMProtect SE — очень хорошее решение, так как даёт неподготовленному разработчику быструю защиту высокого уровня с возможностью дальнейшего расширения защиты путем удаленного обновления пользовательских ключей.