论坛首页 移动安全专区 阅读主题

[原创] iOS越狱检测app及frida过检测

330 浏览 13 回复
#1 楼主 2026-06-01 21:09:18
近期学习ios逆向,也为了熟悉一下iOS开发正向。用objective-c整了一个越狱检测的crackme,然后用frida过一遍自己写的检测(真是没事找事)。代码粗糙,请见谅。 克隆项目,再用xcode安装到手机上利用stat检查一些越狱后才有的敏感路径,如:/Applications/Cydia.app 和 /usr/sbin/sshd,以此来判断是否越狱。stat判断文件是否存在, 返回0则为获取成功,-1为获取失败。可通过hook stat,过掉检测 越狱后会产生一些特殊的链接库,ipa可以通过_dyld_get_image_name来获取所有的链接库,再遍历匹配,判断是否为越狱设备。
可以通过分析找到ipa检测的dylib,再hook _dyld_get_image_name,将返回替换为合法dylib,过掉检测。越狱后会在手机上安装越狱设备,如cydia。可以通过 -[UIApplication canOpenURL:] 来检测是否能启动app。可hook -[UIApplication canOpenURL:] 替换返回过掉检测。但canOpenURL方法 返回是个 BOOL,即YES/NO,也就是1和0的宏。但在Interceptor.attach里用 retval.replace()总是会导致app崩溃(不知道原理,望大佬指点)。
所以使用 Interceptor.replace() + NaviteCallback, 替换掉方法,使其固定返回 0,也就是 NO。但这个解法,也不能算是好方法。。。越狱后会产生特殊的文件和目录,可以通过 fileExistsAtPath 来检测,直接hook过掉越狱后为root权限,可以在私有路径如 /private/ 下创建文件。如果创建文件无异常则越狱,反之。可通过 ObjC.classes.NSError.alloc() 构建一个异常写入ipa检测的异常指针中越狱后有些文件会被移动,但这个文件路径又必须存在,所以可能会创一个文件链接。ipa可以检测一些敏感路径是否是链接来判断是否越狱。这里仅过掉路径检测(符号链接不会过T.T)未越狱的设备是无法fork子进程hook fork查看是否有注入异常的类,比如HBPreferences 是越狱常用的类,再用 NSClassFromString 判断类是否存在通过分析找出检测的类名,再去hook NSClassFromString通过getenv函数,查看环境变量DYLD_INSERT_LIBRARIES来检测是否越狱hook getenv检测的正向代码在项目的 JailBreakCheek 类下。单独过这些检测基本没啥难度,直接hook。但在真实app中还是重点在分析中,如何找到这些具体检测的点。这次分享的frida代码有点粗糙,啊哈哈,要实际使用还得再优化一下。并且可以多看看frida官方的脚本网站fc3K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6U0L8$3c8W2M7$3S2S2M7X3g2Q4x3X3g2X3M7X3W2V1j5g2)9J5k6i4u0W2i4K6u0r3后面有时间的话,再分享些其他类型的检测如frida检测,混淆代码或加固之类。

---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-277509.htm
#2 2026-06-01 21:09:18
#3 2026-06-01 21:09:18
感谢分享
#4 2026-06-01 21:09:18
感谢分享。
#5 2026-06-01 21:09:18
有ipa文件提供下嘛
#6 2026-06-01 21:09:18
wanttobeno


有ipa文件提供下嘛

app在 准备 里,用xcode安装
#7 2026-06-01 21:09:18
只看到源码,编译好的ipa
#8 2026-06-01 21:09:18
tql
#9 2026-06-01 21:09:18
问下楼主,xcode里用模拟器(ios 17.5)跑不起来,是因为版本的问题吗?
#10 2026-06-01 21:09:18
Colbert仔


问下楼主,xcode里用模拟器(ios 17.5)跑不起来,是因为版本的问题吗?

确认了:源码里的是ios13以下的
#11 2026-06-01 21:09:18
有个app需要定制过检测插件可以吗
#12 2026-06-01 21:09:18
frida -U -n 进程名称 -l bypass_jailbreak.js 为啥我这样运行你的脚本 app很快挂了呢?
#13 2026-06-01 21:09:18
mb_kumzialx


frida -U -n 进程名称 -l bypass_jailbreak.js 为啥我这样运行你的脚本 app很快挂了呢?

系统版本问题吧
#14 2026-06-01 21:09:18
mb_kumzialx


frida -U -n 进程名称 -l bypass_jailbreak.js 为啥我这样运行你的脚本 app很快挂了呢?

这个就是版本问题,有的需要使用低版本才可以,比如14系统的使用frida15.1

请登录后参与讨论

立即登录 注册账号