iOS-越狱检测

当我们开发移动App时候,为了避免别人破壳等异常操作,所以我们要检测一下越狱设备

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// 常见越狱文件
char *printEnv(void){
char *env = getenv("DYLD_INSERT_LIBRARIES");
return env;
}

/** 当前设备是否越狱 */
- (BOOL)isDeviceJailbreak {
// 常见越狱文件
NSArray *localLibPaths = @[@"/Applications/Cydia.app",
@"/Library/MobileSubstrate/MobileSubstrate.dylib",
@"/bin/bash",
@"/usr/sbin/sshd",
@"/etc/apt"];
// 判断是否存在越狱文件
for (int i = 0; i < localLibPaths.count; i++) {
if ([[NSFileManager defaultManager] fileExistsAtPath:[NSString stringWithString:localLibPaths[i]]]) {
return YES;
}
}

// 判断是否存在cydia应用
if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"cydia://package/com.example.package"]]) {
return YES;
}

// 读取系统所有的应用名称
if ([[NSFileManager defaultManager] fileExistsAtPath:@"/User/Applications/"]) {
return YES;
}

// 读取环境变量
if(printEnv()) {
return YES;
}
return NO;
}