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