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文件本身每一章节都是有 ...
随机推荐
- bootstrap小结
bootstrap总结 bootstrap总结 base css 我分为了几大类 1,列表 .unstyled(无样式列表),.dl-horizontal(dl列表水平排列) 2,代码 code(行级 ...
- C语言中固定大小的数据类型的输入和输出
在使用C语言时,对数据的大小要求比较严格时,例如要使用32位的整数类型,这时要使用 int32_t,无论平台如何变化,数据大小仍然是32位,固定位数的数据类型还有 uint32_t.uint64_t ...
- windows server 2008 设置多用户同时远程登录
>Windows server 2008默认只支持一个administrator用户登陆,一个登录后另一个就被踢掉了,有没有办法像Windows Server 2003那样允许多用户用同时同一个 ...
- Maven+SpringMVC+Mybatis 开发环境整合
1.maven build遇到了如下问题: [ERROR] Failed to execute goal org.codehaus.mojo:tomcat-maven-plugin:1.1:rede ...
- 如何从uiview里面,获取其上层的uiviewcontroller
id object = [self nextResponder]; while (![object isKindOfClass:[UIViewController class]] && ...
- hibernate+spring+mvc+Easyui框架模式下使用grid++report的总结
最近刚开始接触hibernate+spring+mvc+Easyui框架,也是刚开通了博客,希望能记录一下自己实践出来的东西,让其他人少走弯路. 转让正题,以个人浅薄的认识hibernate对于开发人 ...
- mysql下怎样运行脚本
假设要运行脚本: F:\hello world\niuzi.sql 第一种方法: 在命令行下(未连接数据库),输入 mysql -h localhost -u root -p < ...
- IQC IPQC FQC OQC QA QE SQE CQS QM 简介区别
IQC Incoming quality control 来料质量控制.是企业产品过程质量的第一关,在这个部门工作的同事最主要的是要注意文件和资料,即:图纸 样品承认书 样板 ***配件检验规范 ,还 ...
- 关于sencha touch 的JSONP跨域请求的学习研究
此篇文章是对自己在研究学习sencha touch的过程中的点滴记录,主要是JSONP的跨域请求这方面,对于何为是跨域概念还有不熟悉的,可以自己问下度娘. 先上张图: 我要完成的功能就是表格下拉刷新, ...
- 符号化Symbol(符号)体系
http://apps.hi.baidu.com/share/detail/23143648# 符号化Symbol(符号)体系 ArcGIS Engine9.3为开发人员提供了32种符号,主要分为三大 ...