今天項目中要用到檢查iPhone是否越獄的方法。
Umeng統計的Mobclick.h里面已經包含了越獄檢測的代碼,可以直接使用
/*方法名: * isJailbroken *介紹: * 類方法,判斷設備是否越獄,判斷方法根據 apt和Cydia.app的path來判斷 *參數說明: * 無 * * */ #pragma mark utils api // 類方法,判斷當前設備是否已經越獄 + (BOOL)isJailbroken; // 類方法,判斷你的App是否被破解 + (BOOL)isPirated;
apt和Cydia的方式來進行判斷的,沒看見源碼
然后再介紹兩種方法來查看是否已經越獄,知其然知其所以然、、、
1. apt
- (BOOL) hasAPT
{
return [[NSFileManager defaultManager] fileExistsAtPath:@"/private/var/lib/apt/"];
}
2. system
- (BOOL) successCallSystem
{
return (system("ls") == 0) ? YES : NO;
}
3.
static
const
char
* jailbreak_apps[] =
{
"/Applications/Cydia.app"
,
"/Applications/limera1n.app"
,
"/Applications/greenpois0n.app"
,
"/Applications/blackra1n.app"
,
"/Applications/blacksn0w.app"
,
"/Applications/redsn0w.app"
,
"/Applications/Absinthe.app"
,
NULL
,
};
- (
BOOL
) isJailBroken
{
// Now check for known jailbreak apps. If we encounter one, the device is jailbroken.
for
(
int
i = 0; jailbreak_apps[i] !=
NULL
; ++i)
{
if
([[
NSFileManager
defaultManager] fileExistsAtPath:[
NSString
stringWithUTF8String:jailbreak_apps[i]]])
{
//NSLog(@"isjailbroken: %s", jailbreak_apps[i]);
return
YES
;
}
}
// TODO: Add more checks? This is an arms-race we're bound to lose.
return
NO
;
}
@interface UIDevice (Helper)
- (BOOL)isJailbroken;
@end
@implementation UIDevice (Helper)
- (BOOL)isJailbroken {
BOOL jailbroken = NO;
NSString *cydiaPath = @"/Applications/Cydia.app";
NSString *aptPath = @"/private/var/lib/apt/";
if ([[NSFileManager defaultManager] fileExistsAtPath:cydiaPath]) {
jailbroken = YES;
}
if ([[NSFileManager defaultManager] fileExistsAtPath:aptPath]) {
jailbroken = YES;
}
return jailbroken;
}
@end
僅供參考、、、