IOS应用安全(五):高级Runtime分析和操作
在前一篇文章,我们学习如何安装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:
- Cycript
http://www.cycript.org/ - Cycript tricks
http://iphonedevwiki.net/index.php/Cycript_Tricks
IOS应用安全(五):高级Runtime分析和操作的更多相关文章
- 李洪强iOS经典面试题156 - Runtime详解(面试必备)
李洪强iOS经典面试题156 - Runtime详解(面试必备) 一.runtime简介 RunTime简称运行时.OC就是运行时机制,也就是在运行时候的一些机制,其中最主要的是消息机制. 对于C ...
- iOS应用的crash日志的分析基础
Outline如何获得crash日志如何解析crash日志如何分析crash日志 1. iOS策略相关 2. 常见错误标识 3. 代码bug 一.如何获得crash日志 ...
- [iOS]过渡动画之高级模仿 airbnb
注意:我为过渡动画写了两篇文章:第一篇:[iOS]过渡动画之简单模仿系统,主要分析系统简单的动画实现原理,以及讲解坐标系.绝对坐标系.相对坐标系,坐标系转换等知识,为第二篇储备理论基础.最后实现 Ma ...
- 原 iOS深入学习(Block全面分析)http://my.oschina.net/leejan97/blog/268536
原 iOS深入学习(Block全面分析) 发表于1年前(2014-05-24 16:45) 阅读(26949) | 评论(14) 39人收藏此文章, 我要收藏 赞21 12月12日北京OSC源创会 ...
- iOS离屏渲染之优化分析
在进行iOS的应用开发过程中,有时候会出现卡顿的问题,虽然iOS设备的性能越来越高,但是卡顿的问题还是有可能会出现,而离屏渲染是造成卡顿的原因之一.因此,本文主要分析一下离屏渲染产生的原因及避免的方法 ...
- {MySQL的逻辑查询语句的执行顺序}一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析
MySQL的逻辑查询语句的执行顺序 阅读目录 一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析 一 SEL ...
- 品味性能之道<五>:SQL分析工具
一.SQL语句到底是怎么执行的? 想了解SQL语句到底是怎么执行的,那就需要进行SQL语句执行计划分析. 那什么是SQL语句执行计划呢? 就是Oracle服务器执行SQL语句的过程.例如确定是否使用索 ...
- iOS音频播放 (五):AudioQueue
码农人生 ChengYin's coding life 主页 Blog 分类 Categories 归档 Archives 关于 About Weibo GitHub RSS Where there ...
- iOS开发黑科技之runtime
iOS 开发之黑科技-runtime runtime其实就是oc底层的一套C语音的API 调用方法的本质就是发消息, 1.动态交换两个方法的实现(特别是交换系统自动的方法) 2.动态添加对象的成员变量 ...
随机推荐
- [topcoder]FlowerGarden
1.此题很勉强算DP.找了半天网上思路,是个三层的循环,n^3.2.基本思路就是先找到在第一个位置的花.这样就双层遍历,找到所有和其他不冲突的花中最高的一个,然后放到结果的首位.然后去掉此花,继续使用 ...
- html代码究竟什么用途
1.html代码,只能浏览器识别并读出.渲染出网页图形 2.html代码可以本地写,用浏览器渲染出.也可以服务器端通过http协议传送过来,在网页显示. 咱们上网看的网页都是服务器端通过http协议传 ...
- Android:实现无标题的两种方法
实现无标题的两种方法:配置xml文件和编写代码设置 1.在AndroidManifest.xml文件中进行配置 实现全屏效果: android:theme="@android:style/T ...
- python学习链接
http://www.cnblogs.com/dkblog/archive/2011/06/24/2089026.html 异常处理 http://xiagu1.iteye.com/blog/6195 ...
- [原]数据库中的partitioning和sharding
1. 如何理解定义 在中文中,partitioning和sharding都有分区的意思.从大的方面来说,这两个词所执行的动作确实也和分区相关.partitioning在很多场合是vertical pa ...
- Download interrupted: URL not found.
Download interrupted: URL not found. androidURL not found 应该是url被墙了.可以试下:启动 Android SDK Manager ,打 ...
- poj1195Mobile phones(二维树状数组)
http://poj.org/problem?id=1195 模版题 i写成k了 找了一个多小时没找出来.. #include <iostream> #include<cstring ...
- 函数buf_LRU_free_block
/******************************************************************//** Try to free a block. If bpag ...
- 从算法入手讲解如何在SQL Server中实现最优最简
算法是计算机科学中一个重要的研究方向,是解决复杂问题的关键.在计算机世界中,算法无处不在.数据库是存储数据和执行大批量计算的场所,在数据库中使用一些简单的SQL命令,进行存储.查询.统计.以解决现实世 ...
- 自定义web浏览器(五)
万维网(Web)服务的客户端浏览程序.可向万维网(Web)服务器发送各种请求,并对从服务器发来的超文本信息和各种 多媒体数据格式进行解释.显示和播放--------百度百科对浏览器给出这样的解释.