使用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,两个文件,开启飞行模式,重新进入程序,本地广告已经被去掉了。