gpt4 book ai didi

swift - 从沙盒应用程序启动的应用程序不是沙盒

转载 作者:行者123 更新时间:2023-12-02 02:41:07 25 4
gpt4 key购买 nike

我想在 macOS 上运行一个不受信任的应用程序,但不允许它连接到互联网。

实现此目标的最佳方法是什么?

我最好的想法是在 xcode 中快速构建一个简单的启动应用程序,并将这个启动器沙盒化。据我了解,从沙盒应用程序启动的应用程序本身应该是沙盒的。

所以我的启动器应用程序看起来像这样:

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {

@IBOutlet weak var window: NSWindow!


func applicationDidFinishLaunching(_ aNotification: Notification) {
NSWorkspace.shared.open("/path/inside/bundle/to/untrustedApp.app")
print ("after")

}

func applicationWillTerminate(_ aNotification: Notification) {

}


}

(请注意,我使用了 NSWorkspace.shared.open,因为 NSWorkspace.shared.openApp 没有做任何事情,甚至没有调用完成处理程序。)

我在 xcode 中添加了沙箱功能,并确保所有的箱子都没有被选中。我做错了什么吗?还是我理解有误?

最佳答案

一种方法是使用 NSTask 直接在不受信任的应用程序中启动 Mach-O 可执行文件:

  • NSTask 继承父应用程序的沙箱(参见 here )
  • NSTask 允许您指定 Mach-O 可执行文件,这是必需的,因为 untrusted.app 有自己的代码签名、plist 文件和权利(或缺少权利)

例如,下面的普通应用程序将从以下位置获取 Mach-O 可执行文件的名称:

/path/to/your/ParentApp.app/relative/path/to/Restricted.app

For example, for firefox:

/path/to/your/ParentApp.app/relative/path/to/Restricted.app/Contents/MacOS/firefox

Swift:

func applicationDidFinishLaunching(_ aNotification: Notification) {

let theMainAppBundle = Bundle.main.bundlePath
let theChildAppBundle = theMainAppBundle + ("/relative/path/to/RestrictedApp.app")
let childBundleExecutable = Bundle(path: theChildAppBundle)?.executablePath
Process.launchedProcess(launchPath: childBundleExecutable ?? "", arguments: [""])
NSApp.terminate(self)

}

objective-c :

(void)applicationDidFinishLaunching:(NSNotification *)aNotification {

NSString *theMainAppBundle = [[NSBundle mainBundle] bundlePath];
NSString *theChildAppBundle = [theMainAppBundle stringByAppendingString:@"/relative/path/to/RestrictedApp.app"];
NSString *childBundleExecutable = [NSBundle bundleWithPath:theChildAppBundle].executablePath;
[NSTask launchedTaskWithLaunchPath:childBundleExecutable arguments:[NSArray arrayWithObjects:@"", nil]];
[NSApp terminate:self];

}

关于swift - 从沙盒应用程序启动的应用程序不是沙盒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59401687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com