iOS 越狱(iOS Jailbreaking),是用于获取苹果公司便携装置操作系统iOS最高权限的一种技术手段,用户使用这种技术及软件可以获取到 iOS 的最高权限,甚至可能可以进一步解开运营商对手机网络的限制。手机越狱后会面临更多的安全风险,不建议对iOS设备进行越狱。在开发中可以针对越狱设备进行安全防范。

  可以尝试用 NSFileManager 判断设备是否安装了越狱插件。

#define ARRAY_SIZE(a) sizeof(a)/sizeof(a[0])

const char* jailbreak_tool_pathes[] = {
"/Applications/Cydia.app",
"/Library/MobileSubstrate/MobileSubstrate.dylib",
"/bin/bash",
"/usr/sbin/sshd",
"/etc/apt"
};
#pragma mark - 判断设备是否被越狱
+ (BOOL)isJailBreak
{
for (int i=; i<ARRAY_SIZE(jailbreak_tool_pathes); i++) {
if ([[NSFileManager defaultManager] fileExistsAtPath:[NSString stringWithUTF8String:jailbreak_tool_pathes[i]]]) {
XSDLog(@"The device is jail broken!");
return YES;
}
}
XSDLog(@"The device is NOT jail broken!");
return NO;
}

  可以通过尝试读取应用列表,看有无权限:  

if ([[NSFileManager defaultManager] fileExistsAtPath:@"/User/Applications/"]){
NSLog(@"Device is jailbroken");
NSArray *applist = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:@"/User/Applications/"
error:nil];
NSLog(@"applist = %@",applist);
}

  未越狱设备是无法读取数据的,越狱设备是可以获得一个列表。

  使用stat系列函数检测Cydia等工具:

#import <sys/stat.h>

void checkCydia(void)
{
struct stat stat_info;
if ( == stat("/Applications/Cydia.app", &stat_info)) {
NSLog(@"Device is jailbroken");
}
}

  

  可以看看stat是不是出自系统库,有没有被攻击者换掉:

#import <dlfcn.h>  

void checkInject(void)
{
int ret ;
Dl_info dylib_info;
int (*func_stat)(const char *, struct stat *) = stat;
if ((ret = dladdr(func_stat, &dylib_info))) {
NSLog(@"lib :%s", dylib_info.dli_fname);
}
}
输出结果为:

  如果结果不是 /usr/lib/system/libsystem_kernel.dylib 的话,那就100%被攻击了。
如果 libsystem_kernel.dylib 都是被攻击者替换掉的……

  动态库检测:

#import <mach-o/dyld.h>

void checkDylibs(void)
{
uint32_t count = _dyld_image_count();
for (uint32_t i = ; i < count; ++i) {
NSString *name = [[NSString alloc]initWithUTF8String:_dyld_get_image_name(i)];
NSLog(@"动态库检测结果--%@", name);
}
}

  通常情况下,会包含越狱机的输出结果会包含字符串: Library/MobileSubstrate/MobileSubstrate.dylib 。

  结果:

  

  通过检测程序当前运行的环境:

#include <stdlib.h>

void printEnv(void)
{
char *env = getenv("DYLD_INSERT_LIBRARIES");
NSLog(@"===%s", env);
}
结果:
-- ::30.232140+ TestSecurityAdvance[:] ===(null)
  未越狱设备返回的是 null。

  参见:念茜的博客。

