В этом ответе упоминается, что приложение уже зашифровано к тому времени, когда оно попадает на устройства ваших пользователей: Изменяет ли Apple исполняемые файлы приложения iOS в приложениях, представленных в App Store?
Извините, это только двоичный файл приложения. Другие носители не зашифрованы, и нет, нет способа зашифровать .ipa. Вы можете попробовать зашифровать ваши изображения и другие носители в вашей системе, предоставив кучу кода приложения для расшифровки этих ресурсов при запуске приложения, и тогда ваш код дешифрования станет частью двоичного кода зашифрованного приложения. Вы не можете отправить зашифрованный IPA, однако, это должен быть файл, напрямую выводимый из Xcode.
В ответ на ваш комментарий я использовал CommonCrypto. Вам нужно #import <CommonCrypto/CommonCryptor.h>
, и реализация, которую я использовал в качестве отправной точки, была этой категорией в NSMutableData .
Простой пример использования вышеуказанной категории:
NSMutableData *imageData = [NSMutableData dataWithContentsOfFile:pathToEncryptedFile];
[imageData decryptWithKey:@"SuperSecretDecryptionKey"];
UIImage *decryptedImage = [UIImage imageWithData:imageData];
ВАЖНОЕ ПРИМЕЧАНИЕ ЗДЕСЬ: ЕСЛИ кто-то должен был запустить утилиту strings
на вашем .app
на взломанном iphone или даже на iPhone, к которому у них есть доступ к файловой системе через USB, он получит список всех строк, объявленных в вашем приложении. Это включает в себя «SuperSecretDecryptionKey». Поэтому вы можете захотеть использовать целочисленную, с плавающей точкой или другую константу для генерации ключа расшифровки строки на лету, или убедитесь, что строка, используемая для дешифрования, точно такая же, как обычная системная строка, поэтому никто не подозревает, что это истинный ключ. Безопасность через неизвестность в этом случае выгодна.
Обновление: Вы должны проверить AQToolkit
для такого рода вещей, это довольно всеобъемлющее.
Чтобы зашифровать / расшифровать *.strings
файлы, вы должны каким-то образом зашифровать строки ключа и значения (например, те, которые возвращают вам шестнадцатеричное число или любые буквенно-цифровые символы), а когда вы хотите получить доступ к заданному значению, скажем LicenceNumber
, сделайте это:
NSMutableData *keyToRequest = [@"LicenceNumber"
dataUsingEncoding:NSUTF8StringEncoding];
[keyToRequest encryptWithKey:@"SuperSecretEncryptionKey"];
NSMutableData *valueToRequest = [[NSBundle mainBundle]
localizedStringForKey:[NSString
stringWithUTF8String:[keyToRequest bytes]]
value:@"No licence"
table:@"EncryptedStringsFile"];
[valueToRequest decryptWithKey:@"SuperSecretDecryptionKey"];