在前一篇文章,我们学习如何安装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. Spring MVC 与 web开发

    转载:http://coderbee.net/index.php/java/20140719/959 项目组用了 Spring MVC 进行开发,觉得对里面的使用方式不是很满意,就想,如果是我来搭建开 ...

  2. mysql查看数据库命令

    mysql查看数据库命令 打开的数据库的命令 mysql> use mysql Database changed 查看数据库的命令 mysql> show databases; 查看数据表 ...

  3. 企业级 Linux 安全管理实例(1)

    公司企业多用Linux服务器,其中涉及到的一些安全管理对于安全运维人员来说是必不可少的应知技能, 以下案例沿着背景->需求->具体要求->操作步骤的流程进行描述,可以加深对安全管理的 ...

  4. C++11内存模型的粗略解释

    基本解释 C++11引入了多线程,同时也引入了一套内存模型.从而提供了比较完善的一套多线程体系.在单线程时代,一切都很简单.没有共享数据,没有乱序执行,所有的指令的执行都是按照预定的时间线.但是也正是 ...

  5. 函数lock_rec_get_nth_bit

    /*********************************************************************//** Gets the nth bit of a rec ...

  6. 在线API,桌面版,jquery,css,Android中文开发文档,JScript,SQL掌用实例

    学习帮助文档大全 jquery,css,Android中文开发文档,JScript,SQL掌用实例 http://api.jq-school.com/

  7. [POJ 2891] Strange Way to Express Integers

    Strange Way to Express Integers Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 10907 ...

  8. 使用MySQL

    安装MySQL驱动 使用vpn $ pip install mysql-connector-python --allow-external mysql-connector-python import ...

  9. java中正则表达式

    在<java编程思想>中,java中的 \\ 表示“我要插入一个正则表达式的反斜线,所以其后的字符具有特殊的意义.”如果想插入一个普通的反斜线,那么应该使用 \\\\. 理解: 我们使用的 ...

  10. jquery通过ajax获取数据,控制显示的数据条数

    效果图: 现在我们可以先看它的json数据,如图所示:                然后可以对应我们的代码进行理解. jquery通过ajax获取数据,并通过窗口大小控制显示的数据条数,以及可以根据 ...