iOS 判断手机是否越狱


一般来说,手机越狱后会增加以下文件



/Applications/Cydia.app



/Library/MobileSubstrate/MobileSubstrate.dylib



/bin/bash



/usr/sbin/sshd



/etc/apt



判断这些文件是否存在,只要有存在的,就可以认为手机已经越狱了。


NSArray *jailbreak_tool_paths = @[

    @"/Applications/Cydia.app",

    @"/Library/MobileSubstrate/MobileSubstrate.dylib",

    @"/bin/bash", 

    @"/usr/sbin/sshd",

    @"/etc/apt"

];



- (BOOL)isJailBreak {

    for (int i=0; i<jailbreak_tool_paths.count; i++) {

        if ([[NSFileManager defaultManager] fileExistsAtPath:jailbreak_tool_paths[i]]) {

            NSLog(@"The device is jail broken!");

            return YES;

        }

    }

    NSLog(@"The device is NOT jail broken!");

    return NO;

}



2.根据是否能打开cydia判断


- (BOOL)isJailBreak {

    if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"cydia://"]]) {

        NSLog(@"The device is jail broken!");

        return YES;

    }

    NSLog(@"The device is NOT jail broken!");

    return NO;

}



3.根据是否能获取所有应用的名称判断

没有越狱的设备是没有读取所有应用名称的权限的。


- (BOOL)isJailBreak {

    if ([[NSFileManager defaultManager] fileExistsAtPath:@"User/Applications/"]) {

        NSLog(@"The device is jail broken!");

        NSArray *appList = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:@"User/Applications/" error:nil];

        NSLog(@"appList = %@", appList);

        return YES;

    }

    NSLog(@"The device is NOT jail broken!");

    return NO;

}



4.根据使用stat方法来判断cydia是否存在来判断

这个方法的思路还是通过判定cydia应用,但方法是使用stat函数,同时会判断是否有注入动态库。


`int checkInject() {     int ret;     Dl_info dylib_info;     int (*func_stat)(const char*, struct stat*) = stat;     char *dylib_name = "/usr/lib/system/libsystem_kernel.dylib";     if ((ret = dladdr(func_stat, &dylib_info)) && strncmp(dylib_info.dli_fname, dylib_name, strlen(dylib_name))) {         return 0;     }     return 1; }  int checkCydia() {     struct stat stat_info;     if (!checkInject()) {         if (0 == stat("/Applications/Cydia.app", &stat_info)) {             return 1;         }     } else {         return 1;     }     return 0; }`



5.根据读取的环境变量是否有值判断

DYLD_INSERT_LIBRARIES环境变量在非越狱的设备上应该是空的,而越狱的设备基本上都会有Library/MobileSubstrate/MobileSubstrate.dylib


char* printEnv(void) {

    charchar *env = getenv("DYLD_INSERT_LIBRARIES");

    NSLog(@"%s", env);

    return env;

}



- (BOOL)isJailBreak {

    if (printEnv()) {

        NSLog(@"The device is jail broken!");

        return YES;

    }

    NSLog(@"The device is NOT jail broken!");

    return NO;

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值