大臉貓講逆向之 iOS上PDFExpert閱讀器的內購功能破解

大臉貓講逆向之 iOS上PDFExpert閱讀器的內購功能破解

來自專欄安全客

近日,在iPad上購買了PDFExpert閱讀器,用於PDF文件的閱讀。然而,令人忍無可忍的是在該應用中還有PDF文件的編輯功能不能使用,需要額外付費購買。且研究了兩周的ios逆向,迫切需要實戰的磨鍊,且我的iPad是越獄的,因此想通過tweak插件來修改啟用該功能。

本文主要目的是以當前APP的付費功能繞過為主要目的,梳理在iOS應用逆向分析過程中的主要步驟和核心思路,並以此來傳播逆向思維。當然,本文所用的工具和技術嚴謹用於各種非法用途,包括且不僅限於各種黑產、灰產等。

一、工具

class-dump:提取可執行文件中的所有頭文件

Theos:用於hook代碼的開發工具

IDA Pro:用於對可執行文件的反編譯分析

Clutch:用於對目標應用進行砸殼

FLEXLoader:用於在設備上分析應用界面元素的工具

二、分析過程

1. 定位目標

將iPad的語言切換為英文,便於查找定位相關代碼段。首先,打開應用PDFExpert,並隨意打開一本PDF文件。在界面頂端工具欄,有Annotate和Edit兩個工具按鈕,Annotate在購買完應用後即可使用,我們分析的重點在Edit按鈕。其界面如下圖所示。

隨後,點擊Edit按鈕,彈出如下圖所示的界面,提示需要升級。因此,在此做出初步猜測,在點擊Edit按鈕後,按鈕的相應函數中判斷當前用戶是否已經購買了edit PDF功能,如未購買則提示購買升級;否則,提供對PDF文件的編輯功能。

因此,根據上述做出的初步合理分析和判斷,我們需要分析的目標函數為Edit按鈕及其響應函數。

2.分析目標

安裝FLEXLoader後,在設置中啟用對該應用的注入,並重啟該應用後在界面中即可看到如下圖所示的浮動按鈕了。用紅色標註的select功能選擇Edit按鈕後,在views界面查看該按鈕的界面元素。

從下圖可知,Edit按鈕的所屬類為RDPDFViewToolbarButton。在FLEXLoader中繼續查看該類的詳情,發現該類響應UITapGestureRecognizer事件,也即按鈕的點擊事件。

從下圖所示,可知該RDPDFViewToolbarButton接受按鈕點擊事件,action為tapGesture,target為RDPDFViewToolbarButton類本身。

因此,至此我們從界面UI中確定了我們需要分析的目標函數為RDPDFViewToolbarButton的tapGesture函數,此函數響應Edit按鈕的點擊事件。

3. 代碼分析

從此,開始步入代碼分析的階段。使用clutch對該應用砸殼,並將砸殼後的可執行文件拖入IDA Pro進行解析。經過漫長的等待,IDA終於解析完成,打開目標函數,內容如下。

從中可以確定,tapGesture函數並未做複雜的處理和校驗,而是僅僅調用了函數」sendActionsForControlEvents:isApplePencilTouch:」。通過百度搜索,確認該函數的主要作用是將收到的事件Event發送到其他action。

因此,我們需要找到響應該事件的action函數。為此,我們通過cycript注入到PDFExpert進程, 並通過如下的三個步得到目標函數。

  1. cy# [btn allTargets] :返回當前Button所有相關的target對象,此處只有PDFViewMainToolbar一個;
  2. cy# [btn allControlEvents]:獲取按鈕的所有事件列表,此處只有一個16777216值,即0x0x1000000,對應上文中的」sendActionsForControlEvents:isApplePencilTouch: 「函數中的值。
  3. cy# [btn actionsForTarget:#0x14d9f81e0 forControlEvent:16777216]:獲取針對某一特定事件目標的全部動作列表。

    因此,通過上述過程,可得知該函數將按鈕的點擊消息發送給了PDFViewMainToolbar的」contentEditingButtonTouchUpInside:」函數。

    隨後,在IDA中打開該函數,其內容如下圖所示。調用了[PDFViewMainToolbar delegate]的返回值的」pdfViewMainToolbarContentEditingButtonPressed:」方法。

為獲取該函數所在類,可用cycript注入該APP,上文中我們已經可以獲取到PDFViewMainToolbar對象的實例了,隨後可直接調用其delegate函數即可得到該目標類,內容如下所示。由此可知,」pdfViewMainToolbarContentEditingButtonPressed:」函數所在類為PDFNewToolbarsController。當然,此處亦可直接在IDA搜索該目標函數,亦可得到該類。

在IDA中定位到該方法,其內容也很簡單,調用了[PDFNewToolbarsController performShowContentEditingToolsWithButton:]函數。

繼續打開[PDFNewToolbarsController performShowContentEditingToolsWithButton:]函數,其內容如下。該函數代碼量較多,可以初步確定該位置為核心代碼了。很快,我們從Allow關鍵詞即可定位到」toolbarsControllerShouldAllowContentEditButtonAction」函數是我們最終最終關係的核心函數,用於判斷是否允許啟用Edit按鈕的。從返回值的使用上也可以確定,其返回值為BOOL值。

在IDA中查找函數」toolbarsControllerShouldAllowContentEditButtonAction」,可以確定該函數位於類RDPDFViewController中。至此,我們可以編寫Tweak修改該函數的返回值為YES,即可達到啟用Edit按鈕的目的了。

三、Tweak代碼編寫

上述分析過程中,確定了我們需要hook修改的目標函數為[RDPDFViewController toolbarsControllerShouldAllowContentEditButtonAction],僅需將其返回值設置為YES即可。

相關Tweak代碼如下:

%hook RDPDFViewController- (_Bool)toolbarsControllerShouldAllowContentEditButtonAction{ return YES;}%end

編譯安裝並重啟該應用後,再次點擊Edit按鈕,很快就彈出了PDF編輯工具欄,已經可以對PDF文件進行編輯操作了,說明我們修改的目標函數很正確。

作者:

安全客 - 有思想的安全新媒體?

www.anquanke.com圖標
推薦閱讀:

黑客攻擊焦點之韓國(上)
CVE-2017-0780:一張GIF圖,讓最新版Android簡訊應用無限崩潰n2017年9月9日發布
農夫安全,依然在路上
手機「成人影院」套路深:假「草榴」 真騙錢
Burp Suite詳細基本用法(二):Spider、Scanner、Intruder模塊

TAG:網路安全 | 信息安全 | 黑客Hacker |