Сначала научитесь "внимательно" читать. Я говорил про
алгоритм сжатия "неизвестный (известный)
алгоритм сжатия", а
не шифрования. Акцентирую вашу "невнимательность" на то, что алгоритм сжатия можно рассматривать с точки зрения алгоритма шифрования, с той позиции, что и тот и другой превращают код в кашу.
А в протекторе, в нормальном протекторе
Далее я много раз упоминал
"в простейшем" протекторе. Так что не надо по ходу поднятия своей информационной осведомленности перекручивать мои слова.
Что мне мешает разреверсить алгоритм упаковки программы и распаковать её? Ничего. И...
А "И" заключается в том, что протектор (неважно какой: примитивный, простой, нормальный, крутой) выполнил свою работу.
Защитил файл от модификации. Затребовав от человека решившего модифицировать защищенную программу неких знаний "разреверсить алгоритм упаковки программы и распаковать её" и тем самым потратить некое время на её модификацию.
А живому человеку это не составит проблемы.
Ну, да, а опытному крэкеру не состваит проблемы разобраться с "нормальным протектором". (Невнимательным: из чего следует, что простые протекторы защищают от антивирусов и людей не знакомых с ассемблером/IDA Pro/OllyDbg, крутые от опытных крекеров, а от "опытно-продвинутых" крекеров не защищает ничего).
Есть один способ защитить файл от изменения, но для этого нужна аппаратная поддержка на уровне процессора (и соответственно некая программная), причем для этого не нужны никакие крипторы и прочая лабуда. Все что нужно это просто подписать файл и при каждой загрузке проверять его подпись. К сожалению на x86 архитектуре сейчас такое не реализуемо. Но подобный принцип уже реализован начиная с Samsung Galaxy SIII. Называется эта штука ARM TrustZone. (Невнимательным: реализовано на ARM процессорах).