iOS安全攻防(二十):越狱检测的攻与防

iOS安全攻与防(总篇) iOS安全攻与防 本地数据攻与防 https Uiwebview 第三方sdk与xcode 反编译与代码混淆 越狱与反调试 扫描工具fortify 常见接口漏洞分析 阅读详情

原文地址:http://blog.youkuaiyun.com/yiyaaixuexi/article/details/20286929


在应用开发过程中,我们希望知道设备是否越狱,正以什么权限运行程序,好对应采取一些防御和安全提示措施。

iOS7相比之前版本的系统而言,升级了沙盒机制,封锁了几乎全部应用沙盒可以共享数据的入口。即使在越狱情况下,限制也非常多,大大增加了应用层攻击难度。比如,在iOS7之前,我们可以尝试往沙盒外写文件判断是否越狱,但iOS7越狱后也无该权限,还使用老方法检测会导致误判。

那么,到底应该如何检测越狱呢?攻击者又会如果攻破检测呢?本文就着重讨论一下越狱检测的攻与防。


 



首先,你可以尝试使用NSFileManager判断设备是否安装了如下越狱常用工具:
/Applications/Cydia.app
/Library/MobileSubstrate/MobileSubstrate.dylib
/bin/bash
/usr/sbin/sshd
/etc/apt


但是不要写成BOOL开关方法,给攻击者直接锁定目标hook绕过的机会

  1. +(BOOL)isJailbroken{  
  2.     if ([[NSFileManager defaultManager] fileExistsAtPath:@"/Applications/Cydia.app"]){  
  3.         return YES;  
  4.     }  
  5.     // ...  
  6. }  

攻击者可能会改变这些工具的安装路径,躲过你的判断。


那么,你可以尝试打开cydia应用注册的URL scheme:

  1. if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"cydia://package/com.example.package"]]){  
  2.      NSLog(@"Device is jailbroken");  
  3. }  


但是不是所有的工具都会注册URL scheme,而且攻击者可以修改任何应用的URL scheme。 


那么,你可以尝试读取下应用列表,看看有无权限获取:

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

越了狱的设备是可以获取到的:


攻击者可能会hook NSFileManager 的方法,让你的想法不能如愿。


那么,你可以回避 NSFileManager,使用stat系列函数检测Cydia等工具:

  1. #import <sys/stat.h>  
  2.   
  3. void checkCydia(void)  
  4. {  
  5.     struct stat stat_info;  
  6.     if (0 == stat("/Applications/Cydia.app", &stat_info)) {  
  7.         NSLog(@"Device is jailbroken");  
  8.     }  
  9. }  


攻击者可能会利用 Fishhook原理 hook了stat。


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

  1. #import <dlfcn.h>  
  2.   
  3. void checkInject(void)  
  4. {  
  5.     int ret ;  
  6.     Dl_info dylib_info;  
  7.     int (*func_stat)(const charchar *, struct stat *) = stat;  
  8.     if ((ret = dladdr(func_stat, &dylib_info))) {  
  9.         NSLog(@"lib :%s", dylib_info.dli_fname);  
  10.     }  
  11. }  

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

那也没什么可防的大哥你随便吧……  



那么,你可能会想,我该检索一下自己的应用程序是否被链接了异常动态库。

列出所有已链接的动态库:

  1. #import <mach-o/dyld.h>  
  2.   
  3. void checkDylibs(void)  
  4. {  
  5.     uint32_t count = _dyld_image_count();  
  6.     for (uint32_t i = 0 ; i < count; ++i) {  
  7.         NSString *name = [[NSString alloc]initWithUTF8String:_dyld_get_image_name(i)];  
  8.         NSLog(@"--%@", name);  
  9.     }  
  10. }  

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


攻击者可能会给MobileSubstrate改名,但是原理都是通过DYLD_INSERT_LIBRARIES注入动态库。


那么,你可以通过检测当前程序运行的环境变量:

  1. void printEnv(void)  
  2. {  
  3.     charchar *env = getenv("DYLD_INSERT_LIBRARIES");  
  4.     NSLog(@"%s", env);  
  5. }  

未越狱设备返回结果是null,越狱设备就各有各的精彩了,尤其是老一点的iOS版本越狱环境。

iOS越狱与安全攻防实战技巧 本文介绍了iOS越狱后的多项安全攻防技术,包括通过launchd启动shell、使用zip替代tar进行数据压缩传输、编写Cycript自动接听脚本、SSLTheft注入与NSURLConnection钩子技术、SpringBoard启动注入实验、PBKDF2加密主密钥、代码优化对反汇编的影响,以及应用程序篡改响应机制的构建。 阅读详情

相关推荐

iOS逆向 - 应用安全攻防(越狱与非越狱)

