因为对我来说是一个心得,所以就发了,希望可以得到批评与意见, 另外:如果能帮到您,深感荣幸, 否则的话,请一笑而过!!!! 书上的实战1,去除OPlayer Lite的广告。 (个人建议,先看完实战1 书:《ios应用逆向工程》)
书上使用tweak来印证猜想,然后实现除去广告的效果。 而在验证猜想的时候,不知道大家是否:一方面想马上知道猜想是否正确,另一方面代码要一个一个字母的打,很是急躁?
至少我是这么觉得的。 后来我想:猜想应该可以用“cycript”来进行验证吧。 于是有了现在我写的东西, 下面进入正文。
1. 未去除广告(整个过程中,要一直停留在这个页面,必须要!!):
<img src="/uploads/default/144/4969d0be9dfabee7.PNG" width="640" height="460"><br/>
2. 打开手机上的OPlayer Lite,并停留在播放页面。
3. 登录手机:
MacBook-Pro:~ CY$ ssh [root@x.x.x.x](mailto:root@x.x.x.x)
4. 输入ps ax 查看OPlayer Lite的PID(个人习惯,也可以不使用PID,直接使用名称)
CY:~ root# ps ax
PID TT STAT TIME COMMAND
1 ?? Ss 4:42.14 /sbin/launchd
19 ?? Ss 20:26.18 /usr/libexec/UserEventAgent (System)
21 ?? Ss 0:16.19 /usr/sbin/BTServer
22 ?? Ss 14:22.25 /System/Library/Frameworks/CoreTelephony.framework/S
...........
42158 ?? Ss 0:02.19 /var/mobile/Applications/414D20A3-EA72-4AB4-87E4-5A209F648EAB/OPlayer Lite.app/OPlayer Lite
5. 进入运行中的程序:
CY:~ root# cycript -p 42158
6. 我现在要得到当前的这个视图控制器(播放页面),这样我才能对广告页面进行操作。 (注释:下面三行代码是为了得到app的根视图控制器, [UIApplication sharedApplication] 得到一个单例对象,通过这个单例对象得到窗口,再通过窗口得到根视图控制器, 所有的应用app都可以得到这个单例对象(游戏的不清楚),但是不一定能拿到根视图控制器)
cy# var app = [UIApplication sharedApplication]
#"<UIApplication: 0x24941f0>"
cy# var keyWindow = app.keyWindow
#"<UIWindow: 0x24fa040; frame = (0 0; 320 480); gestureRecognizers = <NSArray: 0x24fa2a0>; layer = <UIWindowLayer: 0x24f9e80>>"
cy# var root = keyWindow.rootViewController
#"<AKTabBarController: 0x24fa7c0>"
7. 执行到上面的时候,发现得到了AKTabBarController,那么就可以得到当前的控制器,
(注释:从得到的根视图控制器的名称:AKTabBarController,可以看出,这个是一个tabbar,那我们在软件上看到的页面,就都是放在这个tabbar里面的,那么就可以取得当前的控制器)
cy# var visi = root.selectedViewController
#"<UINavigationController: 0x24faeb0>"
8. 结果发现输出是一个NAVigation,那我就再得到NAVigation当前的控制器:
(注释:从上面的输出结果发现,得到的是一个Navigation, 我们可以发现这个app外层是一个tabbar,然后在tabbar里面放了navigation,在navigation里面才是各个具体页面的控制器,那么就再获取当前在这个navigation中的页面)
cy# var visicontroller = visi.visibleViewController
#"<PlayViewController: 0x2f47200>"
cy#
9. 到这里 就得到的播放页的控制器, 先看一下iAdView, 这里为空。 因为是正在运行中,所以如果为空,那么广告view就不可能是它
(注释:从上面结果是发现,得到:PlayViewController这样一个视图控制器,不出意外的话,应该就是手机现在停留的页面的视图控制器,我们找到对应的.h文件,可以发现里面有两个和广告相关的属性iAdView和gAdView,其中iAdView为属性,gAdView为成员变量,现在分别输出一下两个属性,先输出iAdView,发现为null)
cy# visicontroller.iAdView
null
cy#
-
再看下gAdView, 因为不是属性,是成员变量,所以这里用->来找 发现不为空, 这时候对它隐藏一下,
(注释:成员变量无法用“.”。所以这里用以前的方式->。 输出结果不为空)
cy# visicontroller->gAdView
#"<GADBannerView: 0x104c4f00; frame = (80 0; 320 50); clipsToBounds = YES; layer = <CALayer: 0x104c4e90>>"
cy# -
返回true
(注释:hidden是隐藏,这里要一个一个字母打出来,”tab“无法补全)
cy# visicontroller->gAdView.hidden = YES
true
cy#
12 . 最后效果, 这样就知道了gAdView是广告view, 然后直接就可以写tweak了, 这里只是暂时的隐藏,想要它不再烦你, 看书上过程吧!!