iOS安全攻防之越狱设备检测的更多相关文章

  1. iOS安全攻防之使用 Frida 绕过越狱设备检测

    Frida 是 一款有趣的手机应用安全分析工具. 文章参考:Bypass Jailbreak Detection with Frida in iOS applications 在 Mac Termin ...

  2. iOS的安全性和越狱

    提到越狱,很多人第一反应大概是免费的游戏和 app. 作为软件从业人员,深知中国的大环境的特殊性.内有用户想吃免费午餐的不良付费习惯,外有行业内大头诸如某讯对创新的绞杀.大家对越狱是为了免费.盗版软件 ...

  3. 移动设备检测类Mobile_Detect.php

    移动设备检测类Mobile_Detect.php http://mobiledetect.net/ 分类:PHP 时间:2015年11月28日 Mobile_Detect.php是一个轻量级的开源移动 ...

  4. iOS安全攻防(二):后台daemon非法窃取用户iTunesstore信息

    转自:http://blog.csdn.net/yiyaaixuexi/article/details/8293020 开机自启动 在iOS安全攻防(一):Hack必备的命令与工具中,介绍了如何编译自 ...

  5. iOS安全攻防

    iOS安全攻防 http://www.docin.com/p-760264769.html

  6. iOS安全攻防(二十三):Objective-C代码混淆

    iOS安全攻防(二十三):Objective-C代码混淆 class-dump能够非常方便的导出程序头文件,不仅让攻击者了解了程序结构方便逆向,还让着急赶进度时写出的欠完好的程序给同行留下笑柄. 所以 ...

  7. 适用于 iOS、Android 和 Windows 设备的移动设备管理

    适用于 iOS.Android 和 Windows 设备的移动设备管理 随着企业环境中移动设备的数量不断增加,详细检查访问您企业资源的移动设备变得至关重要.统一终端管理软件 Desktop Centr ...

  8. 使用js插件进行设备检测

    一.分析新浪网是怎么做的   如新浪网有两种版本,一种是pc版,存放在www.sina.com.cn这个服务器上:另外一种是手机版,存放在www.sina.cn这个服务器上 原理是当用户输入网址www ...

  9. IOS系统之蓝牙外接设备

    Ios系统对于蓝牙外接设备在iphone4以前都是蓝牙2.0的时候,需要通过苹果的审核,据统计通过率仅有2%左右,现在蓝牙2.0基本上处于淘汰状态,所以在这里就不考虑了. 现在iphone4s以后的设 ...

随机推荐

  1. js 形参和实参---2017-04-11

    一.定义 1.实参(argument):     全称为"实际参数"是在调用时传递给函数的参数. 实参可以是常量.变量.表达式.函数等, 无论实参是何种类型的量,在进行函数调用时, ...

  2. 哥哥我刚学的java---------数组插入法------------

    package charufa; public class Test02 { // 插入法(插入一个数字). public static void main(String[] args) { int[ ...

  3. 使用 Http 的 Post 方式与网络交互通信

    package zw1; import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.InputStream; ...

  4. js距离现在时间计算

    <script language="javascript"> var biryear = 2015; var birmonth = 12; var birday = 1 ...

  5. http协议的八种请求类型

    GET:向特定的资源发出请求. POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件).数据被包含在请求体中.POST请求可能会导致新的资源的创建和/或已有资源的修改. OPTIONS: ...

  6. IO流中的Stream相关对象

    流无处不在,只要是关于到文件的输入.输出.更新等,关于IO流,项目中还是经常用到的,写log日志免不了要与其打交道,现在需要用到,就顺道好好回顾一下进行整理,首先是几个需要用到的类的说明,其实说简单点 ...

  7. lua 字符串

    lua 字符串 语法 单引号 双引号 "[[字符串]]" 示例程序 local name1 = 'liao1' local name2 = "liao2" lo ...

  8. [编织消息框架][消息服务]jmx

    JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序.设备.系统等植入管理功能的框架,使用的是RMI技术. 比较经典的应用jdk bin目录下 jcons ...

  9. 2017/4/25-SAX解析XML文件

    SAX解析XML 1.分析 SAX是按照XML文件的顺序执行,可以说是边扫描,边解析.所以无须将整个文件加载至内存中. 2.优点 1)占用内存少. 2)解析效率高. 3.缺点 1)只能进行读取. 2) ...

  10. 请为main函数提供返回值

    很多人甚至市面上的一些书籍,都使用了void main( ) ,其实这是错误的.C/C++ 中从来没有定义过void main( ).C++ 之父 Bjarne Stroustrup 在他的主页上的 ...