使用 cycript 绕过应用程序的 PIN 保护

前言

注:正在分析的应用程序不是我自己的,因此我省略了任何识别信息。这只是对搜索类似漏洞的步骤的演示。

本文将演示如何在运行时使用Cycript从应用程序中提取信息,从而使攻击者能够访问应用程序的PIN。这个漏洞是通过运行iOS 10.2的越狱iPhone 5s发现的。请注意,早期/较晚版本的IOS可能与本文使用的工具不兼容。

 

一、 Clutch

我们将使用“Clutch2”(一个公共iOS解密工具)来解密和解压缩应用程序的.ipa文件,接着我们将需要转储和检查应用程序类的Objective-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)。

 

二、class-dump

下一步是使用类转储工具转储应用程序的运行时头文件。通过运行以下命令,可以使用BREW在计算机上安装此程序:

$ brew install class-dump

首先,找到应用程序的可执行文件。可以在复制到计算机的.ipa文件夹中找到它,位于路径/Payload/<AppName>.app/AppName。

运行:

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

其中,“dumpedHeaders”是要创建的文件,将在其中写入转储。

现在,应该能够在任何文本编辑器如Sublime中看到dumpedHeaders。对于这个应用程序,我们打开文件并搜索。我首先搜索“授权/authorize”、“登录/login”或“PIN”等词语。我很快就找到了我要找的东西:

我可以看到,在DTPinLockController类中,有属性NSString *pin。现在我已经找到了一个目标,可以进行下一步了。

 

三、cycript

首先,在你的计算机上下载最新版本的Cycript:http://www.cycript.org/

然后,通过传输文件在设备上放置Cycript(通过CyberDuck、sftp、scp或任何你喜欢的方式)。

最后,运行一下命令:

$ dpkg -i cycript.deb

现在,你可以尝试运行Cycript并确认出现了#Cy提示符。(确保在下一步之前退出Cycript)。

现在,我们已经准备好连接到我们的目标应用程序的过程。要查找应用程序的进程ID,请确保应用程序正在你的手机上运行:

$ ps aux

复制目标应用程序的PID,然后运行:

$ cycript -p <PID>

现在已经hook到这个进程,并且可以在运行时开始探索这个应用程序。

由于这个应用程序需要一个PIN,此时在我的手机上打开应用程序,并输入PIN。

为了确认我看到的ViewController的名称,我在Cycript中运行:

cy# UIApp.keyWindow.rootViewController

然后:

DTPinLockController

现在,回顾一下我的类转储,我可以看到这确实是我在前面找到的“pin”NSString属性所在的屏幕,因此我应该能够在运行时访问它的值。要查看PIN是否存储得不安全,运行:

cy# UIApp.keyWindow.rootViewController.pin

神奇的是,用户的PIN就会被显示出来:

现在,我们在运行时成功地窃取了用户的PIN。我可以通过简单地在应用程序上输入PIN来确认这一点,并且我被授予了访问权限。

审核人:yiwang   编辑:边边

(完)