蘋果系統(tǒng)桌面上有許多應(yīng)用顯示未讀消息數(shù)量旨涝,看著讓人不是太舒服套媚,接下來(lái)我們就自己動(dòng)手寫一個(gè)插件,讓它一鍵消失扮碧。
1. 使用USB連接手機(jī)(USB連接手機(jī)操作點(diǎn)擊這篇文章)然后使用ps -A命令查看當(dāng)前進(jìn)程趟章,根據(jù)springboard這個(gè)名稱我們很容易找到這個(gè)就是桌面,如下圖:
- 1.1 從上面的springboard.app我們就清楚慎王,其實(shí)管理系統(tǒng)桌面應(yīng)用的也是一個(gè)應(yīng)用蚓土,所以用正常分析app的思路即可,沒(méi)啥可怕的赖淤。
2. 通過(guò)下面命令蜀漆,將桌面應(yīng)用拷貝到當(dāng)前目錄:
scp -r -P 12345 root@127.0.0.1:/System/Library/CoreServices/SpringBoard.app .
3. 使用class-dump導(dǎo)出頭文件,命令如下:
class-dump -H SpringBoard -o ./SpringHeaders
4. SpringBoard的Macho文件只用7.5M,很快就完成了,這個(gè)后面分析會(huì)用到,如下圖:
5. 在Cydia中安裝Crcript,使用下面命令附加進(jìn)程咱旱,進(jìn)入cy動(dòng)態(tài)調(diào)試:
cycript -p SpringBoard
6. 使用下面命令格式化打印層級(jí)結(jié)構(gòu):
UIApp.keyWindow.recursiveDescription() .toString ()
7. 可以分析得到SBIconView應(yīng)該就是桌面每個(gè)應(yīng)用的對(duì)象了确丢,如下圖:
8. 為了確定SBIconView是不是應(yīng)用圖標(biāo),我們隨便找一個(gè)對(duì)象地址吐限,對(duì)該對(duì)象進(jìn)行簡(jiǎn)單的隱藏操作鲜侥,會(huì)發(fā)現(xiàn)SBIconView確定就是桌面應(yīng)用圖標(biāo)對(duì)象,如下圖:.
9.通過(guò)Badge關(guān)鍵詞搜索诸典,我們可以得出徽標(biāo)的顯示就是SBIconParallaxBadgeView這個(gè)類:
10. 接下來(lái)使用Sublime打開之前dump出來(lái)的SpringBoard頭文件描函,搜索SBIconParallaxBadgeView:
11. 通過(guò)分析,我們發(fā)現(xiàn)有一個(gè)init方法,這里直接采用最簡(jiǎn)單暴力的方式狐粱,就是hook這個(gè)init方法赘阀,讓其初始化失效,所以hook代碼如下:
%hook SBIconBadgeView
- (id)init{
return nil;
}
%end
12. 接下來(lái)用Monkey創(chuàng)建tweak
13. 這里的BundID默認(rèn)是come.apple.SpringBoard,即對(duì)應(yīng)我們的系統(tǒng)作用應(yīng)用ID脑奠,如果要hook其他應(yīng)用,對(duì)應(yīng)填上其他應(yīng)用BundID即可:
14. 修改對(duì)應(yīng)的IP地址幅慌,端口號(hào)及密碼宋欺,默認(rèn)密碼是alpine,我這里設(shè)置了免密登錄,所以不用填寫密碼:
15. 如果每次寫一個(gè)Cydia插件都去配置這個(gè)環(huán)境變量,會(huì)變得很繁瑣齿诞,我們可以直接進(jìn)入vi ~/.zshrc文件配置環(huán)境變量酸休,這樣X(jué)Code中的參數(shù)保持默認(rèn)即可:
export MonkeyDevPath=/opt/MonkeyDev
MonkeyDevDeviceIP=127.0.0.1
MonkeyDevDevicePort=12345
export PATH=$PATH:$MonkeyDevPath/bin
16. 編寫hook代碼,會(huì)發(fā)現(xiàn)實(shí)現(xiàn)這個(gè)功能的代碼其實(shí)很簡(jiǎn)單祷杈,如下圖:
17. 接下來(lái)編譯即可斑司,運(yùn)行后我們會(huì)發(fā)現(xiàn)桌面所有應(yīng)用的徽標(biāo)都消失可,看著就莫名舒暢:
18. 進(jìn)入Cydia,我們發(fā)現(xiàn)自己寫的插件已經(jīng)安裝完畢但汞,如下圖:
總結(jié):當(dāng)我們要hook某個(gè)APP實(shí)現(xiàn)相應(yīng)功能的時(shí)候宿刮,首先從分析入手,思路是關(guān)鍵私蕾,逐一定位所需hook點(diǎn)僵缺,找到關(guān)鍵代碼,對(duì)其進(jìn)行hook踩叭。
我是Qinz,希望我的文章對(duì)你有幫助磕潮。