iOS应用安全Part4:使用Cycript进行运行时分析
来源:互联网 发布:高德软件股票行情 编辑:程序博客网 时间:2024/05/18 02:07
【说明】英文原文发表时间:2013.6.10,原文链接:点击这里
前言
在上一篇博文中,我们了解一个iOS应用程序(使用Cocoa框架用Objective-C开发)的运行时功能。在本文中,我们将学习如何使用一个名为Cycript的重要工具来分析和修改一个iOS应用程序的运行时,本文中我们以“雅虎天气”iOS应用作为示例App。Cycript
Cycript 是一个Javascript解释器,同时它还理解Objective-C语法,这意味着在一个特定指令中,我们可以编写Objective-C或Javascript代码或者二者混合使用。Cycript还可以hook一个正在运行的进程,帮助我们修改应用运行时的很多东西。针对iOS应用程序而言,使用Cycript有以下优点:1、我们可以hook一个正在运行的进程,并找到使用的所有类的名字,例如:视图控制器、所使用的内部和第三方库,甚至应用代理的名字。
2、对于一个特定的类,如视图控制器、应用代理或任何其他类,我们也可以找到所有使用的方法名字。
3、在应用程序运行时特定时间,我们也可以找到所有的实例变量名和它们的值。
4、在运行时,我们还可以修改实例变量的值。
5、我们可以执行Method Swizzling,例如:用其他实现替换一个特定方法的代码。
6、在运行时期间,我们可以在应用中调用任何方法,而不必要求该方法存在于实际应用的代码中。
安装Cycript
为了在你的设备上安装Cycript,你必须从它的官网下载页面下载最新版本,要确保下载最新版本。
一旦成功下载到你的系统上,使用sftp将它上传到你的设备上。
接着,使用dpkg指令将cycript安装到你的设备上。
利用Cycript进行运行时修改
本文中,我们做的所有测试都是在雅虎天气应用上,这是一个非常简洁的应用程序,它有一个优雅的UI,提供不同地方的天气信息服务。一旦雅虎天气成功安装,运行它并确保它运行于前台,这是因为一旦应用程序处于后台,那么它将处于暂停状态,而此时你将无法对它进行更多操作。一旦运行应用程序,你可以通过找到该应用的PID,然后运行“cycript -p”指令直接hook到该进程。
如果hook成功,将出现一个Cycript解释器。此时,你可以通过使用Objective-C语法[UIApplication sharedApplication]来获得应用程序的实例。
你还可以如下图所示那样,使用Cycript解释器定义变量。在本例中,我为[UIApplication sharedApplication]定义了一个变量a。
Cycript默认情况下拥有该变量,便于引用应用程序实例。
因此,现在我们知道了委托类的名字为YWAppDelegate。所以,委托文件名定义为YWAppDelegate.h和YWAppDelegate.m。现在,我们试着在运行时调用应用程序的一些方法。快速浏览应用程序给出了这样的一个界面。
正如你可以看到的,应用程序的状态栏是隐藏的。我们可以调用应用程序的一个方法来取消隐藏状态栏。同时,在你对应用执行运行时分析时,要确保程序一直处于前台。
修改之后,下图是应用程序现在的界面。
正如你可以看到的,状态栏现在是可见的。下面我们试一下,看看是否可以修改这个特定应用程序的消息提示数量。提示计数是应用程序图标右上角显示的数字,它通常指的是应用程序收到推送通知的数量。在邮件应用中,它也可以指未读邮件的数量。在雅虎天气应用中,并没有推送通知的概念,因此在应用图标的右上角并没有计数显示。不过,可以在应用本地通过一个简单的函数调用或者从服务器远程推送通知来设置提示计数。接着,我们试一下,看看是否可以设置应用程序的提示标记。下面是我们需要调用的Objective-C方法。在本例中,我设置提示数量为999。
现在,如果我们回到主屏幕,我们将看到应用的提示计数。
现在,我们调查更多一些,看看我们还可以找出有关应用程序的什么信息。为了找出应用的当前视图控制器,必须首先找出keyWindow属性。一个keyWindow是一个窗口,它目前接受来自用户的交互操作(触摸事件)。如果你想找出一个应用程序的所有窗口,那么下图显示了实现这一目的的做法。注意,一个窗口是类UIWindow类型。
现在,为了找出应用中特定时间的keyWindow,你应该像下图这样做。
现在,通过使用keyWindow的rootViewController属性,我们找出了该窗口的根视图控制器。该窗口的根视图控制器属性负责在这个窗口中显示内容。
因此,这个类基本上充当其他视图控制器的门面。这意味着,无论何时在菜单中选择一个菜单项时,如上图所示,YahooSlidingViewController类将负责显示相应的视图控制器。
结论
在本文中,我们学习了如何将Cycript安装到一个越狱设备上,以及如何hook到一个正在运行的进程,并找出应用程序的属性信息。我们还研究了如何自己调用函数在应用的沙箱中执行。在下一篇博文中,我们将着手如何找出给定类的所有方法及修改它的实现。此外,我们也会探索如何修改一个特定类的实例变量值。参考资料
Cycript
Cycript tricks
0 0
- iOS应用安全Part4:使用Cycript进行运行时分析
- iOS应用程序安全(4)-用Cycript进行运行时分析(Yahoo天气应用)
- iOS应用程序安全(4)-用Cycript进行运行时分析(Yahoo天气应用)
- iOS应用程序安全(5)-用Cycript做运行时分析的高级技巧(Yahoo天气应用)
- iOS应用程序安全(5)-用Cycript做运行时分析的高级技巧(Yahoo天气应用)
- IOS安全–使用lldb对应用进行运行时分析
- iOS应用程序安全(22)-使用GDB进行运行时分析和操作
- ios--安全攻防--使用Cycript修改支付宝app运行时
- iOS安全攻防(五):使用Cycript修改支付宝app运行时
- ios安全攻防(五)使用Cycript修改支付宝app运行时
- iOS应用程序安全(8)-用Cycript进行Method Swizzling
- iOS应用程序安全(23)-对抗运行时分析和操作
- iOS应用逆向工程(四):利用Cycript 操作运行时
- iOS运行时工具-cycript
- iOS运行时工具-cycript
- iOS运行时工具-cycript
- 第三章:iOS应用运行时解析——3.3 Cycript和Runtime Analysis
- iOS使用cycript调试APP技巧
- 04 多线程
- 博客园学习网站
- cocos2dx 点击事件分析(1)
- C语言中函数的思考(可以返回局部变量吗)
- 郝斌数据结构教学视频下载地址
- iOS应用安全Part4:使用Cycript进行运行时分析
- 深入解读Tomcat(四)
- 第三周项目5-5:多文件组织
- KVC 和 KVO 的一点理解
- Codeforces Round #297 (Div. 2)——B. Pasha and String
- 心情记录
- 用于机器学习的数据库--UCI数据库
- 【vb.net机房重构】存储过程
- JAVA学习笔记(三十五)- 随机读写文件 RandomAccessFile