如何利用cycript绕过iOS应用程序的PIN保护机制

secM  2159天前

在本文中,我们将为读者详细讲解攻击者是如何在应用程序运行过程中,借助Cycript工具从中提取PIN的。

该漏洞是在运行iOS 10.2的、已经越狱的iPhone 5S手机中发现的。请注意,对于早期/更新版本的iOS系统来说,可能与文中使用的工具不兼容。

1) Clutch

我们将使用“Clutch 2”(一个公开的iOS解密工具)来解密和提取应用程序的.ipa文件,稍后,还需要转储和检查应用程序类的ob jective-C头文件。

 Clutch软件的下载地址:https://github.com/kjcracks/clutch

 我们可以按照安装说明在设备上安装Clutch

 如果运行Clutch2时出现“Permission Denied”错误,请首先运行以下命令:

$ chmod a+x /usr/bin/Clutch2

此后,就可以运行下列命令了:

$ Clutch2 -i

这时,就会显示已安装的应用程序。然后,选择您想要使用的应用程序,并复制它的bundleID的值。

接下来,请运行下面的命令:

$ Clutch2 –b <BundleID>

这时,会看到一条消息,指出破解的二进制文件已经被转储,并提供其保存位置。

接下来,我们需要将二进制文件传输到Mac,以进行相应的分析。当然,完成该任务的方法有很多种,但我更喜欢用CyberDuck。不过,您可以根据自己的习惯选用合适的文件传输软件,或者直接使用ssh连接手机,并通过scp命令将.ipa文件传送至计算机。

.ipa文件转移至计算机之后,对其进行解压,就可以访问其中的内容了。(执行该操作之前,需要先将文件类型改为.zip)。

2) class-dump

下一步,是使用一个名为class-dump的工具转储应用程序的运行时头文件。我们可以通过brew命令,将其安装到我们的计算机上:

 $ brew install class-dump

首先,找到应用程序的可执行文件。实际上,它们位于我们复制到计算机上的.ipa文件夹中,具体路径为/Payload/<AppName>.app/AppName

然后,运行:

$ class-dump/Payload/<AppName>.app/AppName > dumpedHeaders

 其中“dumpedHeaders”是要创建的文件,用来存放我们转储的内容。

 之后,我们可以借助文本编辑器(如Sublime)来查看“dumpedHeaders”文件的内容。对于这个应用程序来说,打开"dumpedHeaders"文件后,就可以任意搜索自己感兴趣的东西了。我首先搜索了“authorize”、“login”或“pin”等单词,很快就发现了要找的东西:

 1.png

我们可以看到,在DTPinLockController类中,有一个属性NSString * pin——这就是我们要找的目标,这样,我们就可以进入下一步了。

3) cycript

 首先,从http://www.cycript.org/网站将最新版本的cycript软件下载到我们的电脑上面。

然后,通过文件传输工具(如CyberDuckSFTPSCP等)将cycript上传到我们的手机上。

最后,通过ssh连接手机,并通过运行以下命令完成安装工作:

 $ dpkg -i cycript.deb

现在,请运行cycript,如果一切正常的话,就会看到#_cy提示符。(在进行下一步操作之前,请先退出cycript)。

到目前为止,我们已经为hook目标应用程序的进程做好了充分的准备。为了查找应用程序的进程ID,请确保该应用程序正在您的手机上运行,然后,执行下列命令:

$ ps aux

复制目标应用程序的PID,然后执行下列命令:

$ cycript -p <PID>

现在,我们已经hooked了该进程,所以,就能够在它运行过程中探索其数据了。

由于这个应用程序需要输入PIN,并且该应用程序正在手机上运行,并进入了“Enter PIN”屏幕。

 1.png

为了确定我们看到的ViewController的名称,可以在cycript中运行:

 cy# UIApp.keyWindow.rootViewController

返回内容如下所示:

 DTPinLockController

现在,切换至class-dump,我们可以看到,这确实是我在前面找到的NSString属性“pin”所对应的屏幕,这就意味着,我们也能够在运行过程中访问它的值。要查看这个PIN的存储是否提供了安全保护,可以运行下面的命令:

cy# UIApp.keyWindow.rootViewController.pin

神奇的是,用户的PIN码竟然被吐了出来:

 1.png

现在,我们已经在应用运行过程中成功地截取了用户的PIN。为了确认一下,我们可以直接将其输入该应用程序,看看是否被授予相应的访问权限既可。

 

原文地址:https://www.allysonomalley.com/2018/06/26/bypassing-apps-pin-protection-with-cycript/

最新评论

昵称
邮箱
提交评论