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 说的,尝试 stat
或 access
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;
我正在使用 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 说的,尝试 stat
或 access
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;