2009-05-24 37 views
8

我試圖在我的應用中放入反盜版代碼。之前對此的回答(由於我的成員狀態,我無法鏈接到 - 很糟糕)可以輕鬆應對,因爲可以使用十六進制編輯器查找並替換二進制文件中的「SignerIdentity」字符串。獲取file.plist的fileSize以防止盜版

相反,檢查info.plist文件的fileSize並將其與參考值進行比較聽起來更加可靠(因爲在破解應用程序時info.plist在這裏和那裏得到修改)。我會怎麼做?我嘗試以下,但它記錄爲0。

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

回答

7

您可能會阻止noobish餅乾從發現代碼中的引用「SignerIdentity」通過應用ROT13或類似的簡單遮蔽算法 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]); 
    }   
} 

還要記住的是,Info.plist在Xcode項目的大小(以字節爲單位)目錄和該軟件包內的Info.plist可能有所不同。您可能想要構建遊戲一次,然後查看<your app bundle.app>/Info.plist的大小,然後更新您的防盜代碼。

+0

事情是海盜可以改變「FvtareVqragvgl」字符串到其他東西,這將檢查info.plist中的另一個關鍵字,可能會爲空。 filesize屬性與int進行比較,因此在二進制文件中找不到它。 – samvermette 2009-05-24 17:38:43

+0

謝謝你的答案! – samvermette 2009-05-26 05:24:26

5

我從來沒有爲iPhone設計過程,但是不能只是將該文件的哈希值與參考文件進行比較,可能會對哈希值進行醃製以防止某些人將參考哈希值更改爲新值?

2

該代碼還有很多贈品:

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