我需要穩定的方式來嘗試在iOS設備上運行未簽名的可執行文件,以測試設備是否已越獄(即允許運行未簽名代碼)。在iOS應用程序中運行未簽名代碼以測試越獄
我寫了一個小的可執行文件,基本上什麼都不做。
int main(int argc, char *argv[]) {
return 23;
}
我已經編譯並在iOS設備上成功運行(都是Jailbroken而不是)。
我已經將這個可執行文件添加到應用程序包並將應用程序部署到iOS設備。
這會導致設備上的可執行文件的只讀版本。我試圖chmod這個文件來給它執行權限,但是這個失敗了,所以我把它複製到應用程序的tmp目錄中,在那裏我可以用可執行權限chmod。
其他問題已經建議使用execve調用可執行文件,但是這會用新文件替換正在運行的進程,這會殺死應用程序。叉()總是失敗,所以這不是一個選項。 System()需要一個shell,並且有可能在沒有shell的情況下進行越獄,這仍然允許未簽名的代碼運行,所以這已經結束了。 Popen()分叉,這樣就行不通了。
有趣的是,我發現了,要求我的可執行execv在一個正常的設備會導致「不允許操作」的錯誤,而稱這是一個越獄設備上導致「權限被拒絕」的錯誤。只有這樣才能用於越獄檢測,除了如果發生允許execv進行越獄的情況,應用程序將立即崩潰,因爲它的進程將被替換。
根據this,iBooks執行此操作執行越獄檢測,但似乎使用fairplayd二進制執行它的execve調用。
有沒有人對運行可執行文件或使用fairplayd有任何建議?
系統傳遞到外殼和運行未簽名代碼並不一定意味着你必須有一個shell命令。 – richie
對我來說,無論手機是否越獄,系統總是會返回32512,表示無法找到該文件。 – richie
@richie,好的,抱歉。我必須在我的小越獄「hello world」程序(安裝在'/ Applications /')中運行這個,這是我通常在回答越獄問題時所做的。我用'system()'得到和你一樣的返回碼。我已經使用'execlp'更新了我的答案。我確保使用安裝到'/ var/mobile/Applications'的應用程序來測試這個。再次,我的道歉。 – Nate