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

前端之家收集整理的这篇文章主要介绍了在编译的iOS应用程序(IPA)中加密内容前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_502_0@
由于IPA结构只是一个压缩文件,包含编译代码媒体内容,如图像&音频,我如何保护内容免受别人的窃取?是否有加密可以添加到IPA?

解决方法

该答案提到,应用程序在加载到用户的设备上时已经被加密: Does Apple modify iOS application executables on apps submitted to the App Store?

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

为了回应你的评论,我使用的是CommonCrypto.您需要#import< CommonCrypto / CommonCryptor.h>,我用作我的起点的实现是this category on NSMutableData.

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

NSMutableData *imageData = [NSMutableData dataWithContentsOfFile:pathToEncryptedFile];
[imageData decryptWithKey:@"SuperSecretDecryptionKey"];
UIImage *decryptedImage = [UIImage imageWithData:imageData];

重要的注意事项:如果有人要在你的.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"];

猜你在找的iOS相关文章