检测iOS客户端是否越狱

3,357 阅读1分钟

一般来说做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检查越狱的一种机制

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 那就是越狱了的

QQ检测
也是QQ检测越狱的一种方式

一般来说客户端可以做适当的混淆,或者函数名不要那么的明显,比如:isJailbroken...很明显一看就是检测越狱的..记得曾经看到有人用[ woHaveMeiHaveZiYou]来检测.也是妥妥的.