检测正在运行的应用程序是否为沙箱

时间:2013-06-18 15:49:29

标签: objective-c c macos sandbox core-foundation

考虑到应用程序的pid,有没有办法以编程方式检测该应用程序是否在OSX沙箱环境中运行?

理想情况下,我想知道某个地方是否有API调用,最好是C,而不是Objective-C(对于一个守护进程,所以不使用Cocoa),但如果没有,是否还有其他方法可以检查?

3 个答案:

答案 0 :(得分:3)

@Linuxios对于CoreFoundation调用是正确的。事实上,有一些组合时,可以用来解决这个问题,它基于对 SecStaticCodeCheckValidityWithErrors的调用

对于任何可能需要或需要以编程方式测试沙盒应用的人,可以按照this blog

此外,文章的完整代码已添加到Github here

答案 1 :(得分:1)

首先,您必须从pid获取应用程序的路径,然后您可以使用命令codesign --display --entitlements - app_path查看所有权利。如果应用程序将权利com.apple.security.app-sandbox设置为true,那么它将被沙箱化。

你可以看看here

答案 2 :(得分:0)

要检测Flex / AIR / AS3中的沙箱,您可以使用以下kludge。同样的方法也应该在objc中起作用。如果Documents文件夹完全为空,那么这将无法工作的唯一条件。或者您可以使用任何其他不受沙箱限制的文件夹。

            var file:File = File.userDirectory;
            var a:Array = file.nativePath.split("/");
            var userName:String = a[2];
            var docFolder:File = new File("/Users/" + userName + "/Documents/");
            var dirList:Array = docFolder.getDirectoryListing();
            if (dirList.length>0) {
                docDirectoryDisplay.text = "App is NOT sandboxed.";
            } else {
                docDirectoryDisplay.text = "App is sandboxed.";
            }