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

上代码,不解释:

.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. poj 3104 二分

    Drying Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 12568   Accepted: 3243 Descripti ...

  2. 【android】android下防止anr程序无响应

    public class AnrActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState ...

  3. 关于 addEventListener 和 handleEvent 方法

    使用 addEventListener 可以绑定事件,并传入回调函数. Mozilla 0.9.1 和 Netscape 6.1 之后的版本不但支持传递函数引用,也都允许直接把拥有 handleEve ...

  4. jQuery proxy详解

    第一次接触jQuery.proxy()时感觉这个方法不实用,不明白它到底是个什么意思.今天来将jQuery官网上的解释进行一下翻译,顺便添加自己的理解和一些示例.proxy也可称为代理. jQuery ...

  5. HTML5画布(线条、渐变)

    绘制直线时,一般会用到moveTo与lineTo两种方法. 案例1: <!DOCTYPE html><html><head lang="en"> ...

  6. HTML5画布(圆形)

    案例1: <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8& ...

  7. 百度ueditor 上传图片后如何设置样式

    最近项目中遇到一个问题,UEditor上传图片后,在内容展示会修改图片样式.但是表情也是img标签,所以全局修改是有问题的, 所以只能着手修改一下插件的代码. 首先找到图片上传的服务器段文件.这里主要 ...

  8. unity3D对象的显示和隐藏

    SetActive/active/SetActiveRecursively 后两者比较旧,现在通常用第一个SetActive 必须先new一个gameobject对象用于实例化,然后再设置其activ ...

  9. WORD-如何解除WORD文档的锁定

    Word文档保护破解 般来说WORD文档有两种密码打开密码和文档保护密码下面介绍几种破解文档保护密码方法 方法1:插入文件法 启动WORD新建空白文档执行插入→文件打开插入文件对框定位需要解除保护文档 ...

  10. hdu 2807 The Shortest Path

    http://acm.hdu.edu.cn/showproblem.php?pid=2807 第一次做矩阵乘法,没有优化超时,看了别人的优化的矩阵乘法,就过了. #include <cstdio ...