1、明确需求

喜马拉雅在进入收听界面和暂停时,都有弹窗广告,现在的需求就是去掉这个广告。
1.gif

2、整理思路

整体方向就是先找到这个广告所属类,再找到初始化方法,然后hook这个方法,让它创建的时候返回的是nil,这样就不会出现广告了。
第一步:找到需要hook的类
使用Reveal来查看一下广告View的类名:
image.png
第二步:分析头文件
脱壳后通过class-dump导出喜马拉雅可执行文件的头文件,找到XMSoundPatchVideoBView.h:
image.png

可以通过Sublime Text的快捷键 Command + T,快速进入该文件

观察到广告View有一个initWithFrame初始化方法,下面就可以通过hook这个方法,来隐藏广告。

  1. - (id)initWithFrame:(struct CGRect)arg1;

3、编写代码

新建tweak项目,打开Tweak.x文件,编写代码:

  1. // 由于使用了CGRect,所以需要导入UIKit
  2. #import <UIKit/UIKit.h>
  3. %hook XMSoundPatchVideoBView
  4. - (id)initWithFrame:(struct CGRect)arg1 {
  5. // 创建的时候返回nil
  6. return nil;
  7. }
  8. %end

编写代码完成后,将插件安庄到手机。

4、最终效果

2.gif
将插件安装到iPhone后,暂停后就不会再出现广告了。

5、错误处理

$ make 如果报错没有声明CGRect:

  1. declaration of 'struct CGRect' will not be visible outside

需要导入UIKit头文件:

  1. @import UIKit;
  2. #import <UIKit/UIKit.h>