8

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

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

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

4 回答 4

7

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

应用 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]);
    }           
}

还要记住,Info.plistXcode 项目目录和Info.plist包内部的大小(以字节为单位)可能不同。您可能希望构建一次游戏,然后查看大小,<your app bundle.app>/Info.plist然后更新您的反盗版代码。

于 2009-05-24T13:46:57.830 回答
5

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

于 2009-05-24T13:52:02.297 回答
2

该代码仍然有很多赠品:

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

于 2009-09-19T22:47:29.313 回答
2

如这里所说,以编程方式确定 iPhone 是否越狱,看起来通过 install0us 安装的一些最新破解的应用程序没有修改其 info.plist。(至少 info.plist 不包含任何签名者身份密钥)。在这种情况下,我们如何检测到裂缝?

于 2010-01-11T10:21:48.267 回答