加密编译的iOS应用程序(IPA)中的内容

Rap*_*tor 10 encryption ios ipa

由于IPA结构只是一个包含已编译代码和媒体内容(如图像和音频)的压缩文件,我如何保护内容不被其他人提取和窃取?我可以在IPA中添加任何加密吗?

dar*_*s0n 17

这个答案提到应用程序在进入用户设备时已经加密了:Apple是否会修改提交到App Store的应用程序上的iOS应用程序可执行文件?

对不起,这只是应用程序二进制文件.其他媒体没有加密,不,没有办法加密.ipa.您可以尝试加密系统上的图像和其他媒体,提供一堆应用程序代码,以便在应用程序运行时解密这些资源,然后您的解密代码将成为加密应用程序二进制文件的一部分.您不能提交加密的IPA,它需要是直接从Xcode输出的文件.

在回复你的评论时,我使用的是CommonCrypto.你需要strings,我用作起点的实现是NSMutableData上的这个类别.

以上类别的简单用法示例:

NSError *error;
NSMutableData *encryptedData = [NSMutableData dataWithContentsOfFile:pathToEncryptedFile];
NSData *decryptedData = [RNDecryptor decryptData:encryptedData
                                withPassword:@"SuperSecretDecryptionKey"
                                       error:&error];
UIImage *decryptedImage = [UIImage imageWithData:decryptedData];
Run Code Online (Sandbox Code Playgroud)

重要说明:如果有人要在越狱的iPhone .app上运行该实用程序*.strings,或者甚至在iPhone上通过USB访问文件系统,他们将获得应用程序中声明的所有字符串的列表.这包括"SuperSecretDecryptionKey".因此,您可能希望使用整数,浮点或其他常量来动态生成字符串解密密钥,或者确保用于解密事物的字符串与普通系统字符串完全相同,因此没有人怀疑它是真正的钥匙.在这种情况下,通过默默无闻的安全性是有利的.

更新:你应该检查LicenceNumber这种事情,它是相当全面的.

要加密/解密strings文件,您应该以某种方式加密键和值字符串(可能是一个为您提供十六进制或任何字母数字字符的字符串),当您想要访问给定值时.app,请执行以下操作:

NSError *error;
NSData *unencryptedKey = [@"LicenceNumber"
                               dataUsingEncoding:NSUTF8StringEncoding];
NSData *encryptedKey = [RNEncryptor encryptData:unencryptedKey
                                withSettings:kRNCryptorAES256Settings
                                      password:@"SuperSecretEncryptionKey"
                                         error:&error]
NSData *encryptedValue = [[NSBundle mainBundle]
                                 localizedStringForKey:[NSString
                                  stringWithUTF8String:[encryptedKey bytes]]
                                 value:@"No licence"
                                 table:@"EncryptedStringsFile"];
NSData *decryptedValue = [RNDecryptor decryptData:encryptedValue
                                withPassword:@"SuperSecretDecryptionKey"
                                       error:&error];
Run Code Online (Sandbox Code Playgroud)