Щоб розширити коментарі Yonel та Benjie вище:
1) Метод Лендона Фуллера спирається на перевірку шифрування, зв’язаний вище за допомогою yonel, здається єдиним, що все ще не переможений автоматизованими інструментами злому. Я б не надто хвилювався через те, що Apple скоро змінить стан заголовка LC_ENCRYPTION_INFO. Здається, це має деякі непередбачувані наслідки для зламаних телефонів (навіть коли користувач придбав копію ...)
У будь-якому разі, я не вживатиму будь-яких необдуманих дій проти користувача на основі цього коду ...
2) Доповнити коментар Бенджі повторно. затуманення (абсолютна необхідність при роботі з будь-якими рядковими значеннями у вашому коді проти піратства): подібним, але, можливо, ще простішим способом є завжди перевіряти солону хеш- версію значення, яке ви шукаєте. Наприклад (навіть незважаючи на те, що ця перевірка вже не ефективна), ви б перевірили ім'я ключа кожної MainBundle як md5 (keyName + "деяка секретна сіль") проти відповідної константи ... Досить базовий, але впевнений, що переможе будь-яку спробу знайти рядок.
Звичайно, для цього потрібно мати можливість опосередковано запитувати значення, яке потрібно порівняти (наприклад, переглядаючи масив, що його містить). Але це найчастіше так.