大臉貓講逆向之 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界面查看該按鈕的界面元素。
從下圖所示,可知該RDPDFViewToolbarButton接受按鈕點擊事件,action為tapGesture,target為RDPDFViewToolbarButton類本身。
因此,至此我們從界面UI中確定了我們需要分析的目標函數為RDPDFViewToolbarButton的tapGesture函數,此函數響應Edit按鈕的點擊事件。3. 代碼分析
從此,開始步入代碼分析的階段。使用clutch對該應用砸殼,並將砸殼後的可執行文件拖入IDA Pro進行解析。經過漫長的等待,IDA終於解析完成,打開目標函數,內容如下。
- cy# [btn allTargets] :返回當前Button所有相關的target對象,此處只有PDFViewMainToolbar一個;
- cy# [btn allControlEvents]:獲取按鈕的所有事件列表,此處只有一個16777216值,即0x0x1000000,對應上文中的」sendActionsForControlEvents:isApplePencilTouch: 「函數中的值。
- cy# [btn actionsForTarget:#0x14d9f81e0 forControlEvent:16777216]:獲取針對某一特定事件目標的全部動作列表。因此,通過上述過程,可得知該函數將按鈕的點擊消息發送給了PDFViewMainToolbar的」contentEditingButtonTouchUpInside:」函數。隨後,在IDA中打開該函數,其內容如下圖所示。調用了[PDFViewMainToolbar delegate]的返回值的」pdfViewMainToolbarContentEditingButtonPressed:」方法。
三、Tweak代碼編寫
上述分析過程中,確定了我們需要hook修改的目標函數為[RDPDFViewController toolbarsControllerShouldAllowContentEditButtonAction],僅需將其返回值設置為YES即可。
相關Tweak代碼如下:
%hook RDPDFViewController- (_Bool)toolbarsControllerShouldAllowContentEditButtonAction{ return YES;}%end
編譯安裝並重啟該應用後,再次點擊Edit按鈕,很快就彈出了PDF編輯工具欄,已經可以對PDF文件進行編輯操作了,說明我們修改的目標函數很正確。
作者:
安全客 - 有思想的安全新媒體推薦閱讀:
※黑客攻擊焦點之韓國(上)
※CVE-2017-0780:一張GIF圖,讓最新版Android簡訊應用無限崩潰n2017年9月9日發布
※農夫安全,依然在路上
※手機「成人影院」套路深:假「草榴」 真騙錢
※Burp Suite詳細基本用法(二):Spider、Scanner、Intruder模塊