一种检测是否越狱&获取设备唯一识别码的方式[更新]

测试过ios13可获取到boothash, ios14应该也可以(之前写错了/var, 应该是/才对)

#include <sys/mount.h>

struct statfs buf;
statfs("/", &buf);
NSLog(@"%s", buf.f_mntfromname);
char* prefix = "com.apple.os.update-";
if(strstr(buf.f_mntfromname, prefix)) {
    NSLog(@"未越狱, 设备唯一识别码=%s", buf.f_mntfromname+strlen(prefix));
} else {
    NSLog(@"已越狱, 没有设备唯一识别码");
}

如何防止statfs被hook:
statfs是一个bsd内核调用, 直接使用svc 80指令

image

如何防止svc指令被hook:
随机寻找系统模块中的一个svc指令, 然后BL跳转过去执行.

14 个赞

让我想起来之前逆灯塔,里面也会通过类似 stat -f 等命令去获取文件系统的某些信息

iOS 14.5测试不通过

1 个赞

https://github.com/jmpews/Dobby/blob/master/builtin-plugin/SupervisorCallMonitor/supervisor_call_monitor.cc

8 个赞

iOS13.3貌似不太行,为啥直接跳到越狱那行去了。

大佬牛逼,还有这种操作。。

1 个赞

大佬的骚操作还是多啊

这个唯一识别码升级系统后会发生改变吗?

1 个赞

升级系统会变, 抹机不会变

1 个赞

14.4.1 试了一下不行.

1 个赞

更新了代码重新试试呢

之前写错了, 更新了代码重新试试呢

试试更新后的代码呢

可以获取到了,但是不方便抹机测试.大佬厉害.
顺便试了试m1上运行,获取不到.越狱过的 12.5.1 获取不到.

1 个赞

是什么ios版本呢, 越狱后肯定获取不到所有可以检测越狱

66666膜拜

越狱会绕过 APFS Snapshot 加载机制使其挂载真正的文件系统 /dev/disk0s1s1 到 /
而M1应该是没有优先挂载 Snapshot 到 /机制. 这个检测应该是支持iOS 11.3以上
https://juejin.cn/post/6844904116272316424#heading-3

2 个赞

ok 通过

2 个赞

进来膜拜大佬,谢谢,好东西

那在越狱情况下,有什么办法可以读取这个设备唯一识别码么?