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

时间:2018-10-28 06:07:37

标签: ios swift sandbox jailbreak theos

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

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

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

我想念什么吗?

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

如果您仍在寻找答案,则必须将com.apple.private.security.no-sandbox权利添加到您的应用中。

答案 2 :(得分:0)

通过将com.apple.private.security.no-container添加到我的权利文件并使用codesign添加它们,我已经能够解决此问题。

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

答案 3 :(得分:0)

我喜欢你的plist permisson change。如果您想要替代方法,例如@Creker所说,请尝试stat中的accessC

当尝试检测在越狱设备上运行的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;