美文网首页iOS实用功能
iOS开发判断手机是否越狱

iOS开发判断手机是否越狱

作者: 炸街程序猿 | 来源:发表于2021-08-26 15:08 被阅读0次

    本文中主要整理介绍三种亲测好用的检测越狱的方式

    1.通过越狱后增加的越狱文件判断

    判断这些文件是否存在,让文件添加到数组中,遍历数组,如果存在任何一个文件,就认为是越狱了

    - (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.是否能打开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;
    }
    
    IMG_6999.PNG

    前两种方式检测的代码通过越狱的手机通过安装上面👆这个插件开启屏蔽检测就能轻松绕过,而下面👇第三种方法测试开启后无法绕过,所以更推荐第三种。

    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;
    }
    

    真正使用的时候,为了保证判断的准确性,可以3种方法结合起来判断,只要有一个方法返回yes,就认为是越狱。然后就可以进行 exit(0); 操作。

    当然了,攻击者可以直接通过替换系统的fileExistsAtPath函数,让他一直返回false,从而绕过软件路径的检测。这时候就需要一些C语言的函数去做更加精确的检测。
    虽然这里用到的是C语言检测函数,但这些函数被hook的可能性也是存在的,比如fishhook。。
    如果真有大佬手动hook这些函数或者直接修改二进制的话,那也没啥好防的,大佬们随便吧。。

    所以也印证了那句话:没有绝对的安全,你唯一能做的就是拖延攻击者的脚步。

    对于这些函数,不建议单独写方法,容易被hook掉,所以最好是写在不能被hook的函数里,比如

    application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    

    谁TM会hook程序的初始化函数。。

    另外越狱检测函数最好不要出现Jailbreak,或者canijailbreak,或者AntiJailbreak这种字段,很容易被定位到。

    相关文章

      网友评论

        本文标题:iOS开发判断手机是否越狱

        本文链接:https://www.haomeiwen.com/subject/ysluiltx.html