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

标签 ios encryption ipa

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

最佳答案

此答案提到应用程序在进入用户设备时已经加密:Does Apple modify iOS application executables on apps submitted to the App Store?

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

针对您的评论,我过去使用的是 CommonCrypto。您可以使用 this crypto library作为起点。

上面的简单用法示例:

NSError *error;
NSMutableData *encryptedData = [NSMutableData dataWithContentsOfFile:pathToEncryptedFile];
NSData *decryptedData = [RNDecryptor decryptData:encryptedData
                                withPassword:@"SuperSecretDecryptionKey"
                                       error:&error];
UIImage *decryptedImage = [UIImage imageWithData:decryptedData];

此处重要提示:如果有人要在您的 .app 上运行 strings 实用程序(在越狱的 iPhone 上,甚至在 iPhone 上)他们可以通过 USB 访问文件系统,他们将获得您应用中声明的所有字符串的列表。这包括“SuperSecretDecryptionKey”。因此,您可能希望使用整数、 float 或其他常量来即时生成字符串解密 key ,或者确保用于解密的字符串与普通系统字符串完全相同,因此没有人怀疑它是真正的 key 。在这种情况下,通过模糊实现安全性是有利的。

要加密/解密 *.strings 文件,您应该以某种方式(可能是返回十六进制或任何字母数字字符的方式)加密 key 和值字符串,并且在您需要时访问给定的值,例如 LicenceNumber,执行此操作:

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];

关于ios - 已编译的 iOS 应用程序 ( IPA ) 中的内容加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6211274/

相关文章:

ios - 由于核心数据 Segue 传输导致应用程序崩溃

ios - 在蓝色导航栏中的 MFMessageComposeViewController 上取消不可见

ios - 如果这是在 Objective C 中使用自定义字符串属性的正确方法,为什么我不能提取正确的数值?

使用公钥/私钥加密 iOS 应用程序数据

ios - Firebase - iPhone X 上的 iOS 应用安装不起作用

android - 将我的 APK 和 API 文件提供给我的客户是否安全?

ios - 在屏幕上移动八个节点(在随机起始位置/间隔)?

android - 如何防止我的 Android 应用程序被嗅探?

java - crypto.pbkdf2 (node.js) 和 PBEKeySpec 之间 key 长度的差异

ios - 如何使用命令行在通过 USB 连接的手机上检查 iOS 应用程序的捆绑版本?