обфускация кода приложения для iPhone / iPad-возможно ли это? Стоит того?
Я исследовал совсем немного, как на SO, так и на google-ing повсюду, но я не могу найти прямой ответ в отношении запутывания кода для приложений iPhone / iPad, написанных в Objective-C.
мои вопросы:
- есть ли способ сделать это? Если да, то как?
- стоит ли?
- позволяет ли Apple это, или есть проблемы с ним, когда приложение представляется им?
5 ответов:
там не кажется код обфускатор для Objective-C. Но давайте предположим на мгновение, что один существует.
Apple, вероятно, не отклонит запутанное приложение, пока оно не рухнет. Главный вопрос: в чем смысл обфускации ? Обычно вы хотите запутать код, чтобы защитить свои знания, например, если ваша программа использует защиту от копирования, которую вы хотите сделать сложнее для потенциального взломщика, или если вы используете какой-то расширенный алгоритм, который вам не нужен бизнес-конкуренты, чтобы иметь возможность декомпилировать его.
защита от копирования уже позаботились на iOS. Хотя через джейлбрейк обычное приложение можно скопировать и запустить, я бы сказал, что фактическое количество пользователей, которые это делают, довольно низкое (по крайней мере, намного ниже, чем на "обычных" компьютерах, таких как ПК и Mac). Вы ожидаете, что пиратство такая большая проблема, что вам нужно запутать ?
Если у вас есть важные знания для защиты, то обфускация может быть целесообразным. Обфускация имеет свои недостатки: вы больше не можете отлаживать свое запутанное приложение. Отчеты о сбоях будут бесполезны.
вы также можете прочитать статью Запутывание Какао.
вернемся к тому, что, похоже, нет обфускатора: что вы можете сделать это трюк: скажем, у вас есть заголовок, как это:
@interface MyClass : NSObject { } - (void)myMethod;вы могли бы сделать дешевую путаницу, как это:
#ifndef DEBUG #define MyClass aqwe #define myMethod oikl #endif @interface MyClass : NSObject { } - (void)myMethod;таким образом, вы все еще можете использовать осмысленные символы в вашем источнике, но компилятор превратит его в "мусор", когда он не компилируется для отладки.
- Да, вы можете взглянуть на EnsureIT для Apple iOS или Защита Кода Contaxiom
- Это зависит. Безопасность обычно вводит сложность, вы должны сбалансировать ее между удобством использования.
- У Apple не должно быть никаких проблем с этим (поправьте меня, если я ошибаюсь), и у меня лично есть несколько приложений, которые используют обфускатор кода.
В дополнение к более ранним ответам теперь есть несколько сторонних инструментов, которые предлагают некоторую степень запутывания и защиты целостности, включая: -
- Arxan,
- Metaforic,
- Cryptanium
Они различаются по возможностям и включают в себя :-
- обфускация потока управления, например, потоки команд ARM искажаются избыточными инструкциями, чтобы попытаться скрыть первоначальную цель код
- переименование классов и методов-переименовывает ваши методы и классы в бессмысленные имена, хотя вы должны быть осторожны, где это используется, поскольку вы можете легко сломать свое приложение, потому что среда выполнения Objective-C ожидает найти определенные имена,
- string encryption - все статические строки в приложении шифруются и код вставляется для расшифровки строк непосредственно перед использованием, чтобы сделать статический анализ сложнее
- анти-отладка-код вставляется, чтобы сломать обычные отладчики (не всегда успешно),
- Anti-tamper-обычно строит сеть контрольных сумм, которые защищают двоичный код от модификации,
- Objective-C runtime protection-обычно проверяет Obj-C зарегистрированных реализаций метода, чтобы убедиться, что они находятся в приложении и не были "swizzled".
все эти инструменты очень дороги и не без проблем, так что вам действительно нужно приложение, которое требует высокой степени целостность для того, чтобы рассмотреть их, например, банковское дело или где DRM очень важно.
для этих типов приложений вам также понадобятся квалифицированные тестеры проникновения, чтобы убедиться, что ваше приложение не подвергается другим способам, поскольку эти инструменты часто так же хороши, как люди, использующие их, и есть еще другие уязвимости ОС, которые нужно будет смягчить, что инструменты не обращаются.
исполняемый файл приложения уже зашифрован Apple, а сегмент исполняемого кода песочницы приложения не может быть записан, поэтому вы не можете выполнить дополнительное шифрование, которое требует модификации кода ARM во время выполнения. И проход оптимизатора компилятора Objective C / C уже создает что-то очень отличное от исходного исходного кода. Использование большего количества C и менее объективного C покажет меньше ваших имен функций, так как имена методов встроены в видимый простой текст, но имена функций C не. Поэтому любой код типа коммерческой тайны, вероятно, должен быть закодирован на простом C и скомпилирован с оптимизатором, полностью перевернутым. Вы можете запутать любой Javascript webKit, встроенный в пакет приложений, или любой другой встроенный код виртуальной машины (если интерпретируемый код не загружен).
вероятно, не потому, что Objective-C компилируется в инструкции процессора, а не интерпретируется или компилируется в байтовый код, поэтому декомпиляция кода уже приведет к довольно неясным результатам. Обфускация-это то, что вам обычно нужно только тогда, когда вам нужно распространять источник вашего кода, например, на интерпретируемых языках, таких как JavaScript, чтобы он работал, даже если вы хотите, чтобы код оставался секретным.
Comments