本文中主要整理介紹三種親測(cè)好用的檢測(cè)越獄的方式
1.通過(guò)越獄后增加的越獄文件判斷
判斷這些文件是否存在,讓文件添加到數(shù)組中,遍歷數(shù)組,如果存在任何一個(gè)文件,就認(rèn)為是越獄了
- (BOOL)isJailBreak {
NSArray *jailbreak_tool_paths = @[
@"/Applications/Cydia.app",
@"/Library/MobileSubstrate/MobileSubstrate.dylib",
@"/bin/bash",
@"/usr/sbin/sshd",
@"/etc/apt"
];
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.是否能打開(kāi)cydia這個(gè)協(xié)議頭
- (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;
}
IMG_6999.PNG
前兩種方式檢測(cè)的代碼通過(guò)越獄的手機(jī)通過(guò)安裝上面??這個(gè)插件開(kāi)啟屏蔽檢測(cè)就能輕松繞過(guò),而下面??第三種方法測(cè)試開(kāi)啟后無(wú)法繞過(guò),所以更推薦第三種。
3.越獄后的手機(jī)是可以獲取到手機(jī)內(nèi)安裝的所有應(yīng)用程序的,如果可以獲取到就說(shuō)明越獄了
- (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;
}
真正使用的時(shí)候,為了保證判斷的準(zhǔn)確性,可以3種方法結(jié)合起來(lái)判斷,只要有一個(gè)方法返回yes,就認(rèn)為是越獄。然后就可以進(jìn)行 exit(0); 操作。
當(dāng)然了,攻擊者可以直接通過(guò)替換系統(tǒng)的fileExistsAtPath函數(shù),讓他一直返回false,從而繞過(guò)軟件路徑的檢測(cè)。這時(shí)候就需要一些C語(yǔ)言的函數(shù)去做更加精確的檢測(cè)。
雖然這里用到的是C語(yǔ)言檢測(cè)函數(shù),但這些函數(shù)被hook的可能性也是存在的,比如fishhook。。
如果真有大佬手動(dòng)hook這些函數(shù)或者直接修改二進(jìn)制的話,那也沒(méi)啥好防的,大佬們隨便吧。。
所以也印證了那句話:沒(méi)有絕對(duì)的安全,你唯一能做的就是拖延攻擊者的腳步。
對(duì)于這些函數(shù),不建議單獨(dú)寫方法,容易被hook掉,所以最好是寫在不能被hook的函數(shù)里,比如
application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
誰(shuí)TM會(huì)hook程序的初始化函數(shù)。。
另外越獄檢測(cè)函數(shù)最好不要出現(xiàn)Jailbreak,或者canijailbreak,或者AntiJailbreak這種字段,很容易被定位到。