2Tweak - 很小的小练习

 

去掉SpringBoard的未读数字

思路

使用Cycript寻找待修元素在哪里

查看根控制器的子控制器

找根控制器的Subviews - 希望找到小红点UI

问题:查到的东西过多

解决:靠经验去猜

猜测SBIconView是图标,尝试使用Cycript隐藏之,发现桌面图标确实少了一个,说明这个控件就是图标

再往下看,发现关键字:Badge

测试之,发现就是这个东东

查看指定类的头文件找思路

在class-dump中查看SBIconParallaBadgeView头文件

开发Theos

Done

实例二:微信UI修改

目标

思路

其它

脱壳

Clutch会脱壳失败

可以使用decrypted脱壳方案进行脱壳

编写Tweak

numberOfSectionsInTableView这个方法需要先调用原方法,然后再+1

调用原始方法:%orig - 不写传参,所有参数会自动传入

尝试修改Cell

 

数据存储

开关的值保存起来

方案:可以使用NSUserDefaults把当前值存起来

提示:Tweak编写的时候可以定义宏

注意:

在Hook里面写的方法,默认为替换原方法(若木有源方法,默认不生效)

新方法需要在方法名前添加%new

加载图片资源

方案一:手机全路径

[UIImage imageWithContentsOfFile:@"全路径"];

全路径意味着,从手机的跟路径开始写起。

方案二:打包到Tweak里

  1. 新建一个layout文件夹 - Tweak默认会把layout文件夹下的文件,拷贝到手机跟路径中去
  2. 建议放图片资源的文件夹 - Device/Library/PreferenceLoader/Preferences
  3. 所以,需要在layout文件夹下放/Library/PreferenceLoader/Preferences这三个层级的文件夹
  4. 也可以放在/Library/Caches中,这个路径也是挺nice的

资源规划

方案一:抽宏

方案二:利用OC语法细节

@"字符串一" "字符串二"   相当于这是一个字符串

#path → 把传入的path自动加双引号 宏定义的语法

去掉内涵段子的广告

定位UI

EssayTipCellImage

提示:

Reveal可以直接拿到内存地址

注意看右下方

问题

直接hook这个Cell的话有问题

  1. 可能会影响其他Cell
  2. Cell返回nil可能会Crash

方案

Cell的数据来自模型,能不能把模型干掉呢?

猜测数组模型中,有广告模型,也有正常模型,可以把广告模型滤掉

处理

找到TableView的dataSource

查看dataSource的属性,找疑似的数据源变量

还可以到class-dump出来的头文件中找到这个类查看

继续看可疑的EssayFeedListModel,发现dataList

cy中查看listModel里的dataList属性里有啥

结果

查看长度

猜想这个里面放的是模型,验证下,通过Cell找它对应的模型

发现了SSTipModel这个模型属性。我们返回到上面的那一坨结果中,发现里面有不少SSTipModel,说明我们的猜想成立

通过MJ封装的工具也可以搂出来_listModel成员变量中所有有关SSTipModel的数据

分析SSTipModel

发现它的init方法,尝试hook,让它返回nil

完成,广告被干掉了

其他思路

思路一:

思路二:

细节

  1. [xxxClass class] 可以用 %c表示
  2. 如果报「方法找不到」,可以随便声明一下这个方法就好 - 见上面截图的@interface一段

思路三:

找到发网络请求的方法,修改网络请求的返回JSON值

腾讯视频去广告

启动广告

目标

方案

Reveal找到广告类

class-dump导出头文件

尝试Hook掉init方法

问题

广告去掉了,但是黑屏了。

解决

发现有个showSplash方法,可以Hook它,直接调用hideSplash方法

视频广告

目标

思路

看下控制器,发现广告控制器和真正的视频控制器不是同一个,所以直接Hook掉广告控制器

实现

done