iOS - 在越狱设备上访问沙箱外的文件系统

iOS - Accessing filesystem outside sandbox on a jailbroken device

我正在使用 theos [application_swift] 开发一个应用程序,并希望在沙箱之外访问文件系统。

据我了解,将 [application_swift] 与 theos 一起使用应该可以让我访问沙箱外的文件,但我尝试使用 FileManager.default.fileExists(atPath:) 访问我喜欢的文件和结果是找不到文件。

值得一提的是我显然 运行 在越狱设备上 运行 11.2.

我是不是漏掉了什么?

越狱不会向所有人开放所有内容,通常情况下并非如此,并且根据特定的越狱可能会打开不同的内容。例如,iOS 11 上的 electra 允许我从常规应用程序内部读取 SMS 数据库。但是我还是看不懂别人的沙箱。这完全取决于越狱是如何实现的以及它在内核中修补了什么。甚至可能是您无法访问沙箱之外的任何内容。这实际上更适合保护 AppStore 应用程序的安全性。

它也可以更简单 - Swift 知道您不应该尝试访问哪些路径并抛出错误,甚至无需实际尝试访问它们。尝试使用 C 或 Objective-C 访问文件,因为这些已被证明可以在没有任何人为限制的情况下工作。

如果您仍在寻找此问题的答案,则必须将 com.apple.private.security.no-sandbox 授权添加到您的应用程序。

我已经能够通过将 com.apple.private.security.no-container 添加到我的权利文件并使用代码签名来解决这个问题。

codesign --entitlements app.entitlements -f -s "iPhone Developer: xxxxxxxxxxxxxxxxx" MyApp.app

我喜欢你的plist permisson change。如果你想要一个替代方案,就像@Creker 说的,尝试 stataccess from C.

我已经看到你的问题,当试图在越狱设备上检测 Frida 运行 时:

    NSString *frida_on_filesystem = @"/usr/sbin/frida-server";
    NSURL *theURL = [ NSURL fileURLWithPath:frida_on_filesystem isDirectory:NO ];
    NSError *err;
    
    if ([ theURL checkResourceIsReachableAndReturnError:&err]  == YES )
        return YES;
    
    if ( err != NULL ) {
        NSLog(@"[*]Error in file check: %ld", (long)err.code);
        if ( err.code == 257 )
            NSLog(@"[*]Sandbox permission error.");
    }
    
    FILE *file;
    file = fopen(frida_on_filesystem.fileSystemRepresentation, "r");
    if ( !file )
        NSLog(@"[*]if ObjC APIs fails, fopen also failed!");

然后 access() - 从 libsystem_kernel.dylib 加载 - 有效:

return (access(frida_on_filesystem.fileSystemRepresentation, F_OK) == 0) ? YES : NO;