一 需求和目的:
逆向的時候出現內核方法, 想要更進一步調試, 因為ios 的內核調試比較困難
所以找了折中的方案,調試macos 內核
二: 調試準備
1: macos 主機上安裝虛擬機 VMware funsion, 自己google安裝步驟
2: 下載鏡像
??目前我能找到的鏡像都是dmg, 而且都是存放百度網盤的, 下載速度慢的可以, 限速限的真是夠可以的,【我沒時間,如果哪個熱心的紅領巾把它給逆了,記得傳一份給我】沒有辦法只有自己制作iso 鏡像, 可以看下一篇文章macos系統鏡像iso 的制作, 注意虛擬機和主機系統應該一致,否者會出現各種惡心問題, 比如: 調試能斷下來,按continue 后 ,但是無法進入桌面
3: 下載KDK (內核調試工具): 下載地址: https://developer.apple.com/download/more/
??一定要根據系統版本來確定KDK 的版本,使用命令行: sw_vers | grep BuildVersion 來查看系統編譯版本, 或者使用界面查看
5: 接下來關閉SIP[系統正當性保護模式]
?它禁止讓軟件以root的身份在mac 上運行 ,這是osx 10.11 系統以后才有的機制
關閉SIP: 首先要進入恢復模式, 很多資料說系統重啟, 按住Command +R 進入恢復模式, 嘗試過, 根本進不去, 我懷疑Command+R 對虛擬機是無效的, 在虛擬機軟件上找到了這個
啟動到固件: 會進入到下面的界面: 上下鍵移動到enter setup
然后選中Boot from a file 繼續下一步:
然后選中Recovery HD 繼續下一步:
然后選中com.apple.recovery.boot 繼續下一步!!
選中boot efi:繼續, 隨后會進入到蘋果啟動界面,最后進入恢復模式, 然后來到下面的界面, 選中實用工具
然后打開終端, 輸入csrutil disable, 會提示你成功關閉
重啟后, 進入到系統后, 終端輸入csrutil status ,查看SIP 是否關閉,如下圖:
6: 虛擬機中替換成調試內核
替換內核: KDK是安裝在/Library/Developer/目錄下, 注意: 一定是從根目錄下開始查找這個Library,否則找不到, 將目錄下的kernel.development 拷貝到/System/Library/Kernels/中
即終端中執行命令:
sudo cp /Library/Developer/KDKs/KDK_10.12.6_16G29.kdk/System/Library/Kernels/kernel.development /System/Library/Kernels/
7: 然后輸入命令設置boot-args ,使用nvram 將虛擬機設置成調試模式:
sudo nvram boot-args="debug=0x141 kext-dev-mode=1 kcsuffix=development pmuflags=1 -v"
1>>boot-args:系統的啟動參
2>>debug=0×141,表示系統可以進行遠程鏈接調試
3>>kext-dev-mode=1允許加載未簽名kext
4>>kcsuffix=development 允許我們啟動系統,通過development,與之前我們copy到/Systems/Library/Kernel下的kernel.development對應,如果我們之前拷貝的是kernel.debug,那么這里填kcsuffic=debug
5>>pmuflags=1關閉定時器
6>>-v顯示內核加載信息.
8: 在清除kext緩存 sudo kextcache -invalidate / 目的是讓虛擬機系統的kext cache無效,使用新的內核調試.
9: 重啟虛擬機即可, sudo reboot
11: 需要源碼調試的話: 現在虛擬機中查詢xnu 的版本命令uanme -v ,這里我的版本為: xnu-3789.70.16~2
源碼地址: https://opensource.apple.com/tarballs/xnu/
找到對應的版本源碼: 下載后, 放入到主機中/Library/Cache/com.apple.xbs/xnu/中,如果沒有這個目錄自己創建
注意事項:
1>上述的內核調試是有問題的:
一旦內核啟動并且調試器繼續運行,內核就不能再從調試器中停止。所以我們需要重新設置:
$sudo nvram boot-args="debug=0x144 kext-dev-mode=1 kcsuffix=development pmuflags=1 -v"
之后如果想再運行時斷下,就在虛擬機中按組合鍵就可以重新調試
Command-Option-Control-Shift-Escape
原因: 0x141: DB_DBG_POS_CORE && DB_ARP && DB_HALT , 0x144:DB_DBG_POS_CORE && DB_ARP && DB_NMI [即可以運行是中斷]
2> 連上后, 出現Waiting for link to become available 的情況很多, 就是一直在等待,原因: 我安裝VMware Tools 必須推出了OS Base System,進而到值會出現上述問題解決方案: 可以重啟一下CD/DVD, 當然看到要重新安裝系統,則可以退出就行