當前位置:
首頁 > 新聞 > 如何使用cycript繞過應用程序的PIN保護

如何使用cycript繞過應用程序的PIN保護

本文將展示如何在運行時使用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

此時,你應該會看到一條消息,告訴你已破解的二進位文件被轉儲位置的保存路徑。

接下來,你需要將二進位文件轉移到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/.app/AppName。

運行:

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

其中"dumpedHeaders"是你要創建轉儲的文件,現在,你應該能夠在任何文本編輯器(如Sublime)中查看「dumpedHeaders」了。對於這個應用程序,我可以打開文件並搜索任何有趣的內容。通過搜索 『authorize』,『login』或 『pin』等術語,我很快就遇到了我正在尋找的內容。

我可以看到在DTPinLockController類中,有屬性NSString * pin。現在我找到了一個目標,就可以接著下一步了。

cycript

$ dpkg -i cycript.deb

現在你可以嘗試運行cycript並確認是否出現#cy提示符。請注意,在進行下一步之前退出cycript。

現在我已準備好hook我們的目標應用程序,要查找應用的進程ID,請確保該應用正在你的手機上運行。

$ ps aux

複製目標應用的PID,然後運行:

$ cycript -p

這就是整個進入流程,之後你就可以開始探索該應用程序了。

由於此應用需要輸入PIN碼,所以此時我的應用程序已在手機上打開「輸入PIN碼」的頁面。

要確認我看到的ViewController的名稱,我要在cycript中運行以下命令。

cy# UIApp.keyWindow.rootViewController

然後返回:

DTPinLockController

現在,看看我的class-dump,可以看到這確實是我之前找到的"pin"NSString屬性的截圖,因此我應該能夠在運行時訪問它的值。為了查看PIN存儲是否安全,我運行以下命令。

cy# UIApp.keyWindow.rootViewController.pin

神奇的是,用戶的PIN碼竟被輸出了。

這樣,我就使用 cycript成功竊取了用戶的PIN,此時,我可以通過在應用程序上輸入PIN來確認我是否被授予了訪問許可權。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 嘶吼RoarTalk 的精彩文章:

WordPress內核中一個任意文件刪除漏洞,可導致攻擊者執行任意代碼
盤點迄今為止Mirai的7大變種

TAG:嘶吼RoarTalk |