這篇的討論是用幾個常見 JB 過的行為來偵測是不是 JB 了,而沒辦法提供一個 100% 肯定的解決方法。首先我們來看一下 JB 過的 iOS 會有那幾個特色?
- 會有 Cyndia 這個 App
- 會需要背景執行
info.plist 的SignerIdentity會被變動
如何檢查此手機是不是安裝了 Cydia
NSString *filePath = @"/Applications/Cydia.app";一般來說 iOS 現在是多工,方便切換程式而不是像 Mac 或 PC 作業系統的背景執行,通常 JB 後會把背景執行這個功能打開就會用到 fork() 這個指令,所以檢查有沒有背景執行的功能(fork())就可以知道有沒有 JB。
if ([[NSFileManager defaultManager] fileExistsAtPath:filePath])
{
// 檢查是不是有 Cydia 這個程式
}
int result = fork();
if (result > 0) {
NSLog(@"JBed");
}else{
NSLog(@"NO JB");
}
以上三種方法提供給大家參考用。但我們寫 App 的人要還要再想清楚,JB 的人是不是有可能也會花錢買我們的 App。此時第三個方法好像比較可以保護我們自己的資產。如果提到破解 App 的問題,一開始 App 免費,然後用 in app Purchase 也許也可以是另一條保護自己 App 的方法。歡迎大家提出來討論。NSBundle *bundle = [NSBundle mainBundle];
NSDictionary *info = [bundle infoDictionary];
if ([info objectForKey: @"SignerIdentity"] != nil)
{
// 此程式可能被破解
}