上届世界杯_世界杯韩国 - cngkpt.com

检测手机是否越狱

有些app喜欢检测是否手机已经越狱,然后做一些处理,那么这里收集了一些方法,看看是否是越狱的

1. 常见越狱文件

const char *examineBreak_Tool_pathes[] = {

"/Applications/Cydia.app",

"/Library/MobileSubstrate/MobileSubstrate.dylib",

"/bin/bash",

"/usr/sbin/sshd",

"/etc/apt"

};

// 判断是否存在越狱文件

for (int i = 0; i < 5; i++) {

if ([[NSFileManager defaultManager] fileExistsAtPath:[NSString stringWithUTF8String:examineBreak_Tool_pathes[i]]]){

return YES;

}

}

2.如果是非越狱情况下,返回的是nil,如果是越狱了,返回了是个随机的字符串,判断length即可

char *printEnv(void){

char *env = getenv("DYLD_INSERT_LIBRARIES");

return env;

}

3.检测一下是否安装了cydia这个软件,亲测可用

if ([[NSFileManager defaultManager] fileExistsAtPath:@"/User/Applications/"]){

return YES;

}

4.检测Mach-o文件的插入库有无MobileSubstrate.dylib这个库

遍历_dyld_get_image_name(i)获取的名称中是不是包含了Library/MobileSubstrate/MobileSubstrate.dylib

5.你可以看看stat是不是出自系统库

有没有被攻击者换掉:如果结果不是 /usr/lib/system/libsystem_kernel.dylib 的话,那就100%被攻击了。

#import

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

}

}

后记:这个方法已经不好使了--读取系统所有的应用名称

系统已经不然我们获取其他文件。

// 过去好使,现在不行了.读取系统所有的应用名称

if ([[NSFileManager defaultManager] fileExistsAtPath:@"/User/Applications/"]){

return YES;

}

读取系统文件已经过时了

说句题外话

如何检测这个app是不是来自于AppStore,查看有无描述文件即可

//其实只要用这个就行,如果有路径,说明就是被重新签名了

[[NSBundle mainBundle] pathForResource:@"embedded" ofType:@"mobileprovision"]

//验证一下猜测,看看是不是真的

NSFileManager *mgr = [NSFileManager defaultManager];

Bool have = [mgr fileExistsAtPath:@"/var/mobile/Containers/Bundle/Application/BECE8DA0-FA49-4BAE-9717-2ACB3FB3E4E4/Di.app/embedded.mobileprovision"];

参考文档1