В любом случае это не может быть взломано :) Есть много различных защит, которые вы можете использовать, но это всегда сводится к навыку обратного инженера.
Довольно стандартная техника - это упаковывать ваше программное обеспечение с помощью упаковщика, например asprotect, armadillo, aspack, upx, существует множество вариантов. Из-за этого им будет сложно зашифровать ваше программное обеспечение, отладить и разобрать его.
Если вы хотите использовать последовательную защиту, вы можете сделать множество вещей. Один из моих любимых - использовать ключ для динамического дешифрования предварительно зашифрованных блоков кода и их выполнения. Это называется полиморфизмом, и наряду с самоизменяющимся кодом это может быть довольно неприятной защитой.
Если вы хотите, чтобы все было действительно просто, вы можете просто создать защиту xor, где constant_serial XOR constant == another_constant. Используя константу XOR another_constant, вы можете просто создать ключ.
Действительно куча вещей, которые можно здесь сделать, это всегда вопрос вкуса и знаний.