07-1-theos实战 : 去掉越狱手机桌面app的角标数字

需求

  • 去掉越狱手机桌面app的角标数字
  • 在这里插入图片描述

此教程所需要的工具/文件

  • class-dump
  • iTools
  • OpenSSH(Cydia)
  • iFile(Cydia)
  • Cycript(Cydia)
  • 一台越狱的iPhone

分析

  1. 手机桌面也是一个APP, 名字是SpringBoard
  2. 通过 PS 命令 和 iFunBox 工具获取手机桌面的 Mach-O 文件
  3. class-dump 将SpringBoard的头文件导出备用
  4. 通过 Cycript 动态调试, 分析角标所在的View
    4.1 找到bundle Id
    4.2 获取当前控制前所有的子控件, 通过 icon 锁定角标所在的View
    4.3 通过icon, badge关键字全局搜索,找到最终的View
  5. 使用 theos 开发越狱插件

1. 找出手机桌面 SpringBoardMach-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重启后,发现角标已经消失了

参考文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值