給定應用程序的pid,是否有任何方法以編程方式檢測該應用程序是否在OSX沙箱環境中運行?檢測正在運行的應用程序是否被沙盒化
理想情況下,我想知道是否有API調用的地方,最好在C,而不是Objective-C(對於守護進程,所以不使用可可),但如果沒有,是否有任何其他方式檢查?
給定應用程序的pid,是否有任何方法以編程方式檢測該應用程序是否在OSX沙箱環境中運行?檢測正在運行的應用程序是否被沙盒化
理想情況下,我想知道是否有API調用的地方,最好在C,而不是Objective-C(對於守護進程,所以不使用可可),但如果沒有,是否有任何其他方式檢查?
@Linuxios對於有一個CoreFoundation調用是正確的。事實上,有幾個是結合時,可以用來解決這個問題,它是基於調用SecStaticCodeCheckValidityWithErrors
對於任何人都可以想,或需要通過編程測試被沙盒可以按照this blog應用程序。
此外,文章的完整代碼已添加到Github。
首先,您必須從pid獲取應用程序的路徑,然後您可以使用命令codesign --display --entitlements - app_path
查看所有權利。如果應用程序的權利com.apple.security.app-sandbox設置爲true,那麼它是沙盒。
你可以看看here。
謝謝,雖然我寧願一個函數調用,因爲我真的不想解析系統調用的輸出。如果Apple要更改權利的名稱,我的守護程序將停止正常運行。我知道我也可以使用asctl命令,它打印出'運行應用程序沙箱啓用',但我不想使用它,出於同樣的原因。 – TheDarkKnight
codesign也接受pid作爲參數,所以不需要從pid中找到路徑。 – TheDarkKnight
爲了檢測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.";
}
您可能會使用CoreFoundation調用。 – Linuxios
@Linuxios,我認爲他們可能是,但你知道會是什麼,我還沒有找到一個嗎? – TheDarkKnight
糾正我,如果我錯了,但出於安全原因,通常應該沒有辦法。 – Medinoc