iOS应用安全Part2:获取iOS应用的类信息

【说明】英文原文发表时间:2013.5.7,原文链接:点击这里

简介

上一篇《iOS应用安全Part1:搭建移动渗透测试平台》中,我们学习了如何在越狱设备上搭建一个移动审计环境。
在本文中,我们将着眼于如何分析iOS设备上任何预装的APP,或者从苹果App商店下载的其他APP,并收集关于APP源代码的一些信息,例如它使用的类信息、视图控制器名字、内部库文件以及更复杂的细节,如特定类或视图控制器的变量和方法名。下面,我们将学习如何解密从App商店下载的应用程序,并dump应用程序使用的所有图片、plist文件。

Dump设备上预装APP的类信息

现在我们将对APP进行分析以获取它的类信息。我们就以苹果地图APP为例,尝试dump该应用的类信息。首先,需要确定该APP可执行文件的位置,iOS设备所有的预装APP都存储在目录“/Applications”中。所以,我们进入到该目录:

这里,你将看到iOS设备中所有预装的APP,现在我们进入地图APP的目录并列出目录中所有文件。

正如上图中显示的,我们可以看到该APP使用的所有图片、plist文件。后面我们将讨论从一个特定的iOS APP中获取所有的图片和其他文件的可行性。无论如何,这些文件中包含着APP的一个可执行文件,它的名字和APP名字一样,如下图中的左边所示。需要注意的是,在APP bundle中还有一些pdf文件,但是我并没有看到在bundle中包含pdf文件的任何必要。

为了dump该APP的类信息,只需要执行指令“class-dump-z Maps”。

正如你所看到的,现在终端中输出了太多内容,所以最好还是将这些输出保存的一个文件中,在本例中,我将输出保存到了class-dump-Maps文件中。

现在,可以使用sftp工具以ftp方式登录到iOS设备,并下载该文件。这样你就可以以下面的指令获取任何文件,代码所下图所示。

既然现在已经将文件下载到了本地系统上,接着我们用TextMate工具(或者使用textedit或其他程序)打开该文件。

在上图中,通过查看接口文件,我们可以深入了解该APP的设计方式,例如,从上图中我们可以看到一个名为InfoCardController的视图控制器。可能你也猜到了,当我们点击右边箭头按钮时,它是用来展示特定地点更多信息的视图控制器,如下图所示。

现在,我们看一下APP中的这个视图,这个页面由视图控制器InfoCardViewController展示,该控制器从class-dump-z的信息中获得。

从这张图片和上面的类信息中可以轻易看到,当你点击这些按钮时,都有什么方法被调用。例如,如果我点击“Directions to Here”,将会调用下面的方法:

-(void)_directionsTo:(id)to person:(void*)person property:(int)property identifier:(int)identifier;

类似地,如果我点击“Add to Bookmarks”,程序将调用下面的方法:

-(void)_addToBookmarks:(id)bookmarks person:(void*)person property:(int)property identifier:(int)identifier;

此外,从APP中你还可以找到很多其他信息,例如,可以发现类UserLocationSearchResults继承自SearchResult。


至于你能从中发现多少信息,这取决于你的好奇心大小。

Dump苹果应用商店下载的APP类信息

如果你想对苹果应用商店下载的APP进行分析的话,那么下面两条你需要特别注意:
  • 这些应用程序存储在不同的位置:/var/mobile/Applications /
  • 与设备预装的APP不同,这些应用程序是加密的,因此在分析之前你需要先对它们进行解密。
为了解密这种APP,我们需要使用一个命令行工具Clutch。注意,Clutch由Hackulous提供,但是它在几个月前已经关闭。不过,在网上仍然可以获得Clutch的二进制文件。
现在你需要将Clutch的二进制文件上传到你的iOS设备。为了实现它,我们将使用sftp来上传此文件,只需要使用“put”指令即可:

现在,ssh到你的设备然后输入clutch,此时将会列出所有可以破解的APP。

为了破解一个特定的APP,只需要输入“clutch app-name”即可。例如,如果我们想破解Facebook应用,我们可以输入“clutch Facebook”。

一旦破解完毕,它将告诉你ipa文件的保存位置。现在该ipa文件就是整个APP bundle的压缩版本。为了解压ipa文件,只需使用unzip指令对其解压,并使用-d命令选项将其保存到指定目录,如下图所示。注意,你也可以使用sftp先将ipa文件拷贝到你的系统(电脑)中,然后在这里解压它。解压之后,你将可以访问该APP的所有图片和其他文件。


既然现在我们已经解密了APP文件,接下来我们就可以使用class-dump-z来dump它的类信息,并将这些信息保存到一个文件中,在本例中我将信息保存到了文件class-info-Facebook中。

一旦完成之后,就可以结束ssh会话了。然后通过sftp登录并下载class-info-Facebook文件。

现在,你可以使用任何文本查看器来查看这个文件。例如,名为FBFacebookRequestSender的协议有一些方法用于发送异步请求,也有一些方法来用来检测Facebook会话的有效性。

从特定APP中获取图片及其他文件

正如本文前面讨论的,其中一个方法就是使用sftp从目标APP的目录中获取所有你感兴趣的文件。然而,还有一些更简单的方法,其中一个就是使用iExplorer工具。从官网下载该工具之后,打开它并确保你的iOS设备已通过USB与电脑成功连接。

要查看文件系统,只需要点击文件。

要查看特定APP的文件,只需要单击对应的APP。

正如你所看到的,浏览文件系统并上传或下载文件非常简单。在本例中,我们将Facebook应用中的所有图片和文件全部下载到电脑。在下图的左边,寻找Facebook并单击它,然后将显示包含Facebook应用程序文件的目录,所有的图片和文件都存在于该目录中。

为了下载所有文件,只需要Cmd+A,然后右键单击并选中“Export to Folder”(导出到文件夹),然后选择你想保存这些文件的位置。

结论

在该系列的前两篇文章中,我们已经学会了如何在越狱设备上设置一个移动审计环境,并掌握了如何dump特定APP的类信息,并理解了代码设计和它的内部工作原理。另外,我们还学了如何解密一个从苹果应用商店下载的APP,并对它的信息进行审计。最后,我们还掌握了如何使用sftp和iExplorer来获取APP中的图片。
好消息是,通过使用class-dump-z获取的类信息,我们可以知道所有被调用的方法。但是,有可能在APP中执行一些运行时修改吗?例如,如果一个方法“-(BOOL) isFacebookSessionValid”在一个特定情况下返回值为假,那么我们有可能通过修改APP让其返回值为真,以此来让APP执行一些意想不到的内容?更进一步地,有可能创建我们自定义的方法,并在每次调用某个方法时来执行我们自定义的方法吗?是否有可能在运行时修改实例变量的值,或者在任何特定指令之后修改?答案是肯定的,我们将在下一篇中学习这些技术。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值