Чтобы действительно шифровать скомпилированный код, вероятно, больше проблем, чем того стоит. Вы должны изолировать код, который будет дешифрован в динамическую библиотеку, и загрузить библиотеку вручную после ее дешифрования в памяти. Динамические библиотеки и другие методы, которые вы могли бы использовать для изменения кода во время выполнения, не одобряются Apple при использовании с iOS.
С Objective-C вы по существу поставляете с заголовками в свой код. Это значительно упрощает поиск в приложении. Все, что вы можете сделать на C, где символы могут быть удалены, будет немного сложнее читать. Вы также можете использовать #define, чтобы немного запутать имена классов и методов. Это нигде не приближается к шифрованию, но гораздо проще реализовать и с меньшей вероятностью ввести путаные ошибки.
#define MyNicelyNamedClass somegarblegarble
#define myNicelyNamedMethod othergarblegarble
@interface MyNicelyNamedClass
-(id) myNicelyNamedMethod;
@end
Это относительно безболезненный способ для разработчика сделать код Objective-C менее очевидным для других. Это примерно так же эффективно, как обфускация javascript, то есть это еще одно небольшое препятствие, которое будет отговаривать многих случайных злоумышленников.
Если вы выбираете значащие, но вводящие в заблуждение имена вместо прямого мусора, вы можете даже обмануть кого-то в расходовании часов, пробивая неправильный код. Не то, чтобы вы когда-либо знали, но это приятная мысль.
как это будет работать, если метод имеет аргументы? – Pripyat
... или если вы сильно используете KVO & KVC? ... или вы используете интерфейс Builder? ... или если вы используете какой-либо другой серьезный механизм самоанализа? ... и не забудьте отменить обфускацию в ваших журналах сбоев. – bbum