您現在的位置是:首頁 >綜合 > 2021-05-24 19:53:36 來源:
綜合IT:IT之家學院 iOS越獄插件利器之Flex — App UI修改篇
手機電子產品一些功能和系統操作方式越來越完善,同時也越來越復雜很多小伙伴一頭霧水,最近一段時間IT之家學院 iOS越獄插件利器之Flex — App UI修改篇的消息也是引起了很多人的關注,現在大家都想要了解IT之家學院 iOS越獄插件利器之Flex — App UI修改篇,為此給大家針對IT之家學院 iOS越獄插件利器之Flex — App UI修改篇這樣的問題做個詳細介紹。
作為一名手機愛好者,我們經常會嘗試安裝和研究一些功能強悍的App或工具,以此來讓我們的手機更加實用,實現我們所期望的更多功能。比如Root后的安卓系統,借助Xposed框架,可以通過安裝各種插件,幫助手機實現很多平時實現不了的功能。同樣,iOS通過越獄,在Cydia Substrate框架的加持下,也能讓我們的手機突破系統限制,獲得豐富有趣的使用體驗。例如修改系統文件,增強App的使用體驗和功能。其中Flex作為iOS越獄后的經典插件之一,就是今天要給大家介紹的主題。
Flex是John Coates的作品,從推出就被大家視為越獄iOS必裝插件之一,至今已經更新到Flex3,支持至iOS11系統。通過此插件,你無需太多編程知識,也可以很容易地“操作”系統或App函數,以此來達到修改UI界面和程序功能的目的。本文主要簡單介紹如何通過Flex插件進行App可視化UI的修改,此過程需要借助一款UI調試插件FLEXible來輔助。這兩款插件如同倚天和屠龍,配合起來有無窮的威力。
使用環境:越獄iOS(筆者使用的是yalu越獄的iOS 10.2);
插件Cydia下載源地址:
1.Flex官方源: http://getdelta.co(筆者使用的是Flex3 beta46);
2.FLEXible (BigBoss源): http://apt.thebigboss.org/repofiles/cydia/;
下面筆者將以iOS系統自帶應用App Store為例,盡力從通俗、歸納的角度,面向初級學者,簡單講述一下如何利用Flex和FLEXible兩款插件去除App Store“搜索”頁面中“熱門搜索”。
去除前后效果圖:
一、在Flex中添加要修改的目標程序:
首先打開我們從官方源下載的Flex應用,點擊右上角“+”號,進入后單擊選擇我們要去修改的程序App Store;
其中Title是此補丁的名稱,可以隨意命名。為方便直觀,筆者將此補丁命名為“App Store去搜索頁面熱門搜索”。
接下來點擊“Units”中的“Add Units..”添加修改目標。進入后Flex會展示給我們兩種操作。其中“Executable”是目標程序的可執行文件,也是最經常修改的文件,類似于Windows中的exe。而Libraries是此App所使用的“庫”文件,可以簡單理解為Windows中的dll。我們可以通過單擊條目進入,看到此可執行文件或“庫”文件所使用的函數,然后在定位函數后進行相應的修改。
二、利用UI調試插件FLEXible定位函數位置:
安裝FLEXible插件后,我們需要在“設置”中找到插件選項。進入插件界面后,點擊“Enabled Applications”,找到我們要調試的應用程序“App Store”并開啟。
返回桌面重新打開App Store,我們會發現界面上方出現了FLEXible調試工具欄。其中“menu”是工具菜單項,里面包含了App的網絡、文件、內存、函數、庫文件等信息;“view”是當前的視圖布局層次圖,用于定位函數;“select”用于選擇UI區域;“move”可以移動所選擇的區域,常用于“清除”UI干擾區域,或者確定所選區域是否為目標區域;“close”則是關閉工具欄。
我們點開App Store的“搜索”頁面,選擇調試工具欄的“select”,選中我們要去除的“熱門搜索”區域。
圖中藍色陰影區域便是我們的去除目標。接下來點擊插件工具欄中的“view”,進入當前選中區域的視圖布局層次界面,里面包含了“搜索”頁面的可視化UI元素和其函數。其中默認選中的灰色區域是我們要去除的“熱門搜索”UI,UIStackView是其視圖容器。
點擊UIStackView視圖容器最右方的按鈕,進入到詳細信息界面。里面包含了此視圖容器的所有屬性和函數方法,比如視圖預覽、大小、位置、可視性等。
接下來我們點擊“View Controller For Ancestor”,進入控制此視圖的“最高”父級視圖控制器函數界面,從“根源”找到我們要去除的區域UI及其函數方法。
一般而言,一個函數方法的屬性中往往包含了比較重要的信息。我們常用的定位方式就是先從屬性中尋找我們想要的結果。此視圖控制器函數包含的重要屬性主要有兩個,分別是*resultsView和*template,根據字面翻譯,我們首先應該懷疑*resultsView。點擊此屬性,進入resultsView視圖控制器的函數。
點擊“Preview image”預覽圖片進行驗證,發現此視圖就是我們要去除的內容。
即我們如果要去除此“熱門搜索”區域,只需將控制*resultsView變量的函數方法hook掉,不讓其生效即可。
點擊左上角返回父級控制器函數SKUITrendingSearchDocumentViewController界面,下拉找到此函數的方法。
根據iOS Objective-C語言特點,一個成員變量屬性通常有setter和getter兩種。以*resultsView為例,其中getter為–(id)resultsView,setter為–(void)setResultsView:(id)。如果hook一個成員變量,我們只需hook掉getter或setter其中之一的方法即可。即只需讓–(id)resultsView和–(void)setResultsView:(id)任意一個函數方法不生效。
三、利用Flex實現函數方法的hook
Flex hook函數是通過Cydia Substrate框架來實現的。面對初級學者,我們在此不做深入討論。大家只需要記住一下幾條基本規律即可:
1.如果hook的是id方法,只需要將此方法的Return Value(返回值)設為null,此方法即不執行;
2.如果hook的是沒有返回值的void方法,只需要選擇添加上此方法即可;
3.如果hook的是其它返回值的方法,比如int、bool等,只需要在方法的返回值里填入要設置的值。
下面我們回到Flex程序中,接著第一步驟,選擇我們要hook的文件和Target Method(目標函數方法)。上文中我們提到過,hook一個App主要是hook它Executable(主執行程序)里的函數方法。但是SKUITrendingSearchDocumentViewController隸屬于Libraries中的StoreKitUI庫(App Store中搜索不到此函數,且根據函數開頭SK推測后驗證得出)。
在“Choose Library”中點擊“Libraries”中的StoreKitUI庫。進入后在上端搜索框中輸入我們要定位的函數SKUITrendingSearchDocumentViewController。
點擊“SKUITrendingSearchDocumentViewController“,進入后我們會看到此函數下的所有方法。其中–(id)resultsView和–(void)setResultsView:(id)就是我們要hook的目標。點擊選擇兩者中任意一個方法(筆者選擇的前者),然后返回到此補丁的“Patch Editor”界面。可以看到“Units”下方多出了我們要hook的函數方法
–(id)resultsView。
根據前文提到過的,如果hook的是id方法,只需要將此方法的Return Value設為null,此方法即不執行。
點擊–(id)resultsView項,在“Edit Unit”界面將其“Return Value”的值選為“null”。然后返回到Flex的首頁補丁列表界面,將此補丁的開關開啟,并重新打開App Store進行驗證。
根據效果圖可以看到,“搜索”界面的“熱門搜索”區域已經被我們成功去除。
四、總結:
此文主要簡單介紹了Flex和FLEXible的基本用法,以及如何利用兩者定位UI類函數的位置。目的是給初學者起一個拋磚引玉的作用。在不同App中,函數方法的定位略有不同,但是大概的思路基本相同:
先利用FLEXible選擇要修改的UI區域,利用“view”視圖布局層次圖找到視圖的“父級”視圖控制器函數。然后通過推測、排除、驗證等方法確定成員變量及其函數方法;
在Flex中搜索定位到的函數方法,通過修改返回值(id,int,bool等)或選定的方式(void類)起到hook的效果。
返回App進行驗證。
結尾:Flex是一款功能強大的iOS越獄插件,通過它我們可以根據自己需要,修改UI視圖的函數方法,擁有更加個性化的App體驗。但是Flex也不是萬能的,比如它修改不了視圖的大小、位置、可視性等UI元素屬性。此時,就需要功能更強大豐富,但知識技能要求也更高的Theos越獄開發工具包來幫我們完成了。
注:本文由aReo原創(微信公眾號Flex2aReo),未經作者允許,請勿轉載。