检测iOS设备是否越狱的方法

2016-02-19 10:58 109 1 收藏

今天给大家分享的是由图老师小编精心为您推荐的检测iOS设备是否越狱的方法,喜欢的朋友可以分享一下,也算是给小编一份支持,大家都不容易啊!

【 tulaoshi.com - 编程语言 】

在应用开发过程中,我们希望知道设备是否越狱,正以什么权限运行程序,好对应采取一些防御和安全提示措施。

首先,你可以尝试使用NSFileManager判断设备是否安装了如下越狱常用工具:

/Applications/Cydia.app/Library/MobileSubstrate/MobileSubstrate.dylib/bin/bash/usr/sbin/sshd/etc/apt

但是不要写成BOOL开关方法,给攻击者直接锁定目标hook绕过的机会
代码如下:

+(BOOL)isJailbroken{ 
    if ([[NSFileManager defaultManager] fileExistsAtPath:@"/Applications/Cydia.app"]){ 
        return YES; 
    } 
    // ... 


攻击者可能会改变这些工具的安装路径,躲过你的判断。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

那么,你可以尝试打开cydia应用注册的URL scheme:
代码如下:

if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"cydia://package/com.example.package"]]){ 
     NSLog(@"Device is jailbroken"); 

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

但是不是所有的工具都会注册URL scheme,而且攻击者可以修改任何应用的URL scheme。

那么,你可以尝试读取下应用列表,看看有无权限获取:
代码如下:

if ([[NSFileManager defaultManager] fileExistsAtPath:@"/User/Applications/"]){ 
        NSLog(@"Device is jailbroken"); 
        NSArray *applist = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:@"/User/Applications/" 
                                                                               error:nil]; 
        NSLog(@"applist = %@",applist); 


越了狱的设备是可以获取到的:

攻击者可能会hook NSFileManager 的方法,让你的想法不能如愿。

那么,你可以回避 NSFileManager,使用stat系列函数检测Cydia等工具:
代码如下:

#import sys/stat.h 
 
void checkCydia(void) 

    struct stat stat_info; 
    if (0 == stat("/Applications/Cydia.app", &stat_info)) { 
        NSLog(@"Device is jailbroken"); 
    } 

攻击者可能会利用 Fishhook原理 hook了stat。

那么,你可以看看stat是不是出自系统库,有没有被攻击者换掉:
代码如下:

#import dlfcn.h 
 
void checkInject(void) 

    int ret ; 
    Dl_info dylib_info; 
    int (*func_stat)(const charchar *, struct stat *) = stat; 
    if ((ret = dladdr(func_stat, &dylib_info))) { 
        NSLog(@"lib :%s", dylib_info.dli_fname); 
    } 


如果结果不是 /usr/lib/system/libsystem_kernel.dylib 的话,那就100%被攻击了。
如果 libsystem_kernel.dylib 都是被攻击者替换掉的……
那么,你可能会想,我该检索一下自己的应用程序是否被链接了异常动态库。
列出所有已链接的动态库:
代码如下:

#import mach-o/dyld.h 
 
void checkDylibs(void) 

    uint32_t count = _dyld_image_count(); 
    for (uint32_t i = 0 ; i count; ++i) { 
        NSString *name = [[NSString alloc]initWithUTF8String:_dyld_get_image_name(i)]; 
        NSLog(@"--%@", name); 
    } 


通常情况下,会包含越狱机的输出结果会包含字符串: Library/MobileSubstrate/MobileSubstrate.dylib 。

攻击者可能会给MobileSubstrate改名,但是原理都是通过DYLD_INSERT_LIBRARIES注入动态库。

那么,你可以通过检测当前程序运行的环境变量:
代码如下:

void printEnv(void) 

    charchar *env = getenv("DYLD_INSERT_LIBRARIES"); 
    NSLog(@"%s", env); 


未越狱设备返回结果是null,越狱设备就各有各的精彩了,尤其是老一点的iOS版本越狱环境。

其实,最简单的方法就是查看你设备上是否多了越狱的目录,来看一个完整点的例子:
代码如下:

detectDevice.h

@interface
 UIDevice (Helper) 

-(BOOL)isJailbroken;

@end
detectDevice.m

@implementation
 UIDevice (Helper) 

-(BOOL)isJailbroken
 { 

    BOOL
 jailbroken = NO; 

    NSString
 *cydiaPath = @"/Applications/Cydia.app";

    NSString
 *aptPath = @"/private/var/lib/apt/";

    if

([[NSFileManager defaultManager] fileExistsAtPath:cydiaPath]) { 

        jailbroken
 = YES; 

    }

    if

([[NSFileManager defaultManager] fileExistsAtPath:aptPath]) { 

        jailbroken
 = YES; 

    }

    return

jailbroken; 

}

@end

然后在你代码中调用[UIDevice currentDevice] isJailbroken], 如果返回YES说明被破解了,为NO,则没被破解。

来源:https://www.tulaoshi.com/n/20160219/1596223.html

延伸阅读
解决ios8.3越狱设备上显示“存储容量几乎已满”的问题   存储容量几乎已满这是由于iOS8越狱工具写入了系统目录导致的警报,不影响正常使用。目前由于Cydia还不兼容iOS8各项功能和配置,当Cydia兼容后,点击Cydia会进行移动目录处理tulaoshi.com,即可解决该问题。 iOS8.1.3-iOS8.3完美越狱图文教程  tulaoshi.com; ...
iOS 7指南针检测iPhone5是否弯曲的偏方 在iPhone5上市以来,热议不断,炒的最热的话题之一就是iPhone5弯www.tulaoshi.com曲门,继果粉将iPhone 5坐弯的微博被网友疯狂转发后,越来越多的用户晒出了自己的iPhone 5也不小心出现了不同程度的弯曲变形的照片。 由于iPhone 5比例较长,机身更薄,而且机身采用了硬度较软的铝合金材质,相...
太极iOS8.1.1越狱失败解决方法   1.1001设备断开 提示此代码时,表示在越狱过程中设备与电脑之间的联系断开了。在越狱过程中不要对设备进行任何操作,确保设备处于连接状态。建议使用原装苹果数据线,防止山寨数据线因质量问题而出现断开问题。 2.1002设备有密码保护 提示此代码时,表示越狱的iPhone/iPad的密码锁...
让谷歌搜索成为iOS设备默认应用的方法 NowNow并没设有主屏幕图标,用户必须通过设置选定激活方法,开发者建议最好使用短暂按住 Home 键激活。 开发者表示这款插件对那些旧款的设备尤其实用。只要使用提前设定的激活方法就能通过 NowNow 启动谷歌搜索应用。
ios7可以越狱了吗 ios7是否可以越狱还需考察,但越狱大神pod2g在自己的Twitter上宣布已经迫不及待的把下一代ios7越狱,他还对外宣布WWDC2013上大家一定会看到ios7的身影,算一下WWDC2013开幕还有一个月时间,pod2g已经联合肌肉男、Planetbeing以及Pimskeks等越狱大神等待这下一代ios7的公布。 在最新的ios7中,Flickr和Vim图老师e...

经验教程

345

收藏

97
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部