需求:去掉越獄手機桌面app的角標(biāo)數(shù)字,如圖
分析:
手機桌面其實是一個App,叫SpringBoard
找到App所在的手機位置,把到App的Mach-O文件(SpringBoard)拷貝出來(大約9M)
使用class-dump導(dǎo)出這個App頭文件
使用Cycript動態(tài)調(diào)試這個App,找App的Bundle id,控制器的所有子View,找到相應(yīng)的icon,通過猜測(icon,badge全局搜索)找到這最終的View
使用theos開發(fā)越獄插件
1.使用iFunBox找到App所在的手機位置
2.使用class-dump導(dǎo)出這個SpringBoard
頭文件
首先檢查這個Mach-O文件是否有加密,通過itool指令查看
otool -l SpringBoard | grep cycript
發(fā)現(xiàn)終端什么都沒有輸出
通過MarchOView這個mac程序檢查
也是沒有檢查到加密信息,那么這個就不需要脫殼
使用class-dump導(dǎo)出頭文件
class-dump -H SpringBoard -o Headers
3.使用cycript動態(tài)調(diào)式SpringBoard
3.1.登錄到越獄手機
3.2.使用cycript連接到SpringBoard
cycript -p SpringBoard
3.3.導(dǎo)入mjcript
@import mjcript
3.4.查看SpringBoard
bundle id
MJAppId
輸出
@"com.apple.springboard"
3.5.查看根控制器
MJRootVc()
輸出
#"<SBMainScreenAlertWindowViewController: 0x1372552f0>"
可以查看到根控制器的子控制器
MJChildVcs(#0x1372552f0)
`<SBMainScreenAlertWindowViewController 0x1372552f0>, state: appeared, view: <UIView 0x139c76220>
| <SBLockScreenViewController 0x136855600>, state: appeared, view: <SBLockScreenView 0x13632ee00>
| | <SBLockScreenDateViewController 0x1385dce80>, state: appeared, view: <SBFLockScreenDateView 0x13865f860>
| | <SBLockScreenStatusTextViewController 0x138603d90>, state: disappeared, view: (view not loaded)
| | <SBLockScreenNotificationListController 0x1384c8180>, state: appeared, view: <SBLockScreenNotificationListView 0x139b8bad0>
| | <SBLockScreenDeviceInformationTextViewController 0x1384d5be0>, state: appeared, view: <SBLockScreenDeviceInformationTextView 0x135fb8e60>
| | <MPUSystemMediaControlsViewController 0x13861ac90>, state: appeared, view: <UIView 0x13861c7c0> not in the window`
3.6.查看所有根控制器的子view
MJSubviews(#0x1589cbfc0.view)
3.7.讓這個view隱藏
#0x159f8ee80.hidden = 1
查看手機,數(shù)字角標(biāo)的確隱藏了.
再次讓他嘗試顯示
#0x159f8ee80.hidden = 0
這樣就確定了SBIconParallaxBadgeView
就是我們要找的類.
3.8.查看SBIconParallaxBadgeView
頭文件,使用subline把SpringBoard頭文件導(dǎo)入
cmd+p 全文搜索SBIconParallaxBadgeView
,按enter鍵盤
可以看到以下頭文件信息
#import "SBIconBadgeView.h"
#import "_UISettingsKeyObserver.h"
@class NSString, SBFParallaxSettings;
@interface SBIconParallaxBadgeView : SBIconBadgeView <_UISettingsKeyObserver>
{
SBFParallaxSettings *_parallaxSettings;
}
- (void).cxx_destruct;
- (void)_applyParallaxSettings;
- (void)settings:(id)arg1 changedValueForKey:(id)arg2;
- (void)dealloc;
- (id)init;
// Remaining properties
@property(readonly, copy) NSString *debugDescription;
@property(readonly, copy) NSString *description;
@property(readonly) unsigned long long hash;
@property(readonly) Class superclass;
@end
我們看到有init方法,return nil那么這個角標(biāo)就無法顯示了
4.使用theos,編寫插件
%hook SBIconParallaxBadgeView
- (id)init{
return nil;
}
%end
make && make package && make install
SpringBoard重啟后,發(fā)現(xiàn)角標(biāo)已經(jīng)消失了