0

SecCodeCheckValidity動態代碼合法性檢查防止什麼樣的動態代碼修改?

執行簽名代碼的動態驗證。

SecStaticCodeCheckValidity

驗證一個靜態代碼對象。

此函數獲取並驗證代碼對象指定的代碼 上的簽名。它檢查所有密封組件的有效性,包括資源(如果有的話) 。如果指定了代碼,它將根據代碼 驗證代碼。如果所有這些條件都滿足,則調用成功。只要代碼未被修改,代碼 不受併發修改,並且結果只有效 ,此調用纔是安全的。如果底層文件系統 具有動態特性(例如網絡文件系統,聯合安裝或FUSE),則必須考慮在驗證後代碼的修改安全性從 更改。

因此,鑑於蘋果的代碼簽名描述,目前尚不清楚它們在這裏指的是什麼「動態characaters」。

回答

0

SecStaticCodeCheckValidity驗證應用程序是否在磁盤上。相反,SecCodeCheckValidity在運行時驗證應用程序內存中的是否符合相同的要求。

這會嘗試通過劫持,注入或其他傳統方法來修改內存代碼,方法是檢查它是否仍然使用有效簽名進行代碼簽名。

我記得在WWDC '09的某個地方聽到這種區別,如果我錯了,請糾正我。

如果你想查一些正在運行的代碼是否被蘋果簽署的,而不是由程序員指定一些指定的要求,你想:

SecRequirementCreateWithString(CFSTR("anchor apple"), ...) 

,然後將結果傳遞從SecRequirementRefSecCodeCheckValidity。在這種情況下,不需要與指定的要求進行交互,因爲您已經決定了哪些代碼可以接受,哪些是Apple簽署的任何代碼。

在生產代碼中,您可以使用csreq(1)編譯「anchor apple」的二進制版本,並使用SecRequirementCreateWithData而不是SecRequirementCreateWithString,這更快。

+0

它多久檢查一次「內存」? – PnotNP