我正在尝试在我的应用中添加反盗版代码。由于可以使用十六进制编辑器在二进制文件中查找和替换“SignerIdentity”字符串,因此可以轻松地解决之前对此的回答(由于我的成员状态而无法链接)。
相反,检查info.plist文件的fileSize并将其与参考值进行比较听起来更加可靠(因为在破解应用程序时,info.plist会在这里和那里被修改)。我该怎么办?我尝试了以下但它记录了0。
NSBundle *bundle = [NSBundle mainBundle];
NSDictionary *mainDictionary = [bundle infoDictionary];
NSLog(@"%d", [mainDictionary fileSize]);
答案 0 :(得分:7)
您可以通过应用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
的大小,然后更新您的反盗版代码。
答案 1 :(得分:5)
我从来没有为iPhone编程,但是你不能只拿一个该文件的哈希值并将它与参考文件进行比较,可能会使哈希值变咸,以防止有人只是将参考哈希值更改为新的哈希值? / p>
答案 2 :(得分:2)
该代码仍有许多赠品:
字符串Info.plist很容易找到。 NSFileSize也非常可疑......
答案 3 :(得分:2)
正如Determining if an iPhone is Jail broken Programmatically所说,看起来像是通过install0us安装的一些最新破解的应用程序没有修改它们的info.plist。 (至少info.plist不包含任何signeridentity键)。 在这种情况下我们怎么能发现裂缝?