使用Theos去除OPlayer Lite 的广告

首先你要有一台越狱手机,手机上装了OPlayer Lite,这个APP

1.dumpdecrypted砸壳

2.class-dump生成头文件

3.Hopper生成hop文件

4.连上手机,运行去除广告的程序,在终端输入 ps -e

5.cycript -p 6919

6.[[UIApp keyWindow] recursiveDescription].toString()  ,展示当前页面的所有View

7.[#0x167a0050 setHidden:YES], 去除掉广告,GADBannerView是UIWebView的父类

8.[#0x167a0050 setHidden:NO] ,不隐藏广告


9.退出Cydia

10.debugserver *:1234 -a "OPlayer Lite” ,连接

11.新开一个终端,先做端口转发:iproxy 1234 1234,这样能更快的连接,新开一个终端:lldb 回车,做了端口转发输入: process connectconnect://localhost:1234  ,没做端口转发输入

process connectconnect://你手机的IP:1234

12.im li -o -f 打印所有地址,获取UIKit的地址


13.跳转到UIKit的路径,把UIKit放到Hopper里去,搜索addsub, 记录地址


14.br s -a 0x20048928+0x01118000  ,打断点, addsub获取到的地址加上UIKit终端获取到的地址(必须是addsub的地址+UIKit终端获取到的地址,不能反过来加),然后在app里点击进入这个界面,$r2是addsubview 添加的view的类型


15.然后找到相关控件,然后通过ni命令往回追溯目标模块调用时的起始地址,ni以后,全部点回车


直到执行到OPlayer Lite,然后把获取到的地址0x3123f2   减去.im li -o -f获取到的第一个地址


16.然后把获取到的地址,在Hopper用快捷键G进行查找


17.然后搜索addAds_OnLocalAds这个方法,把地址拷贝下来


18.然后删除断点, br del,然后把Hopper里拿到地址+偏移地址,在重新下一个断点,p (char *)$r1 打印方法名   ,pp $r0 打印类名

19.p/x $lr  ,执行完整个方法以后,返回的地址  减去im li -o -f 获取的第一个地址,得到结果以后,用Hopper ,快捷键G,跳转到调用addAds_OnLocalAds整个方法的地址



在上图中,找了方法addAds_OnLocalAds方法,说明位置正确,然后根据汇编指令     bne.w,可知这一处是一个判断语句。

同时继续往上继续查找,我们还看到了在一个"PlayViewController"控制器中存在一个'localAdView'的成员变量。在网往上找可以找到该方法是在[PlayViewController viewWillAppear:]中调用的,如下图


20.通过class-dump的方式获取头文件,然后头文件所在文件打开,搜索localAdView,可以看到localAdView是个UIView


21.在终端输入[[NSBundle mainBundle] bundeleIdentifier],获取bundeleIdentifier。用Theos 创建一个项目

22.修改NetEaseOPlayer.plist里的Bundles

23.在Tweak.xm里,hook viewWillAppear的方法,修改localAdView的Frame


24.终端输入make , 然后输入 make package, 然后make install,成功以后你在/Library/MobileSubstrate/DynamicLibraries里会有dylib和plist,两个文件,开启飞行模式,重新进入程序,本地广告已经被去掉了。

你可能感兴趣的:(使用Theos去除OPlayer Lite 的广告)