我们在开发过程中,需要知道设备是否越狱,在网上查看很多资料,为此封装一些判断的方法。

上代码,不解释:

.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 判断设备是否越狱的更多相关文章

  1. iOS 判断设备是否越狱了

    #import "PrisonBreakCheck.h" @implementation PrisonBreakCheck /** * 判断iPhone是否越狱了 */ +(BOO ...

  2. IOS判断设备是否已越狱

    转自:http://www.cnblogs.com/supercheng/archive/2012/12/05/2804166.html - (BOOL)isJailbroken { BOOL jai ...

  3. IOS 判断设备屏幕尺寸、分辨率

    根据屏幕尺寸和分辨率,ios现在数起来有6个版本. iOS 设备现有的分辨率如下: iPhone/iPod Touch 普通屏 320像素 x 480像素 iPhone .3G.3GS,iPod To ...

  4. iOS 判断设备型号

    + (NSString*)deviceString { // 需要#import "sys/utsname.h" struct utsname systemInfo; uname( ...

  5. ios判断设备是iphone还是ipad

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launc ...

  6. [Swift通天遁地]七、数据与安全-(16)检测Apple设备是否越狱

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  7. iOS设备是否越狱的判断代码

    苹果是非常看重产品的安全性的,所以给用户设计了一套复杂的安全机制.这让喜爱自由,崇尚一切开放的程序员们极度不爽,于是越狱就成了苹果和黑客们反复斗法的场所.总体来说,越狱可以让我们随意安装.共享应用,但 ...

  8. iOS安全攻防之越狱设备检测

    iOS 越狱(iOS Jailbreaking),是用于获取苹果公司便携装置操作系统iOS最高权限的一种技术手段,用户使用这种技术及软件可以获取到 iOS 的最高权限,甚至可能可以进一步解开运营商对手 ...

  9. 借助91助手,将ibook中的pdf文件拷贝至其它的pdf阅读器中(ios设备无需越狱)

    有时候在使用ios自带的ibook阅读pdf文件的时候,会发现ibook有些功能并不是那么方便.最近我就遇到了一例,我想在ibook中放一本比较大的pdf书,页数有几百吧,pdf文件本身每一章节都是有 ...

随机推荐

  1. 第一次写博客,关于前端开发deMVC在js中的应用

    对前端MVC MVC分别是model.view.controller的缩写,模型.视图.控制器.这些更加偏向于后台,在以前MVC是只属于后台的.当然随着技术的进步,前端的大牛们将后台的一些东西应用于前 ...

  2. 范围for语句 && 列表初始值&& 标准库函数begin和end

    范围for语句: 引入的意义:简化传统for的编写,主要用于遍历给定序列中的每个元素并对序列中的每个值执行某种操作,其语法形式是: for( 声明: 给定序列) { 执行的操作. } 其中,“给定序列 ...

  3. 一个好玩的jq+php实现转盘抽奖程序

    前台页面: <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <met ...

  4. Android应用中MVP最佳实践

    转自:http://www.jianshu.com/p/ed2aa9546c2c 文/Jude95(简书作者)原文链接:http://www.jianshu.com/p/ed2aa9546c2c著作权 ...

  5. 为Mac自带的Apache配置PHP和虚拟机

    操作系统:os x 10.11.2 1.启动apache 打开终端(terminal),输入命令:sudo apachectl -k start ; 在浏览器地址栏中输入:http://localho ...

  6. MvcPager概述

    MvcPager 概述   MvcPager分页控件是在ASP.NET MVC Web应用程序中实现分页功能的一系列扩展方法,该分页控件的最初的实现方法借鉴了网上流行的部分源代码, 尤其是ScottG ...

  7. unable to find valid certification path to requested target

    Error : javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path bu ...

  8. Qt判断和打开进程(windows端),运行,检测,中止

    windows端的Qt程序往往需要打开外部程序(如:prog.exe),并且需要确定这个外部程序是唯一打开的. 1.判断系统中是否存在prog.exe void judge() { QProcess ...

  9. WPF 如何缓解大量控件加载缓慢的问题

    最近有一个项目需要加载大量的控件,导致系统出现卡顿问题,经过几天的努力,终于搞定了,写一下备忘. 解决方案是首次加载时只显示可见区域控件,之后使用辅助线程进行分批加载,将分批加载的线程优先级别设置为空 ...

  10. Android之SharedPreferences两个工具类

    相信Android的这个最简单的存储方式大家都很熟悉了,但是有一个小小技巧,也许你没有用过,今天就跟大家分享一下,我们可以把SharedPreferences封装在一个工具类中,当我们需要写数据和读数 ...