Защита Objective-C Framework - PullRequest
       3

Защита Objective-C Framework

0 голосов
/ 21 февраля 2011

Я разработал ряд фреймворков, которые я хочу поставлять вместе с моим приложением.Я не хочу, чтобы другие могли использовать фреймворки, но я видел такие утилиты, как class-dump, которые могут легко вернуть заголовки.

Мой вопрос: как я могу сделать свои фреймворки болеебезопасности?Я знаю, что они никогда не будут на 100% безопасны, но есть ли хорошие общие советы, которым нужно следовать?

Спасибо!

Ответы [ 2 ]

18 голосов
/ 21 февраля 2011

Короче, не беспокойся. Сама природа среды выполнения Objective C заключается в том, что доступны значительные метаданные.

Реальность такова, что кто-то очень редко может взять вашу платформу и попытаться внедрить / использовать ее.

Обратите внимание, что обфускаторы кода не очень хорошо работают; есть еще немало метаданных, которые должны быть представлены. Вы можете пойти по этому пути, но - как правило - это значительно усложняет анализ отладки / сбоев без фактического решения реальной проблемы.

<Ч />

Я вижу, что другие указали вам путь запутывания (хотя я подозреваю, что ответ #define someSelector mmmrrrggglll на самом деле не был особо проверен).

Некоторые конкретные моменты, которые следует учитывать при переходе по этому пути (я уверен, что я пропустил многие):

  • если вы используете KVO / KVC, убедитесь, что вы запутываете все эти вызовы на addObserver:* и т.п.

  • если вы нацелены на Mac OS X, не забывайте и о привязках!

  • Файлы xib Interface Builder часто будут содержать ссылки на переменные экземпляра и / или свойства и / или методы. Не забывайте о них!

  • Все, что использует самоанализ во время выполнения, также нуждается в запутывании.

  • убедитесь, что вы ничего не скрываете, что системные фреймворки зависят; не хотел бы подкласс NSView, скажем, а затем запутать drawRect: или initWithFrame:.

  • В некоторых случаях Info.plist может ссылаться на имена классов и точки входа. Не связывайтесь с ними!

  • Кроме того, убедитесь, что каждое использование @selector () также правильно запутано; ничего подобного настройке NSTimer на запуск метода, которого больше не существует.

  • Убедитесь, что ваши планы запутывания также включают инженерные работы, необходимые для создания не-обфускатора для журналов сбоев.

  • Вы также захотите подумать, как вы собираетесь отлаживать рабочий бинарный файл; Предположим, ваши следы стека будут запутаны. b mmmrrrggglll ftw!

  • Если ваша инфраструктура имеет контроль экспорта символов, убедитесь, что также запутали их! Помните, что в некоторых случаях способы создания символов различаются в зависимости от архитектуры и компилятора.

4 голосов
/ 21 февраля 2011

Вы можете использовать статические библиотеки для связи с вашим приложением вместо фреймворков. Однако, если вы хотите поставлять фреймворки, вы можете использовать кодовые обфукаторы, чтобы сделать вашу библиотеку более сложной в использовании.

EDIT:

Этот пост SO содержит довольно простое описание основного обфускации.
Как можно зашифровать целевые классы C

На рынке есть продукты, которые делают это, но они дорогие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...