Подтвердить что ты не робот

IPhone/iPad Обфускация кода приложения - это возможно? Стоило того?

Я изучил довольно много, как на SO, так и на google-ing повсюду, но я не могу найти прямой ответ в отношении обфускации кода для приложений iPhone/iPad, написанных на Objective-C.

Мои вопросы таковы:

  • Есть ли способ сделать это? Если да, то как?
  • Стоит ли это?
  • Является ли Apple разрешенным или имеет проблемы с ним, когда приложение отправляется им?
4b9b3361

Ответ 1

Похоже, что для обфускатора кода для Objective-C нет. Но пусть на мгновение предположим, что он существует.

Apple, вероятно, не откажется от запущенного приложения, если оно не сработает. Главный вопрос: в чем смысл обфускации? Обычно вы хотите обфускать код, чтобы защитить свои знания, например, если ваша программа использует защиту от копирования, которую вы хотите усложнить для потенциального взломщика, или если вы используете какой-то продвинутый алгоритм, вы не хотите, чтобы бизнес-конкуренты были способный декомпилировать его.

Защита от копирования уже позаботилась о iOS. Хотя через jailbreaking нормальное приложение можно скопировать и запустить, я бы сказал, что фактическое число пользователей, которые делают это, довольно низкое (по крайней мере, намного ниже, чем на обычных компьютерах, таких как ПК и Mac). Ожидаете ли вы пиратства такой большой проблемы, что вам нужно запутать?

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

Вы также можете прочитать статью Obfuscating Cocoa.

Вернемся к тому, что, похоже, нет обфускатора: что вы можете сделать, так это трюк: скажем, у вас есть заголовок вроде этого:

@interface MyClass : NSObject {
}

- (void)myMethod;

Вы можете сделать дешевую обфускацию следующим образом:

#ifndef DEBUG
#define MyClass aqwe
#define myMethod oikl
#endif

@interface MyClass : NSObject {
}

- (void)myMethod;

Таким образом, вы можете использовать значимые символы в своем источнике, но компилятор превратит его в "мусор", когда не компилируется для отладки.

Ответ 2

  • Да, вы можете взглянуть на EnsureIT для Apple iOS или Защита кода Contaxiom
  • Это зависит. Безопасность обычно вводит сложность, вы должны балансировать ее между удобством использования.
  • Apple не должна иметь с ней никаких проблем (исправьте меня, если я ошибаюсь), и у меня лично есть несколько приложений, которые используют обфускатор кода.

Ответ 3

В дополнение к более ранним ответам теперь есть несколько сторонних инструментов, которые предлагают некоторую степень защиты от обфускации и целостности, включая: -

  • Arxan,
  • Метафорический,
  • Cryptanium

Они различаются по возможностям и включают: -

  • Обфускация потока управления, например. Потоки команд ARM искажены избыточными инструкциями, чтобы скрыть исходную цель кода,
  • Переименование класса и метода - переименовывает ваши методы и классы в бессмысленные имена, хотя вы должны быть осторожны, когда это используется, так как вы можете легко сломать свое приложение, потому что среда выполнения Objective-C ожидает найти определенные имена,
  • Строковое шифрование - все статические строки в приложении зашифрованы, а код вставлен для дешифрования строк непосредственно перед использованием, чтобы сделать статический анализ сложнее
  • Анти-отладочный код вставляется для разрыва обычных отладчиков (не всегда успешно),
  • Anti-tamper - обычно создает сеть контрольных сумм, которые защищают двоичный код от модификации,
  • Objective-C защита от выполнения - обычно проверяет зарегистрированные способы реализации obj-c, чтобы убедиться, что они находятся в приложении и не были "swizzled".

Все эти инструменты очень дороги и не без проблем, поэтому вам действительно нужно приложение, которое требует высокой степени целостности, чтобы рассмотреть их, например. банковское дело или где DRM очень важен.

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

Ответ 4

Исполняемый файл приложения уже зашифрован Apple, а сегмент исполняемого кода песочницы приложений не может быть записан, поэтому вы не можете выполнять дополнительное шифрование, требующее модификации кода во время исполнения. И переход оптимизатора компилятора Objective C/C уже создает нечто очень отличное от исходного исходного кода. Использование большего количества C и менее Objective C покажет меньше имен ваших функций, так как имена методов встроены в видимый простой текст, но имена функций C - нет. Таким образом, любой код типа секретной секретности, вероятно, должен быть закодирован в простой C и скомпилирован с оптимизатором, который полностью перевернулся. Вы могли бы запутать любой webKit Javascript, встроенный в комплект приложения, или любой другой встроенный код VM (пока интерпретируемый код не загружается).

Ответ 5

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