“实战1,用Cycript印证猜想!!!!!”

因为对我来说是一个心得,所以就发了,希望可以得到批评与意见, 另外:如果能帮到您,深感荣幸, 否则的话,请一笑而过!!!! 书上的实战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#

  1. 再看下gAdView, 因为不是属性,是成员变量,所以这里用->来找 发现不为空, 这时候对它隐藏一下,
    (注释:成员变量无法用“.”。所以这里用以前的方式->。 输出结果不为空)
    cy# visicontroller->gAdView
    #"<GADBannerView: 0x104c4f00; frame = (80 0; 320 50); clipsToBounds = YES; layer = <CALayer: 0x104c4e90>>"
    cy#

  2. 返回true
    (注释:hidden是隐藏,这里要一个一个字母打出来,”tab“无法补全)
    cy# visicontroller->gAdView.hidden = YES
    true
    cy#

12 . 最后效果, 这样就知道了gAdView是广告view, 然后直接就可以写tweak了, 这里只是暂时的隐藏,想要它不再烦你, 看书上过程吧!!

1 个赞

楼主可以再仔细的说下每步的命令都是怎么来的~ 如何分析. 有助于帮助新手… 比如我… :lol

加了注释了 ,你看下吧。

写的太赞了~~ 直接就看懂了~~ 貌似IOS是有固定的那么一套页面框架吧… 怎么搭配是随意的… 但是只要是那个东西. 基本上就是死的~ :lol 谢谢讲解~~

不客气,共同进步嘛

ps ax 找不到?

怎么可能, 是系统自带的命令啊, 你截图我看看


怎么将图片传上来,我桌面截了一张

好像没法传,:L , 你QQ我吧

adv-cms
去安装这个就有ps 这些系统命令;

可以直接上传的啊,但是要在高级模式里,点图中最左边的图标就可以了:

真心不错,讲得很赞:titter: