文章目录
需求
- 去掉越狱手机桌面app的角标数字
此教程所需要的工具/文件
- class-dump
- iTools
- OpenSSH(Cydia)
- iFile(Cydia)
- Cycript(Cydia)
- 一台越狱的iPhone
分析
- 手机桌面也是一个APP, 名字是SpringBoard
- 通过
PS
命令 和iFunBox
工具获取手机桌面的Mach-O
文件- 用
class-dump
将SpringBoard的头文件导出备用- 通过
Cycript
动态调试, 分析角标所在的View
4.1 找到bundle Id
4.2 获取当前控制前所有的子控件, 通过icon
锁定角标所在的View
4.3 通过icon, badge关键字全局搜索,找到最终的View- 使用
theos
开发越狱插件
1. 找出手机桌面 SpringBoard
的 Mach-O
文件
1.1 通过 ps -A
查看所有运行的APP
- 通过
Open-SSH
远程登录手机 - 登录成功使用
ps -A
查询所有运行的APP
- 根据上面的结果显示,SpringBoard的Mach-O文件在’/System/Library/CoreServices/SpringBoard.app/SpringBoard’, 通过iFunBox找到文件
2. 使用 class-dump
导出这个 SpringBoard
头文件
2.1 首先检查这个 Mach-O
文件是否有加密
- 通过
otool
指令查看
otool -l SpringBoard | grep crypt
发现终端什么也没有输出
-
通过
MachOView
查看
发现并没有LC_ENCRYPTION_INFO
这个属性 -
说明这个Mach-O文件是没有加壳的
3. 通过 class-dump
导出 Mach-O
的头文件
class-dump -H SpringBoard -o Headers
4. 使用 Cycript
动态调试 Mach-O
文件
4.1 登录到越狱手机
4.2 使用 cycript
连接 SpringBoard
cycript -p SpringBoard
4.3 导入 mjcript
@import mjcript
4.4 查看Bundle Id
cy# MJAppId
@"com.apple.springboard"
4.5 查看当前的控制器
cy# MJRootVc()
#"<SBHomeScreenViewController: 0x13beaff20>"
4.6 查看根控制器的所有子控件
MJSubviews(#0x13beaff20.view)
- 通过全局搜索badge找到对应的视图
SBIconParallaxBadgeView
4.7 测试这个View是否是角标View
- 隐藏这个控件
cy# #0x10c3072b0.hidden = 1
1
发现手机的角标确实没有了
- 显示这个控件
cy# #0x10c3072b0.hidden = 0
0
这样就确定 SBIconParallaxBadgeView
就是我们要找的角标控件
4.8 查看 SBIconParallaxBadgeView
头文件
- 使用 sublime 把SpringBoard头文件导入
cmd + p
全文搜索SBIconParallaxBadgeView
- 可以看到以下头文件信息
#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
那么这个角标就无法显示了
5. 使用 theos
, 编写tweak插件
%hook SBIconParallaxBadgeView
- (id)init {
return nil;
}
%end
- 执行
make clean && make && make package && make install
- 最后SpringBoard重启后,发现角标已经消失了