本文是该系列文章的第2篇(第一篇请点击此处),我们将继续为读者介绍最有用的iOS应用程序渗透测试工具。在本文中,我们要介绍的工具为“Cycript”,这是一个运行时处理工具,主要用于动态分析和探索目标应用程序的执行流程。

对于这个系列文章来说,我们假设用户使用Electra进行越狱。就我而言,使用的系统是iOS11.1.2,但是本系列中的大多数工具都可以在任何版本的iOS11上使用。

安装Cycript

对于iOS 11来说,cycript是随bfinject一起安装的,关于bfinject的安装方法,我们在第1篇中已经安装好了。也就是说,我们已经在iPhone上安装了Cycript,不过,我们还需要在计算机上安装该软件。

您可以从http://www.cycript.org/下载该软件。

下载后,请将.zip解压到您喜欢的任何位置,然后,通过cd命令切换至该目录中。

将Cycript注入到应用程序中

现在,我们要在目标应用程序上运行Cycript,具体步骤如下所示:

通过SSH连接手机,并运行下列命令:

bash bfinject -P AppName -L cycript

这时候,会看到如下内容:

接下来,我们需要在计算机上启动Cycript程序。然后,在新的终端窗口中,运行如下所示的命令:

cycript -r XX.X.X.XXX:1337

其中xx.x.x.xxx是该设备的IP地址。

当您看到Cycript提示符出现时,说明连接成功:

cy#

注意:对于运行Mojave/High Sierra的用户来说,在运行Cycript时可能会遇到过如下所示的错误:

dyld: Library not loaded: /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/libruby.2.0.0.dylib
 
Referenced from: /Users/me/Downloads/cycript/Cycript.lib/cycript-apl
 
Reason: image not found
 
Abort trap: 6

如果出现这种情况,说明您机器上的Ruby的版本/路径有问题,这时最简单的解决方法是运行下列命令:

brew install [email protected]

然后,手动将libruby.2.0.0.dylib文件移动到cycript主目录中。

探索运行时的世界

现在,我们已经为分析工作做好准备了!

下面,我们运行的第一个、也是最基本的命令,就是去确定当前视图,具体操作如下所示:

cy# UIApp.keyWindow.rootViewController

这样的话,软件就会返回当前视图控制器的名称。当使用更复杂的导航控制器或制表符栏控制器时,为了确定当前查看的到底是哪个视图,需要为"root viewcontroller"添加“visible viewcontroller”、“selected viewcontroller”或“presented viewcontroller”。

接下来,您可能想要浏览存储在内存中的当前对象。在第1篇文章中,我们考察了一个应用程序转储的头文件,并注意到了一些有趣的类/属性/方法。现在,我们看到的当前视图名为“WelcomeViewController”。我们可以转至转储的头文件,并搜索“WelcomeViewController”,可以看到,它有一个属性“loggedinuser”。

现在,我们可以借助cycript工具来查看这些属性了。

cy# UIApp.keyWindow.rootViewController.loggedInUser
"<User: 0x104924e00>"

现在,我们看到LoggedInUser属性是名为“User”的类实例的引用。此外,我们也可以将对象存为变量,以便于进一步的考察:

cy# currentUser = UIApp.keyWindow.rootViewController.loggedInUser

现在,我们可以返回类转储文件,查看LoggedInUser等类中是否含有我们感兴趣的属性。此外,我们还可以调用方法!例如,假设loggedInUser类有一个方法:

- (_Bool)isEmailVerified;

我们可以使用cycript调用此方法,并查看其返回结果:

cy# [currentUser isEmailVerified]
true

我们还对该方法进行操纵,使其返回我们想要的内容:

cy# User.prototype.isEmailVerified = function () { return true; }

同时,我们也可以操纵属性:

cy# user.isLoggedIn = true

另一个非常有用的命令是“choose”——当您知道要检查的类实例,却不知道它在哪里时,该命令就派上用场了。这个函数将返回一个数组,其中包含找到的实例,通常来说,数组中的第一个对象,就是我们的要找的对象。例如,假设我要考察一个名为“NetworkHandler”的类的实例:

cy# choose(NetworkHandler)[0]
"<NetworkHandler: 0x103524e00>"

现在,我可以将该实例存储在一个变量中,并进行进一步的考察。

当然,这只是cycript丰富功能中的一个例子而已,若要更加深入的了解该软件的功能,推荐阅读这篇文档。本文到此结束,感谢阅读!

本文翻译自:https://www.allysonomalley.com/2018/12/13/ios-pentesting-tools-part-2-cycript/如若转载,请注明原文地址: http://www.4hou.com/info/news/15836.html
源链接

Hacking more

...