我正在使用theos [application_swift]开发应用程序,并希望访问沙箱外部的文件系统。
据我了解,将[application_swift]与theos一起使用应该可以使我访问沙箱外部的文件,但是我尝试使用FileManager.default.fileExists(atPath:)
访问我喜欢的文件,结果是该文件不是找到。
值得一提的是,我显然在运行11.2的越狱设备上运行。
我想念什么吗?
答案 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
中的access
或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;