【问题标题】:Get fileSize of info.plist to prevent piracy获取info.plist的fileSize,防止盗版
【发布时间】:2010-10-28 12:55:09
【问题描述】:

我正在尝试在我的应用中添加反盗版代码。之前的答案(由于我的会员身份而无法链接到 - 糟透了)可以很容易地反驳,因为可以使用十六进制编辑器在二进制文件中查找和替换“SignerIdentity”字符串。

相反,检查 info.plist 文件的 fileSize 并将其与参考值进行比较听起来更可靠(因为在破解应用程序时 info.plist 会到处修改)。我该怎么做?我尝试了以下方法,但它记录了 0。

NSBundle *bundle = [NSBundle mainBundle];
NSDictionary *mainDictionary = [bundle infoDictionary];
NSLog(@"%d", [mainDictionary fileSize]);

【问题讨论】:

    标签: ios iphone plist nsbundle piracy-protection


    【解决方案1】:

    您可以通过应用 ROT13 或类似的简单模糊算法来防止 noobish 破解者在您的代码中找到对“SignerIdentity”的引用 http://en.wikipedia.org/wiki/ROT13

    应用 ROT13 后,“SignerIdentity”将变为“FvtareVqragvgl”。

    无论如何,您的问题的答案(如何获得 Info.plist 文件的大小):

    NSBundle *bundle = [NSBundle mainBundle];
    NSString* bundlePath = [bundle bundlePath];
    
    NSFileManager *fileManager = [NSFileManager defaultManager];
    
    NSString* path = [NSString stringWithFormat:@"%@/Info.plist", bundlePath ];
    
    NSDictionary *fileAttributes = [fileManager attributesOfItemAtPath:path 
                                                                 error:NULL];
    
    if (fileAttributes != nil) {
        NSNumber *fileSize;
    
        if (fileSize = [fileAttributes objectForKey:NSFileSize]) {
            NSLog(@"File size: %qi\n", [fileSize unsignedLongLongValue]);
        }           
    }
    

    另外请记住,Xcode 项目目录中的Info.plist 的大小(以字节为单位)和捆绑包中的Info.plist 可能不同。您可能想构建一次游戏,然后查看<your app bundle.app>/Info.plist 的大小,然后更新您的反盗版代码。

    【讨论】:

    • 问题是海盗可以将“FvtareVqragvgl”字符串更改为其他内容,这将检查 info.plist 中的另一个键.. 这可能为空。 filesize 属性与 int 进行比较,因此在二进制文件中查找它确实没有简单的方法。
    • 更新:现在 // NSDictionary *fileAttributes = [fileManager fileAttributesAtPath:pathP traverseLink:YES];已弃用...使用:-> ... NSDictionary *fileAttributes = [fileManager attributesOfItemAtPath:pathP error:NULL]; ...改为
    【解决方案2】:

    正如这里所说的Determining if an iPhone is Jail broken Programmatically,看起来通过 install0us 安装的一些最新破解的应用程序的 info.plist 没有修改。 (至少 info.plist 不包含任何签名者身份密钥)。 在这种情况下我们如何检测到裂缝?

    【讨论】:

    • 您是否尝试比较两个 info.plist 文件的大小?
    • 不,但是我可以对 iPhone 用户从应用商店下载的 info.plist 的大小做出任何假设吗?当我将它上传到appStore(通过iTunes Connect)时,它会和那个一样吗?这个文件有时在 xml 中,有时作为二进制文件,这一事实并不能让我清楚地了解这个文件的整个流程:/
    • 文件大小将是您的发行版构建的 .app 包中的文件大小。在您提交应用程序后,我不确定 Apple 是否会更改 info.plist 文件中的某些内容...
    【解决方案3】:

    该代码仍有许多优点:

    字符串 Info.plist 很容易找到。 NSFileSize 也很可疑....

    【讨论】:

      【解决方案4】:

      我从来没有为 iPhone 编程过,但你不能只取该文件的哈希值并将其与参考值进行比较,可能会加盐哈希值以防止有人将参考哈希值更改为新的吗?

      【讨论】:

        猜你喜欢
        • 2016-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多