如何使用cycript绕过应用程序的PIN保护 - 嘶吼 RoarTalk – 网络安全行业综合服务平台,4hou.com

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

xiaohui 移动安全 2018-07-16 10:55:56
91643
收藏

导语:本文将展示如何在运行时使用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来确认我是否被授予了访问权限。

  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论

 
本站4hou.com,所使用的字体和图片文字等素材部分来源于原作者或互联网共享平台。如使用任何字体和图片文字有侵犯其版权所有方的,嘶吼将配合联系原作者核实,并做出删除处理。
©2022 北京嘶吼文化传媒有限公司 京ICP备16063439号-1 本站由 提供云计算服务