iOS 逆向篇章目录 : • 1️⃣、RSA加密原理&密码学&HASH • 2️⃣、应用签名原理及重签名 (重签微信应用实战) • 3️⃣、shell 脚本自动重签名与代码注入 • 4️⃣、重签应用调试与代码修改 (Hook) • 5️⃣、Mach-O文件 • 6️⃣、Hook / fishHook 原理与符号表 • 7️⃣、LLDB由浅至深 • 8️⃣、lldb高级篇 Chisel 与 Cycript • 9️⃣、越狱初探 • ????、实战篇-钉钉打卡插件 前言 逆向篇章从前导知识到工具

Appleteachers的博客 1347

iOS越狱检测总结

在之前的文章中,已经带大家一起制作了一个。本文就和大家一起学习整理一下iOS系统中有哪些越狱检测的点,一起完善我们的Tweak。

weixin_42454310的博客 2517

iOS越狱技术演进:从漏洞利用到系统级安全攻防实战解析

系统级访问是移动安全领域的核心概念,它指应用程序突破沙盒限制获取底层操作系统控制权的能力。其原理通常涉及利用内存破坏、权限提升等漏洞链,结合内核补丁或代码注入技术绕过代码签名、沙盒等安全机制。这项技术的价值在于为安全研究、自动化测试和系统定制提供了深度分析环境,是理解现代操作系统安全模型的重要途径。在iOS生态中,随着苹果引入PAC(指针认证码)、PPL(页保护层)等硬件级安全特性,系统级访问的实现方式已从传统内核补丁演变为更复杂的工程化攻击链。本文聚焦iOS 17至未来版本,深入剖析越狱技术如何应对这些高

weixin_34348174的博客 319

[iOS]判断设备是否越狱

若越狱设备没使用Cydia商店,这种判断检测不准。若设备是不完美越狱,已经回退为未越狱状态,这种判断也不准。可以收集常见的越狱文件,定个标准判断手机中存在一个或多个,表示手机已经越狱。利用非越狱手机没权限查看Applications来判断。

Gamin 3345

iOS无根越狱Rootless技术解析:原理、工具链与安全攻防新挑战

在iOS安全领域,代码签名和沙盒机制是保障系统封闭性的核心基石。传统越狱通过修改系统根分区获取权限,而Rootless(无根)越狱则另辟蹊径,它利用CoreTrust等系统漏洞,在用户空间构建特权环境,实现了不篡改系统分区的权限提升。这项技术的核心价值在于其隐蔽性和持久性,它通过符号链接和环境变量劫持,在`/var/jb`目录下模拟系统环境,使得传统基于文件扫描的越狱检测手段近乎失效。在应用场景上,Rootless催生了以TrollStore为代表的永久签名应用分发方式,并成为安全研究、逆向工程和系统定制的

weixin_27875131的博客 333

jailbreakdetection:iOS越狱检测分析-越狱和越狱的iOS设备的比较

越狱检测 关于可以用来以大大改进和更好的方式检测越狱设备的各种方法的文档。 包含越狱在iOS系统上所做的更改的差异,并将越狱与越狱系统进行比较。 以及可直接在应用程序中使用的源代码,以检测系统状态(越狱或越狱)。 未来的工作要求: 将此代码库转换为库并提供API,以便开发人员可以直接集成到其应用程序中。 扩展适用于较新/最新设备和iOS版本的工作。 添加更多有效的支票或删除任何多余的支票。 减少误报。 在越来越多的设备上进行测试。 从版本10开始必须测试和更新(尤其是phoenix,yalu,liberiOS,elektra,apptap相关更改)。

IOS - 越狱检测

越狱后会产生额外的文件,通过判断是否存在这些文件来判断是否越狱了,可以用fopen和FileManager两个不同的方法去获取。frida -U -f 包名 --no-pause -l 过越狱检测.js。包名 可以用 frida-ps -Ua来查看, 然后更改生成的js路径脚本。利用URL Scheme来查看是否能够代开比如cydia这些越狱软件。在启动就注入进去, -f是通过spawn,也就是重启apk注入js。

Codeoooo 博客 4273

二、基于C语言的JPEG解码代码详解

// JPEG解码 // 输入JPEG后输出Bitmap #include <stdio.h> #include <stdlib.h> #pragma warning(disable : 4996) unsigned int BuffIndex; // JPEG数据的位置 unsigned int BuffSize; // JPEG数据的大小 unsigned int BuffX; // 图像的横向尺寸 unsigned int BuffY; //

m0_37633745的博客 4452

iOS手机绕过App的越狱检测

iOS越狱之后,某些App会检测到iOS设备已越狱后,一些功能就会被禁用,导致无法正常使用App里面的所有功能 1.iOS绕过越狱检测的所需环境 Cydia 、Liberty 2.添加Cydia源 (1).在手机桌面上找到Cydia的图标,点击进入 (2).先点击下方软件源,然后再右上角编辑 (3).点击添加 (4).在弹框中输入要添加的源 雷锋源 http://apt.abcydia.com 或 威锋源 http://apt.feng.com

哆啦安全 1万+

