在前一篇文章,我们学习如何安装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. 微软在 .NET 3.5 新增了一个 HashSet 类,在 .NET 4 新增了一个 SortedSet 类,本文介绍他们的特性,并比较他们的异同。

    微软在 .NET 3.5 新增了一个 HashSet 类,在 .NET 4 新增了一个 SortedSet 类,本文介绍他们的特性,并比较他们的异同. .NET Collection 函数库的 Has ...

  2. NPOI.dll学习

    NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目. 简介 编辑 使用 NPOI 你就可以在没有安装 Office 或者相应环 ...

  3. 【零基础学习iOS开发】【02-C语言】09-流程控制

    前言 1.默认的运行流程 默认情况下,程序的运行流程是这样的:运行程序后,系统会按书写顺序执行程序中的每一行代码.比如下面的程序 1 #include <stdio.h> 2 3 int ...

  4. html代码究竟什么用途

    1.html代码,只能浏览器识别并读出.渲染出网页图形 2.html代码可以本地写,用浏览器渲染出.也可以服务器端通过http协议传送过来,在网页显示. 咱们上网看的网页都是服务器端通过http协议传 ...

  5. java 转换 小函数(不断增加中。。。)

    //char数组转换成byte数组 private byte[] getBytes (char[] chars) { Charset cs = Charset.forName ("UTF-8 ...

  6. MAC OS Nginx php-fpm相关

    Nginx 命令 sudo nginx // 启动Nginx #重新加载|重启|停止|退出 sudo nginx -s reload|reopen|stop|quit #上传文件限制更改: 进入ngi ...

  7. Linux 下常用命令

    linux 下常用命令: 1.删除文件命令为 rm 2.创建目录的命令是:mkdir 3.删除目录的命令是rmdir(空目录) 4.切换到root帐号:su 5.查看所有进程:ps -aux 6.杀死 ...

  8. STM32硬件复位时间

    两个参数,,1低电平时间 2低电平压值 1.stm32复位时间 ------  低电平时间:1.5 至 4.5 ms   2.压值

  9. bash 统计文件行数

    #假设文件名是:fortest.gtf declare -i fileLinesfileLines=`sed -n '$=' fortest.gtf`echo $fileLines #-------- ...

  10. js模仿jquery里的几个方法next, pre, nextAll, preAll

    /*siblings函数, 选取node的所有兄弟节点*/ function siblings(node){ if(node.nodeType === 1){ node.flag = true; // ...