iOS 判断设备是否越狱
我们在开发过程中,需要知道设备是否越狱,在网上查看很多资料,为此封装一些判断的方法。
上代码,不解释:
.h文件
#import <Foundation/Foundation.h> @interface JailBroken : NSObject /**
* 1. 判定常见的越狱文件
*/
- (BOOL)isJailBrokenOne; /**
* 2. 判断cydia的URL scheme
*/
- (BOOL)isJailBrokenTwo; /**
* 3. 读取系统所有应用的名称
*/
- (BOOL)isJailBrokenThree; /**
* 4. 使用stat方法来判定cydia是否存在
*/
- (BOOL)isJailBrokenFour; /**
* 5. 读取环境变量
*/
- (BOOL)isJailBrokenFive; @end
.m 文件
#import "JailBroken.h"
#import "AppDelegate.h"
#import <sys/stat.h>
#import<dlfcn.h>
#import <dlfcn.h> #define ARRAY_SIZE(a) sizeof(a)/sizeof(a[0])
#define USER_APP_PATH @"/User/Applications/"
#define CYDIA_APP_PATH "/Applications/Cydia.app"
#define APT_APP_PATH "/private/var/lib/apt/" const char* jailbreak_tool_pathes[] = {
"/Applications/Cydia.app",
"/Library/MobileSubstrate/MobileSubstrate.dylib",
"/etc/apt"
}; @implementation JailBroken /**
* 1. 判定常见的越狱文件
*/
- (BOOL)isJailBrokenOne {
for (int i=; i<ARRAY_SIZE(jailbreak_tool_pathes); i++) {
if ([[NSFileManager defaultManager] fileExistsAtPath:[NSString stringWithUTF8String:jailbreak_tool_pathes[i]]]) {
NSLog(@"1 The device is jailbroken!");
return YES;
}
}
NSLog(@"1 The device is not jailbroken!");
return NO;
} //- (BOOL)isJailBrokenOne {
// if ([[NSFileManager defaultManager] fileExistsAtPath:@"/etc/apt"]) {
// NSLog(@"1 The device is jailbroken!");
// return YES;
// }
//
// NSLog(@"1 The device is not jailbroken!");
// return NO;
//} /**
* 2. 判断cydia的URL scheme
*/
- (BOOL)isJailBrokenTwo {
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"cydia://"]]) {
NSLog(@"2 The device is jailbroken!");
return YES;
}
NSLog(@"2 The device is not jailbroken!");
return NO;
} /**
* 3. 读取系统所有应用的名称
*/
- (BOOL)isJailBrokenThree {
if ([[NSFileManager defaultManager] fileExistsAtPath:USER_APP_PATH]) {
NSLog(@"3 The device is jailbroken!");
NSArray *list = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:USER_APP_PATH error:nil];
NSLog(@"list = %@",list);
return YES;
}
NSLog(@"3 The device is not jailbroken!");
return NO;
} /**
* 4. 使用stat方法来判定cydia是否存在
*/
- (BOOL)isJailBrokenFour {
if (checkCydia()) {
NSLog(@"4 The device is jailbroken!");
return YES;
}
NSLog(@"4 The device is not jailbroken!");
return NO;
} /**
* 5. 读取环境变量
*/
- (BOOL)isJailBrokenFive {
if (printEnv()) {
NSLog(@"5 The device is jailbroken!");
return YES;
}
NSLog(@"5 The device is not jailbroken!");
return NO;
} #pragma mark - Private int checkInject()
{
int ret;
Dl_info dylib_info;
int (*func_stat)(const char*, struct stat*) = stat; if ((ret = dladdr(func_stat, &dylib_info))) {
return ;
}
return ;
} int checkCydia()
{
// first ,check whether library is inject
struct stat stat_info; if (!checkInject()) {
if ( == stat(CYDIA_APP_PATH, &stat_info) ||( == stat(APT_APP_PATH, &stat_info))) {
return ;
}
} else {
return ;
}
return ;
} char* printEnv(void)
{
char *env = getenv("DYLD_INSERT_LIBRARIES");
NSLog(@"%s", env);
return env;
} @end
在AppDelegate.m 文件
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
JailBroken *jb = [[JailBroken alloc] init];
if ( [jb isJailBrokenOne] || [jb isJailBrokenTwo] || [jb isJailBrokenThree] || [jb isJailBrokenFour] || [jb isJailBrokenFive] ) {
NSLog(@"越狱!!!");
}
else {
NSLog(@"未越狱!!!");
}
return YES;
}
iOS 判断设备是否越狱的更多相关文章
- iOS 判断设备是否越狱了
#import "PrisonBreakCheck.h" @implementation PrisonBreakCheck /** * 判断iPhone是否越狱了 */ +(BOO ...
- IOS判断设备是否已越狱
转自:http://www.cnblogs.com/supercheng/archive/2012/12/05/2804166.html - (BOOL)isJailbroken { BOOL jai ...
- IOS 判断设备屏幕尺寸、分辨率
根据屏幕尺寸和分辨率,ios现在数起来有6个版本. iOS 设备现有的分辨率如下: iPhone/iPod Touch 普通屏 320像素 x 480像素 iPhone .3G.3GS,iPod To ...
- iOS 判断设备型号
+ (NSString*)deviceString { // 需要#import "sys/utsname.h" struct utsname systemInfo; uname( ...
- ios判断设备是iphone还是ipad
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launc ...
- [Swift通天遁地]七、数据与安全-(16)检测Apple设备是否越狱
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- iOS设备是否越狱的判断代码
苹果是非常看重产品的安全性的,所以给用户设计了一套复杂的安全机制.这让喜爱自由,崇尚一切开放的程序员们极度不爽,于是越狱就成了苹果和黑客们反复斗法的场所.总体来说,越狱可以让我们随意安装.共享应用,但 ...
- iOS安全攻防之越狱设备检测
iOS 越狱(iOS Jailbreaking),是用于获取苹果公司便携装置操作系统iOS最高权限的一种技术手段,用户使用这种技术及软件可以获取到 iOS 的最高权限,甚至可能可以进一步解开运营商对手 ...
- 借助91助手,将ibook中的pdf文件拷贝至其它的pdf阅读器中(ios设备无需越狱)
有时候在使用ios自带的ibook阅读pdf文件的时候,会发现ibook有些功能并不是那么方便.最近我就遇到了一例,我想在ibook中放一本比较大的pdf书,页数有几百吧,pdf文件本身每一章节都是有 ...
随机推荐
- hdu1520 第一道树形DP,激动哇咔咔!
A - 树形dp Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Sta ...
- Tornado 模板支持“控制语句”和“表达语句”的表现形式
Tornado 的模板支持“控制语句”和“表达语句”,控制语句是使用 {% 和 %} 包起来的 例如 {% if len(items) > 2 %}.表达语句是使用 {{ 和 }} 包起来的,例 ...
- Sql server统计查询语句消耗时间
1. set statistics time on go xxxx go set statistics time off 2. DECLARE @begin dateTime DECLARE @en ...
- C# 数据实现设计模式
一个人没事,写了一个底层数据实现读取设计模式,个人觉得还是蛮好扩展,里面有不足的地方希望大家给予指导.话不多说先看个图吧!图可能不正规,伤害了你的眼睛见谅.有图有真相 其实这个设计模式,就是一个简单的 ...
- 外部主机连接mysql服务器延时严重问题
1.原因:由于mysql对连接的客户端进行DNS反向解析 2.禁用dns解析,在 /etc/my.cnf 中加入skip-name-resolve 3.反向解析说明: 所谓反向解析是这样的:mysql ...
- sqlalchemy操作Mysql
SQLAlchemy“采用简单的Python语言,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型”.SQLAlchemy的理念是,SQL数据库的量级和性能重要于对象集合:而对象集合的抽象又 ...
- BufferedInputStream实现原理分析
原文地址:http://blog.sina.com.cn/s/blog_67f995260101huxz.html BufferedInputStream是一个带有缓冲区的输入流,通常使用它可以提高我 ...
- 自定义ListView分割线
要完成自定义分割线,我们先来认识一下listview中的两个属性: android:divider 设置list 列表项的分隔条(可用颜色分隔,也可用Drawable分隔) android:divid ...
- form 练习
<form>姓:<input type="text" name="firstname" /><br />名:<inpu ...
- 使用片上XRAM需要进行的初始化
现在,流行的51单片机大多把on-chip expanded RAM(以下简称XRAM)作为基本配置,容量有些差别.厂商在给出芯片特性时,往往把XRAM和标准52芯片的256字节内部RAM加在一起统称 ...