在前一篇文章,我们学习如何安装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. 李洪强iOS开发之静态库

    iOS开发拓展篇—静态库 一.简单介绍 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.库的分类 根据源代码的公开情况,库可以分为2种类型 (1)开源库 公开源代码,能看到具体实现 ...

  2. SRM 586 DIV1 L1

    可以化简为求n条线段的最大覆盖问题,需要注意的是对于实数而言. #include <iostream> #include <vector> #include <strin ...

  3. Source Insight 安装使用

    习惯了在source insight下编辑阅读源码,在linux下用vi总是用不好 ,还是在Ubuntu上用回熟悉的source insight. 在Ubuntu中,安装Windows程序用wine, ...

  4. 主机头部分 www有和无是有区别的

    关于主机部分www的问题: case 1: frontend web_service bind *:80 bind *:443 ssl crt /etc/haproxy/cert.pem acl ww ...

  5. Android开发之ContentProvider的简单使用

    ContentProvider,内容提供者 官网结构图: 作为四大组件之一的ContentProvider,主要是用于应用间数据共享使用的. ContentProvider把应用的数据封装起来,然后提 ...

  6. java的四舍五入算法

    粗力度的四舍五入为整数 package math; public class MathRoundTest { /** * Math类中提供了三个与取整有关的方法:ceil,floor,round, * ...

  7. POJ 1655-Balancing Act(树形dp)

    题意: 求n个节点的树中哪个节点删除以后得到的最大连通分量最小. 分析:同上题 #include <map> #include <set> #include <list& ...

  8. Codeforces 611D New Year and Ancient Prophecy dp+字符串比较

    这是CF Goodbye 2015 的D题,当时我想了一个n^3的dp算法,肯定不能过,然后听到学长后缀数组的n^2log(n)写法,仰慕 最后打完比赛看到了t神的n^2写法,简直膜拜,直接省去了后缀 ...

  9. 如何获取android app的Activity

    方法一 如有你有待测项目的源码,那么直接查看源码就好.如果没有,那么请联系有源码的同学,这是推荐方法.   方法二 直接把apk后缀改为zip格式,打开压缩包后再打开AndroidManifest.x ...

  10. 【原】实验室签到PHP版本

    表单 <html> <body> <h1>实验室自动签到测试</h1> <h2>输入学号和登录密码(建议自己改过密码后再来录入您的数据)&l ...