ken 发表于 2015-8-27 01:19:12

IOS应用安全(四): 用Cycript分析Runtime

本帖最后由 ken 于 2015-8-27 15:17 编辑

原文出处: http://highaltitudehacks.com/2013/07/02/ios-aios-appllication-security-part-4-runtime-analysis-using-cycript-yahoo-weather-app/
各位大神轻拍。IOS从2013.06到现在也更新了很多版本,可能此篇文章具有时效性不适应于新版本的IOS应用。

static/image/hrline/5.gif



我们上一篇学习了关于IOS应用的Runtime特性,本节内容将介绍一款比较重要的工具Cycript来分析和修改IOS应用的Runtime。这次就以 Yahoo Weather应用来分析。

Cycript
cycript是javascript解释器。而且也能解释Objective-C的语法,这意味着我们可以写Objective-C,也可以写javascript的,在个别中我们可以夹杂Objective-C和javascript。它可以帮助我们hook正在运行的程序并且帮助我们修改应用运行期间修改一些东西。只要是我们关注的那部分。 下面是一些Cycript的高级用法。
Installing Cycript



从http://www.cycript.org/debs/这里下载最新版的来安装。

http://highaltitudehacks.com/images/posts/ios4/1.png
下载完后用sftp上传到你的手机里。
http://highaltitudehacks.com/images/posts/ios4/2.png
输入dpkg -i包名安装程序,这里包名是Cycript,安装Cycript程序。
http://highaltitudehacks.com/images/posts/ios4/3.png
输入命令Cycript看是否安装成功。
修改Runtime
这次我们以Yahoo Weather 来完成我们的测试。(后面是说这个XXX好之类的,不翻译,脑补)。
安装完后我们运行,确保应用实在前台运行。因为应用一旦后头运行,它就处于暂停状态,你就无法对它做更多的事情了。你可以直接使用Cycript来直接hook正在运行的程序。使用命令Cycript -pPID(进程名,可以使用ps来查看)来hook进程。
http://highaltitudehacks.com/images/posts/ios4/5x.png

一旦hook成功,Cyript就会提供一个Cyrupt解释器。现在我们就可以输入命令。
使用Objective-C 语法 获取应用的实例。
http://highaltitudehacks.com/images/posts/ios4/5.png
你也可以定义一个变量,这里,我定义了变量a的值是。请注意我们我们左边输入的是javascript语法,var a定义变量,然而右边却是,Objective-C的语法,我想这正是Cycript的精妙所在。
http://highaltitudehacks.com/images/posts/ios4/6.png


Cyript默认有一个变量UIApp,方便我引用应用的实例。
http://highaltitudehacks.com/images/posts/ios4/7.png
查找应用的委托类,我们可以使用命令 .delegate来查找委托类,但是在Cyript已经用变量UIApp来定义了应用的实例。下图a的值为UIApp,因此使用a.delegate来获取委托类。
http://highaltitudehacks.com/images/posts/ios4/8.png
我们已经得出我们这个应用的委托类是YWAppDelegate,因此对应在源码的文件时YWAppDelegate.h 和 YWAppDelegate.m。
接下来该尝试调用程序运行时一些方法。我们快速的看一下这个程序的图片。
http://highaltitudehacks.com/images/posts/ios4/IMG_0091.PNG
你可以看到上边的状态栏是隐藏的。我们可以调用一些方法来显示状态栏,同样的,请确保程序运行且在前台。
http://highaltitudehacks.com/images/posts/ios4/9.png
下面修改后的应用界面
http://highaltitudehacks.com/images/posts/ios4/IMG_0092.PNG
你看,上方的状态栏是不是不隐藏了。我们再试试修改特定应用的标记数,这个标记数就是应用图标左上角显示的数。它通常等于应用程序接收的推送通知的数量。在mail应用,标记数指的是未读的短信,qq上指的是未读的消息。Yahoo Weather没有推送消息,因此右上角也就没有显示标记数。我们可以设置

让我们尝试去修改一下标记数。这里我调用Objective-C方法来设置标记数的数量,这里设置999。
http://highaltitudehacks.com/images/posts/ios4/9x.png
然后再看一下手机桌面,可以看到右上角有个数字,这个是标记数,已经成功改成999了。
http://highaltitudehacks.com/images/posts/ios4/IMG_0093.PNG

完美!!!
让我们找到更多关于这个APP的相关信息。为了找到当前应用的View Control,我们必须首先找到keyWindow,keyWindow是当前与用户进行用户交互(比如触控)的window。如果你想找到一个应用的所有window,UIApp.window会列举所有的window,请注意window是UIWIndow类。
http://highaltitudehacks.com/images/posts/ios4/10.png
现在,为了找到keyWindow在应用的特定时间,也就是说应用与用户进行用户交互的时间。
http://highaltitudehacks.com/images/posts/ios4/11.png
现在,使用keyWIndow的rootViewController属性来找到这个window的root view controller,root view controller主要负责显示window的内容。
http://highaltitudehacks.com/images/posts/ios4/14.png
正如你所看到的,rootViewController类是YaHooSlidingVIewController,从名字我们可以知道这个class是一个Slider如下图显示的那样。
http://highaltitudehacks.com/images/posts/ios4/IMG_0095.PNG
因此,这个rootViewController在所有其他的View Controller上是充当门面的角色,即专门负责window的内容显示。这意味着菜单的一个菜单项被选中,YahooSlidingViewController负责显示适当的view controller。


References:


[*]Cycript
http://www.cycript.org/
[*]Cycript tricks
http://iphonedevwiki.net/index.php/Cycript_Tricks












页: [1]
查看完整版本: IOS应用安全(四): 用Cycript分析Runtime