一般来说做iOS APP都会加入检测越狱的方法,现将几种知道的方法写在下面
0x1:
_dyld_image_count 和_dyld_get_image_name()
_dyld_image_count //可以获得APP加载的dylib的数量
_dyld_get_image_name() //可以获得第x个dylib的全路径
上图所示, 只需要判断路径.或者dylib的名字就好.
越狱之后插件的dylib的路径为/Library/MobileSubstrate/DynamicLibraries
别忘了<mach-o/dyld.h>头文件
第一种方法 也是微信所使用的:
0x2:
利用URL Scheme
NSURL* url=[NSURL URLWithString:@"cydia://package/com.example.package"];
UIApplication* app=[UIApplication sharedApplication];
BOOL isJailBroken=[app canOpenURL:url];
if(isJailBroken){
NSLog(@"已经被越狱");
}else{
NSLog(@"未越狱");
}
这也是QQ检查越狱的一种机制
0x3:
检测目录
@"/etc/ssh/sshd_config";
@"/usr/libexec/ssh-keysign";
@"/usr/sbin/sshd";
@"/bin/sh";
@"/bin/bash";
@"/etc/apt";
@"/Application/Cydia.app/";
@"/Library/MobileSubstrate/MobileSubstrate.dylib"
NSFileManager* fileManager=[NSFileManager defaultManager];
[fileManager fileExistsAtPath:] //以上任意一种
只要返回结果是1 那就是越狱了的
一般来说客户端可以做适当的混淆,或者函数名不要那么的明显,比如:isJailbroken...很明显一看就是检测越狱的..记得曾经看到有人用[ woHaveMeiHaveZiYou]来检测.也是妥妥的.