实战Nocobase插件开发:如何用yarn pm命令快速创建和测试API接口插件

本文详细介绍了如何使用Nocobase插件开发工具快速创建和测试API接口插件,涵盖从环境配置、插件骨架生成到数据模型定义和接口实现的完整流程。通过yarn pm命令简化开发步骤,帮助开发者高效构建支持CRUD的API插件,适用于低代码平台开发场景。

weixin_29313239的博客 456

SAP ABAP VL09 BAPI VL 216

ls_batch_item-fact_unit_denom = ls_lips_split-umvkn. "销售数量转换为 SKU 的值(分母)ls_batch_item-fact_unit_nom = ls_lips_split-umvkz. "销售数量转换成SKU的分子(因子)ls_batch_item-sales_unit_iso = ls_lips_split-meins. "被拆分DN基本单位。

ChampaignWolf的专栏 2299

iOS 逆向 - 应用安全攻防(越狱与非越狱)

1️⃣ : 代码混淆可以很有效的大量增加攻击者的分析耗时 , 增大干扰性 .2️⃣ : 代码混淆可以很轻松的对已有工程进行处理 .3️⃣ : 加入混淆后对正向人员正常开发基本没有影响 .4️⃣ : 完全可以利用宏定义的机制 , 灵活处理 , 例如类名方法名每次运行都是随机字符串 .单一的防护手段往往不足以保证安全 , 多重防护手段结合使用 , 能起到更好效果 .不要给防护代码留下明显的痕迹 , 尤其在UI层面 ( 例如闪退 , 弹框等等 ) .

网络安全学习教程分享 2288

【Verilog】valid-ready双向握手机制 ——很绕但是很有意思

valid-ready双向握手机制。

GalaxyerKw的博客 1万+

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

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

1017

基于禾赛32线雷达和Xsens MTi-G-710 组合导航模块,松灵Scout mini 底盘实现 Cartographer 3D 建图过程

地下车库 Cartongrapher 3D建图

yhy_yhy13053117的博客 3936

【RH850/U2A】:功能安全

功能安全相关

3130

iOS安全攻防越狱检测的攻与防

越狱检测的攻与防在应用开发过程中,我们希望知道设备是否越狱,正以什么权限运行程序,好对应采取一些防御和安全提示措施。iOS7相比之前版本的系统而言,升级了沙盒机制,封锁了几乎全部应用沙盒可以共享数据的入口。即使在越狱情况下,限制也非常多,大大增加了应用层攻击难度。比如,在iOS7之前,我们可以尝试往沙盒外写文件判断是否越狱,但iOS7越狱后也无该权限,还使用老方法检测会导致误判。那么,到底应该如何

Kaitiren的专栏 1889

姿态传感器/陀螺仪之SC7A20HTR是应用驱动程序设计

define SC7A20_CTRL1_PM_100HZ (0x5 << 4) // 正常模式,100Hz输出数据速率(ODR)// 用于存储6字节的原始数据(X_L, X_H, Y_L, Y_H, Z_L, Z_H)#define SC7A20_WHO_AM_I_VALUE 0x11 // 读取WHO_AM_I寄存器应该返回的值。// 但HAL_I2C_Mem_Read按顺序读,data[0]是X_L(低8位),data[1]是X_H(高8位)MX_I2C1_Init();

corlin6688的博客 757

iOS安全攻防实战:从IPA逆向到越狱检测与绕过全流程详解(附脚本)

iOS 安全攻防是系统工程,从架构理解到逆向分析,从动态调试到漏洞利用,每一环都依赖扎实的工具链与持续的实践。掌握本文梳理的流程与脚本,即可构建完整的 iOS 安全测试能力。

xlb8888888的博客 729

【自适应滤波】自适应UKF,基于新息自适应调节Q和R,场景为雷达跟踪与滤波、MATLAB实现

本文提出了一种基于新息协方差匹配的自适应UKF(CM-AUKF)算法,用于解决噪声统计未知或时变场景下的目标跟踪问题。通过实时调整过程噪声协方差Q和观测噪声协方差R,CM-AUKF显著提升了跟踪精度和稳定性。仿真结果表明,相比传统UKF,CM-AUKF在位置和速度估计误差上分别降低了约50%和30%,且无需人工调参。该算法适用于无人机导航、雷达跟踪等动态环境,MATLAB代码可直接运行复现结果。自适应曲线显示算法能有效收敛到真实噪声参数,验证了其自适应能力。

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 329

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

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

  Frida 是 一款有趣的手机应用安全分析工具。   文章参考:Bypass Jailbreak Detection with Frida in iOS applications   在 Mac Terminal 中安装 Frida:pip install frida (PS:如果 pip 版本过低可导致安装失败,尝试升级 pip :pip install --upgrade p...

1006

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

上一篇: iOS 开发之 URL Scheme
下一篇: iOS安全攻防(二十一):废除应用程序的ASLR特性
直隶码农
博客等级 码龄19年 95粉丝 103原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值