Эта статья является хорошим чтением, которое хорошо иллюстрирует, почему герметичная защита вашего кода просто невозможна. Вы можете сделать это тяжелее, очень трудно, даже оставаясь как можно более низким уровнем, например, скомпилируйте ваш код до нативных инструкций, которые (чисто) не могут быть представлены с использованием конструкций обычного языка.
Но вы должны иметь в виду, что в любом случае в конечном итоге ваши зашифрованные данные должны быть расшифрованы с использованием некоторого ключа, и этот ключ будет, даже если кратко, но важно то, что он окажется в памяти. Нет никакого способа обойти это с обычными операционными системами и оборудованием. Так что, как хакер, вы всегда можете вернуться к извлечению ключа из памяти и продолжить свой путь в обратном направлении. Не то, на что способны обычные пользователи, но это, безусловно, возможно.