美文网首页
01_iOS Jailbreak初识

01_iOS Jailbreak初识

作者: 伶俐ll | 来源:发表于2020-08-14 10:13 被阅读0次

iOS越狱(iOS Jailbreak)概念

利用iOS系统的漏洞,获取iOS系统的最高权限(Root),解开之前的各种限制(合法行为)

iOS Jailbreak的优点

  • 打造个性化、与众不同的iPhone,可以自由安装各种实用的插件、主题、APP;
  • 自由安装非AppSore来源的APP
  • 灵活管理文件系统,让iPhone可以像U盘那样灵活
  • 给开发者提供了逆向工程的环境

iOS Jailbreak的缺点

  • 不予保修
  • 费电,越狱后的iOS系统会常驻一些进程,耗电速度约提升10%~20%
  • 在新的iOS固件版本出来的时候,不能及时地进行更新,每个新版本的固件,都会修复上一个版本的越狱漏洞,使越狱失效
    如果需要保持越狱状态,要等待新的越狱程序发布时,才能升级相应的固件版本
  • 不再受iOS系统默认的安全保护,容易被恶意软件攻击,个人隐私有被窃取的风险
  • 如果安装了不稳定的插件,容易让系统变得不稳定、变慢,甚至出现“白苹果”等问题

完美越狱和不完美越狱

  • 完美越狱
    越狱后的iPhone可以正常关机和重启
  • 不完美越狱
    - iPhone一旦关机后再开机时,屏幕就会一直停留在启动画面,也就是“白苹果”状态
    - 或者能正常开机,但已经安装的破解软件都无法正常使用,需要将设备与PC连接后,使用软件进行引导才能使用

如何判断是否越狱成功?

  • 桌面是否有Cydia
  • 工具判断(比如PP助手、爱思助手)
  • 代码判断
    1、通过越狱后增加的越狱文件判断,一般来说,手机越狱后会增加以下文件/Applications/Cydia.app/Library/MobileSubstrate/MobileSubstrate.dylib/bin/bash/usr/sbin/sshd/etc/apt,判断这些文件是否存在,只要有存在的,就可以认为手机已经越狱了
     +(BOOL)re_isJaibreak
     {
         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]]) {
                 return YES;
             }
         }
         return NO;
     }
    

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

+ (BOOL)re_isJaibreak
{
    if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"cydia://"]]){
        NSLog(@"The device is jail broken!");
        return YES;
    }
    return NO;
}

3、根据是否能获取所有应用的名称判断,没有越狱的设备是没有读取所有应用名称的权限的。

+ (BOOL)re_isJaibreak
{
    if([[NSFileManager defaultManager] fileExistsAtPath:@"User/Applications/"]){
        NSArray*appList = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:@"User/Applications/" error:nil];
        NSLog(@"appList = %@", appList);
        return YES;
    }
    return NO;
}

4、根据读取的环境变量是否有值判断,DYLD_INSERT_LIBRARIES环境变量在非越狱的设备上应该是空的,而越狱的设备基本上都会有Library/MobileSubstrate/MobileSubstrate.dylib

+ (BOOL)re_isJaibreak
{
    char *env = getenv("DYLD_INSERT_LIBRARIES");
    if(env) {
        NSLog(@"The device is jail broken!");
        return YES;
    }
    NSLog(@"The device is NOT jail broken!");
    return NO;
}

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

相关文章

网友评论

      本文标题:01_iOS Jailbreak初识

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