需求:去掉越狱手机桌面app的角标数字,如图
分析:
手机桌面其实是一个App,叫SpringBoard
找到App所在的手机位置,把到App的Mach-O文件(SpringBoard)拷贝出来(大约9M)
使用class-dump导出这个App头文件
使用Cycript动态调试这个App,找App的Bundle id,控制器的所有子View,找到相应的icon,通过猜测(icon,badge全局搜索)找到这最终的View
使用theos开发越狱插件
1.使用iFunBox找到App所在的手机位置
2.使用class-dump导出这个SpringBoard
头文件
首先检查这个Mach-O文件是否有加密,通过itool指令查看
otool -l SpringBoard | grep cycript
发现终端什么都没有输出
通过MarchOView这个mac程序检查
也是没有检查到加密信息,那么这个就不需要脱壳
使用class-dump导出头文件
class-dump -H SpringBoard -o Headers
3.使用cycript动态调式SpringBoard
3.1.登录到越狱手机
3.2.使用cycript连接到SpringBoard
cycript -p SpringBoard
3.3.导入mjcript
@import mjcript
3.4.查看SpringBoard
bundle id
MJAppId
输出
@"com.apple.springboard"
3.5.查看根控制器
MJRootVc()
输出
#""
可以查看到根控制器的子控制器
MJChildVcs(#0x1372552f0)
`, state: appeared, view:
| , state: appeared, view:
| | , state: appeared, view:
| | , state: disappeared, view: (view not loaded)
| | , state: appeared, view:
| | , state: appeared, view:
| | , state: appeared, view: not in the window`
3.6.查看所有根控制器的子view
MJSubviews(#0x1589cbfc0.view)
3.7.让这个view隐藏
#0x159f8ee80.hidden = 1
查看手机,数字角标的确隐藏了.
再次让他尝试显示
#0x159f8ee80.hidden = 0
这样就确定了SBIconParallaxBadgeView
就是我们要找的类.
3.8.查看SBIconParallaxBadgeView
头文件,使用subline把SpringBoard头文件导入
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那么这个角标就无法显示了
4.使用theos,编写插件
%hook SBIconParallaxBadgeView
- (id)init{
return nil;
}
%end
make && make package && make install
SpringBoard重启后,发现角标已经消失了