2013-06-18 78 views
4

給定應用程序的pid,是否有任何方法以編程方式檢測該應用程序是否在OSX沙箱環境中運行?檢測正在運行的應用程序是否被沙盒化

理想情況下,我想知道是否有API調用的地方,最好在C,而不是Objective-C(對於守護進程,所以不使用可可),但如果沒有,是否有任何其他方式檢查?

+0

您可能會使用CoreFoundation調用。 – Linuxios

+0

@Linuxios,我認爲他們可能是,但你知道會是什麼,我還沒有找到一個嗎? – TheDarkKnight

+0

糾正我,如果我錯了,但出於安全原因,通常應該沒有辦法。 – Medinoc

回答

3

@Linuxios對於有一個CoreFoundation調用是正確的。事實上,有幾個是結合時,可以用來解決這個問題,它是基於調用SecStaticCodeCheckValidityWithErrors

對於任何人都可以想,或需要通過編程測試被沙盒可以按照this blog應用程序。

此外,文章的完整代碼已添加到Github​​。

0

首先,您必須從pid獲取應用程序的路徑,然後您可以使用命令codesign --display --entitlements - app_path查看所有權利。如果應用程序的權利com.apple.security.app-sandbox設置爲true,那麼它是沙盒。

你可以看看here

+0

謝謝,雖然我寧願一個函數調用,因爲我真的不想解析系統調用的輸出。如果Apple要更改權利的名稱,我的守護程序將停止正常運行。我知道我也可以使用asctl命令,它打印出'運行應用程序沙箱啓用',但我不想使用它,出於同樣的原因。 – TheDarkKnight

+0

codesign也接受pid作爲參數,所以不需要從pid中找到路徑。 – TheDarkKnight

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."; 
      } 
相關問題