导语:本文将展示如何在运行时使用cycript技术从应用程序中提取信息,允许攻击者访问应用程序的PIN。

360截图16190824445564.jpg

本文将展示如何在运行时使用cycript技术从应用程序中提取信息,允许攻击者访问应用程序的PIN。

在阅读本文前,需要先了解一些cycript和PIN保护的基本概念,Cycript是由saurik推出的一款脚本语言,是混合了objective-c与javascript语法的一个工具,让开发者在命令行下与应用交互,在运行时查看和修改应用。Cycript是一个能够理解Objective-C语法的javascript解释器,它能够hook正在运行的进程,以在运行时修改很多东西, 常用于动态调试应用,一般来说,如果要调试的代码是用OC编写的,那么用cycript调试会很方便, 如果是用C编写的,则通过lldb来调试了。

PIN码(PIN1),全称Personal Identification Number.就是SIM卡的个人识别密码。手机的PIN码是保护SIM卡的一种安全措施,防止别人盗用SIM卡,如果启用了开机PIN码,那么每次开机后就要输入4到8位数PIN码。

在输入三次PIN码错误时,手机便会自动锁卡,并提示输入PUK码解锁,需要使用服务密码拨打运营商客服热线,客服会告知初始的PUK码,输入PUK码之后就会解锁PIN码。

本文我所利用的漏洞是通过运行iOS 10.2的破解版iPhone 5s发现的,请注意,早期版本或更高版本的iOS可能与本文使用的工具不兼容。

Clutch

我将使用‘Clutch 2’(一种公共iOS解密工具)来解密和提取应用程序的.ipa文件,我稍后需要转储并检查应用程序类的Objective-C标头。

Clutch可以在这里下载:https://github.com/KJCracks/Clutch

按照安装说明在你的设备上安装Clutch。

如果你运行Clutch2并看到“权限被拒绝”错误,你可能需要先运行此命令:

$ chmod a+x /usr/bin/Clutch2

然后再运行:

$ Clutch2 -i

这样,你将看到已安装应用的列表。选择你要使用的应用并复制它的bundleID值。

再接着运行:

$ Clutch2 –b <BundleID>

此时,你应该会看到一条消息,告诉你已破解的二进制文件被转储位置的保存路径。

接下来,你需要将二进制文件转移到Mac上进行分析,虽然目前实现这一目标有多种方式,但我更喜欢使用CyberDuck(CyberDuck容许同时打开多个窗口,于是可同时连到多个服务器工作。当然也附书签,支持运行publicfile(FTP)服务器的EPFL文件列表),当然你也可以使用你认为合适的文件传输软件,或者直接将手机插入Mac并将.ipa发送到你的计算机即可。

在电脑上安装.ipa后,我只需解压缩文件即可访问其中的内容。不过,在执行此操作之前,你可能必须手动将文件类型更改为.zip。

class-dump

class-dump顾名思义,就是用来转储目标对象的class信息的工具。它利用Objective-C语言的runtime特性,将存储在Mach-O文件中的头文件信息提取出来,并生成对应的.h文件。一句话,class-dump,是可以把Objective-C运行时的声明的信息导出来的工具,其实就是可以导出.h文件。

你可以通过运行以下方法在安装了brew的计算机上安装class-dump,Brew又叫Homebrew,是MAC中的一款软件包管理工具,通过brew可以很方便的在MAC中安装软件或者是卸载软件,不过有一些MAC系统中并没有自带brew,需要自己安装。

$ brew install class-dump

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

运行:

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

其中'dumpedHeaders'是你要创建转储的文件,现在,你应该能够在任何文本编辑器(如Sublime)中查看“dumpedHeaders”了。对于这个应用程序,我可以打开文件并搜索任何有趣的内容。通过搜索 ‘authorize’,‘login’或 ‘pin’等术语,我很快就遇到了我正在寻找的内容。

Screen-Shot-2018-06-26-at-8.18.05-AM.png

我可以看到在DTPinLockController类中,有属性NSString * pin。现在我找到了一个目标,就可以接着下一步了。

cycript

我下载的是最新版本的cycript:http://www.cycript.org/,然后,通过传输文件工具(通过CyberDuck,sftp,scp或你喜欢的任何方式)将cycript放在你的设备上。最后,通过运行ssh进入手机安装过程。

$ dpkg -i cycript.deb

现在你可以尝试运行cycript并确认是否出现#cy提示符。请注意,在进行下一步之前退出cycript。

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

$ ps aux

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

$ cycript -p <PID>

这就是整个进入流程,之后你就可以开始探索该应用程序了。

由于此应用需要输入PIN码,所以此时我的应用程序已在手机上打开“输入PIN码”的页面。

Screen-Shot-2018-06-26-at-8.35.49-AM.png

要确认我看到的ViewController的名称,我要在cycript中运行以下命令。

cy# UIApp.keyWindow.rootViewController

然后返回:

DTPinLockController

现在,看看我的class-dump,可以看到这确实是我之前找到的'pin'NSString属性的截图,因此我应该能够在运行时访问它的值。为了查看PIN存储是否安全,我运行以下命令。

cy# UIApp.keyWindow.rootViewController.pin

神奇的是,用户的PIN码竟被输出了。

pic_2.png

这样,我就使用 cycript成功窃取了用户的PIN,此时,我可以通过在应用程序上输入PIN来确认我是否被授予了访问权限。

源链接

Hacking more

...