【问题标题】:Encryption of contents in compiled iOS app ( IPA )已编译的 iOS 应用程序 (IPA) 中的内容加密
【发布时间】:2011-06-02 06:38:03
【问题描述】:

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

【问题讨论】:

    标签: ios encryption ipa


    【解决方案1】:

    这个答案提到应用程序在进入用户设备时已经加密: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];
    

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

    要加密/解密*.strings 文件,您应该以某种方式加密密钥和值字符串(可能是一种返回十六进制或任何字母数字字符的方式),并且当您想要访问给定值时,说@ 987654327@,这样做:

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

    【讨论】:

    • 明确的答案。应用内解密肯定会增加手机CPU使用率的负载,但我真的很想保护我们的内容。你能推荐一种低计算能力的方法来加密和解密媒体内容吗?
    • *.strings 文件怎么样,我想提取它们,但似乎有编码问题
    • @Muhaye 我已更新我的答案以包含有关加密/解密 *.strings 文件的信息。
    • @darvids0n thx,但我的问题不是加密而不是(我认为)编码问题。您可以通过在 *.ipa 文件中打开 Localization.strings 来自行查看
    • 为了记录,我来到这里是因为我在我的 ipa 文件上运行字符串(企业部署,而不是通过 App Store),我找不到我的 SuperSecretEncryptionKey。无论如何我都在考虑通过代码构建字符串,但我很好奇为什么我找不到我的密钥。
    猜你喜欢
    • 2014-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多