iOS如何判斷手機是否已越獄

2021-08-20 20:39:23 字數 2182 閱讀 9228

分享一篇關於安全攻防類-《越獄檢測的攻與防》

在應用開發過程中,我們希望知道裝置是否越獄,正以什麼許可權執行程式,好對應採取一些防禦和安全提示措施。

ios7相比之前版本的系統而言,公升級了沙盒機制,封鎖了幾乎全部應用沙盒可以共享資料的入口。即使在越獄情況下,限制也非常多,大大增加了應用層攻擊難度。比如,在ios7之前,我們可以嘗試往沙盒外寫檔案判斷是否越獄,但ios7越獄後也無該許可權,還使用老方法檢測會導致誤判。

那麼,到底應該如何檢測越獄呢?攻擊者又會如果攻破檢測呢?本文就著重討論一下越獄檢測的攻與防。

}  攻擊者可能會改變這些工具的安裝路徑,躲過你的判斷。

那麼,你可以嘗試開啟cydia應用註冊的url scheme:

[objc] 

view plain

copy if

]canopenurl

:[nsurl

urlwithstring

:@"cydia://package/com.example.package"

]])  

但是不是所有的工具都會註冊url scheme,而且攻擊者可以修改任何應用的url scheme。 

那麼,你可以嘗試讀取下應用列表,看看有無許可權獲取:

[objc] 

view plain

copy if

([[nsfilemanager

defaultmanager

]fileexistsatpath

:])  

越了獄的裝置是可以獲取到的:

攻擊者可能會hook nsfilemanager 的方法,讓你的想法不能如願。

那麼,你可以迴避 nsfilemanager,使用stat系列函式檢測cydia等工具:

[objc] 

view plain

copy

#import 

void

checkcydia(

void

)    

}  攻擊者可能會利用 fishhook原理 hook了stat。

那麼,你可以看看stat是不是出自系統庫,有沒有被攻擊者換掉:

[objc] 

view plain

copy

#import 

void

checkinject(

void

)    

}  如果結果不是 /usr/lib/system/libsystem_kernel.dylib 的話,那就100%被攻擊了。

如果 libsystem_kernel.dylib 都是被攻擊者替換掉的……

那也沒什麼可防的大哥你隨便吧……

那麼,你可能會想,我該檢索一下自己的應用程式是否被鏈結了異常動態庫。

[objc] 

view plain

copy

#import 

void

checkdylibs(

void

)    

}  通常情況下,會包含越獄機的輸出結果會包含字串: library/mobilesubstrate/mobilesubstrate.dylib 。

攻擊者可能會給mobilesubstrate改名,但是原理都是通過dyld_insert_libraries注入動態庫。

那麼,你可以通過檢測當前程式執行的環境變數:

[objc] 

view plain

copy

void

printenv(

void

)    

未越獄裝置返回結果是null,越獄裝置就各有各的精彩了,尤其是老一點的ios版本越獄環境。

iOS 判斷手機是否越獄

1.通過越獄後增加的越獄檔案判斷 通常情況下,手機越獄後會增加以下檔案 library mobilesubstrate mobilesubstrate.dylib bin bash usr sbin sshd etc apt判斷這些檔案是否存在,讓檔案新增到陣列中,遍歷陣列,如果存在任何乙個檔案,就...

紹棠 iOS 判斷手機是否越獄

需新增以下c語言庫 import import import include include import import import 1.通過越獄後增加的越獄檔案判斷 一般來說,手機越獄後會增加以下檔案 library mobilesubstrate mobilesubstrate.dylib b...

iOS知識學習 如何判斷手機是否為靜音模式

大神利用的方法是利用一段簡短的audio route在後台執行一下來監測是否是靜音狀態。然後匯入標頭檔案 import rbdmuteswitch.h 在你的inte ce中新增宣告的delegate inte ce mainviewcontroller uiviewcontroller 在你的實現...