1、明确需求
喜马拉雅在进入收听界面和暂停时,都有弹窗广告,现在的需求就是去掉这个广告。
2、整理思路
整体方向就是先找到这个广告所属类,再找到初始化方法,然后hook这个方法,让它创建的时候返回的是nil,这样就不会出现广告了。
第一步:找到需要hook的类
使用Reveal来查看一下广告View的类名:
第二步:分析头文件
脱壳后通过class-dump导出喜马拉雅可执行文件的头文件,找到XMSoundPatchVideoBView.h:
可以通过Sublime Text的快捷键 Command + T,快速进入该文件
观察到广告View有一个initWithFrame初始化方法,下面就可以通过hook这个方法,来隐藏广告。
- (id)initWithFrame:(struct CGRect)arg1;
3、编写代码
新建tweak项目,打开Tweak.x文件,编写代码:
// 由于使用了CGRect,所以需要导入UIKit
#import <UIKit/UIKit.h>
%hook XMSoundPatchVideoBView
- (id)initWithFrame:(struct CGRect)arg1 {
// 创建的时候返回nil
return nil;
}
%end
4、最终效果
5、错误处理
$ make 如果报错没有声明CGRect:
declaration of 'struct CGRect' will not be visible outside
需要导入UIKit头文件:
@import UIKit;
或
#import <UIKit/UIKit.h>