在前一篇文章,我们学习如何安装Cycript在你的苹果设备,hook进程获取其相关属性信息。这一篇文章,我们将介绍高级的runtime分析技术,在应用运行时获取或者修改指定class的信息(方法、实例变量)。
找到指定类的方法
在应用运行期间分析它的流程,有助于我们知道是哪个类被哪个view controller或者类调用。前一章也说了,Cycript是混合型的解释器,我们可以写一个包含着javascript语法和Objective-C语法的函数。我们可以在解释器中定义一个函数在程序运行的任何时间找到我们想要找到的特定信息。下面涉及到的方法代码大部分都可以从Code找到,这里还是以上一章用到的应用为例。

首先,我们hook正在运行的进程。


定义一个打印指定类的方法的 方法。

现在,我们定义了一个方法,参数是classname。前一篇我们我们知道这个应用的委托类是YWAppDelegate,这里,就用这个方法来看看打印输出这个class包含的方法。

上图打印了这个class的所有方法。 @seletor后面跟的是方法的名称。PS:这里也会打印一些关于私有方法的信息,也包含getter 和 setter 在类的属性定义。
同样的,我们也可以打印YahooSlidingViewController的方法。

我们知道YahooSlidingViewController管理着滑动菜单和 是进入其他view controller的 "门面"(入口,如下面的图,意思就是在滑动菜单中点击一项进入另一个界面)

为了找到负责显示 weather 的view  controller ,我们使用下面这命令

因此 YWMainViewController 是负责显示weather。所以下图实际就是YWMainViewController 。

让我们打印YWMainViewController 这个类的方法

正如你所看到的,这里有个方法userDidRequestUpdate。

从这个名字来看,很明显,不论什么时候,当用户下拉(和qq空间应用差不多)时候应用刷新然后会调用userDidRequestUpdate方法。使用Cycript,我们可以在任意时候调用这个方法。但是我们必须得先引用 view controller ,然后调用这个方法。

这样,我们并没有下拉,这个更新的方法也会被调用。

正如前面所说的,这些方法也包含getter(获取属性) 和 setter(设置属性)。

从安全的角度来看,这样操作应用的runtime给我们带来了很多优势,只要我们想就可以任意时刻调用任意方法。我们可以想象一下,在应用中,用户首先通过用户密码登陆,然后一旦登陆,didLogin得到调用。我们可以不用输入任何用户密码而调用这个方法。

如果我们能够打印指定view controller用到的所有变量,对我们分析应用会有很大的帮助。so接下来定义一个打印所有实例变量的方法。

现在让我们输出YWMainViewController的实例变量。

你可以在里面找到一个叫locationViewControllers的实例变量。在Yahoo weather中,对屏幕左划或右划来查看不同地点的天气。从这个变量的名字来看,这个变量像是负责处理location View Controller列表的view controllers数组。用Cycript输出它的实例变量。

现在右划到另一个位置纽约

让我们输出变量的值locationViewControllers

分别比较两次的locationViewControllers的值。
你可以看到,这个数组有三个location view controllers在里面,其他的都是null。为了更好的管理内存它并没有包含所有的location view controllers的引用。所以,在特定时间,只有我们看到的,往左划和往右划的 view controller被实例化。当我们移动到一个不同的位置,也是一样,它会自动的将可见的view controller实例放在中心,然后往左划和往右划的view controller被实例化。所以用户切换时并不会感觉到丝毫的延迟,因为这里不会占用很多内存。

结论
前两章,我们用 Yahoo weather 来完成了runtime的分析,下一章,我们会看到更多的cycript用法和 将重点放在method swizzling.

References:

IOS应用安全(五):高级Runtime分析和操作的更多相关文章

  1. 李洪强iOS经典面试题156 - Runtime详解(面试必备)

    李洪强iOS经典面试题156 - Runtime详解(面试必备)   一.runtime简介 RunTime简称运行时.OC就是运行时机制,也就是在运行时候的一些机制,其中最主要的是消息机制. 对于C ...

  2. iOS应用的crash日志的分析基础

        Outline如何获得crash日志如何解析crash日志如何分析crash日志     1. iOS策略相关     2. 常见错误标识     3. 代码bug 一.如何获得crash日志 ...

  3. [iOS]过渡动画之高级模仿 airbnb

    注意:我为过渡动画写了两篇文章:第一篇:[iOS]过渡动画之简单模仿系统,主要分析系统简单的动画实现原理,以及讲解坐标系.绝对坐标系.相对坐标系,坐标系转换等知识,为第二篇储备理论基础.最后实现 Ma ...

  4. 原 iOS深入学习(Block全面分析)http://my.oschina.net/leejan97/blog/268536

    原 iOS深入学习(Block全面分析) 发表于1年前(2014-05-24 16:45)   阅读(26949) | 评论(14) 39人收藏此文章, 我要收藏 赞21 12月12日北京OSC源创会 ...

  5. iOS离屏渲染之优化分析

    在进行iOS的应用开发过程中,有时候会出现卡顿的问题,虽然iOS设备的性能越来越高,但是卡顿的问题还是有可能会出现,而离屏渲染是造成卡顿的原因之一.因此,本文主要分析一下离屏渲染产生的原因及避免的方法 ...

  6. {MySQL的逻辑查询语句的执行顺序}一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析

    MySQL的逻辑查询语句的执行顺序 阅读目录 一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析 一 SEL ...

  7. 品味性能之道<五>:SQL分析工具

    一.SQL语句到底是怎么执行的? 想了解SQL语句到底是怎么执行的,那就需要进行SQL语句执行计划分析. 那什么是SQL语句执行计划呢? 就是Oracle服务器执行SQL语句的过程.例如确定是否使用索 ...

  8. iOS音频播放 (五):AudioQueue

    码农人生 ChengYin's coding life 主页 Blog 分类 Categories 归档 Archives 关于 About Weibo GitHub RSS Where there ...

  9. iOS开发黑科技之runtime

    iOS 开发之黑科技-runtime runtime其实就是oc底层的一套C语音的API 调用方法的本质就是发消息, 1.动态交换两个方法的实现(特别是交换系统自动的方法) 2.动态添加对象的成员变量 ...

随机推荐

  1. 核心思想:早胜过一切,张小龙的Foxmail居然可以卖1200万

    现在谁都可以做一个类似的软件,但是市场已经成熟了,满大街都是,也就没有人会来收购你的软件了.

  2. 212. Word Search II

    题目: Given a 2D board and a list of words from the dictionary, find all words in the board. Each word ...

  3. 最受欢迎的5个Android ORM框架

    在开发Android应用时,保存数据有这么几个方式, 一个是本地保存,一个是放在后台(提供API接口),还有一个是放在开放云服务上(如 SyncAdapter 会是一个不错的选择). 对于第一种方式, ...

  4. Rabbitmq中rabbitmqctl的常用命令

    学习rabbitmq,原理之后第一个要掌握的就是rabbitmqctl这个命令的用法了,rabbitmq的管理功能最全的就是rabbitmqctl命令了,当然还有HTTP API和UI两种管理手段. ...

  5. 网站开发中的相对URL问题--JSP

    问题描述: 入门网站开发时,我们会在相对URL问题上有疑惑.例如,在一个jsp页面中引入css外部文件, <link rel="stylesheet"          hr ...

  6. 解决windows下vim方向键变成 ABCD 的问题

    一.问题描述: windows下面要安装git --> 安装了 msys2 -->安装并更新了 vim(7.4),然后在使用过程中发现vim不能使用  BACKSPACE 键,按方向键会打 ...

  7. 深入理解Java虚拟机 - 虚拟机内存划分

    在内存管理方面,Java相对于C和C++的区别在于Java具有内存动态分配以及垃圾收集技术,但平时我们很少去关注JVM的内存结构以及GC,在出现内存泄露或溢出方面的问题,排查工作将变得异常艰难.   ...

  8. 比较const ,readonly, stitac readonly

    比较const ,readonly, stitac readonly: const和readonly的值一旦初始化则都不再可以改写: const必须在声明时初始化:readonly既可以在声明时初始化 ...

  9. 触摸屏网站开发系列(一)-ios web App应用程序(ios meta)

    触摸屏网站的开发其实现在来讲比前几年移动端网站开发好多了,触摸屏设备IOS.Android.BBOS6等系统自带浏览器均为WEBKIT核心,这就说明PC上面尚未立行的HTML5 CSS3能够运用在这里 ...

  10. Linux串口c_cc[VTIME]和c_cc[VMIN]属性设置的作用

    Linux串口c_cc[VTIME]和c_cc[VMIN]属性设置的作用 在串口编程模式下,open未设置O_NONBLOCK或O_NDELAY的情况下. c_cc[VTIME]和c_cc[VMIN] ...