參考書籍:iOS應(yīng)用逆向工程第二版
調(diào)試其他應(yīng)用界面,很詳細(xì)的教程
本文是在調(diào)試其他應(yīng)用界面上補(bǔ)充
上面的資料兩者結(jié)合看,結(jié)合看才會更容易看懂
一. 準(zhǔn)備工作
通過前幾章節(jié)的學(xué)習(xí)我們已經(jīng)能夠通過Reveal查看自己開發(fā)程序界面信息,但是從Xcode6開始蘋果已經(jīng)將Reveal查看自己開發(fā)程序界面信息的功能集成到了Xcode中, 只需要在程序運(yùn)行起來之后點(diǎn)擊Debug View hierarch按鈕即可。

1.越獄你的iOS設(shè)備:可以利用盤古、PP助手、太極等三方工具一鍵越獄。(筆者使用的就iOS版本就是iOS8.4,使用太極越獄,非廣告……關(guān)于越獄的教程,太極的官網(wǎng)上已經(jīng)貼出,無比簡單,傻瓜式教程),iOS程序員越獄對手機(jī)無任何影響開發(fā)調(diào)試照常
PP助手
盤古
太極
2.iOS設(shè)備越獄完成后,需要使用Cydia
安裝兩個軟件:**OpenSSH
和CydiaSubstrate
**
安裝OpenSSH,打開越獄后的設(shè)備上的Cydia程序,點(diǎn)擊搜索輸入OpenSSH,然后點(diǎn)擊安裝。(下面的配圖是已經(jīng)安裝成功后搜索的顯示畫面)


MobileSubstrate是一個公共庫,可以用來動態(tài)替換內(nèi)存中的代碼、數(shù)據(jù)等?;旧显姜z機(jī)下比較有用的系統(tǒng)工具都需要這個庫,是Cydia同一個作者維護(hù)的,可以放心裝。
3.將libReveal.dylib上傳到越獄后的設(shè)備的/Library/MobileSubstrate/DinamicLibraries
下檢查工作:測試OpenSSH和Cydia Substrate是否安裝成功
》上傳libReveal.dylib文件必須使用到上面安裝的OpenSSH工具。如果想要使用OpenSSH工具,那么就必須將Reveal軟件所在的mac設(shè)備與越獄后的iOS設(shè)備置于同一個局域網(wǎng)內(nèi)。
》首先來測試OpenSSH是否安裝成功。獲取越獄后的設(shè)備的局域網(wǎng)內(nèi)的IP地址,打開“設(shè)置”->“WLAN”,連上局域網(wǎng),然后再點(diǎn)擊連接上的局域網(wǎng)查看iOS設(shè)備的IP地址。

》打開mac上的終端工具(Terminal),輸入如下命令:ssh root@iOS設(shè)備IP地址。輸入完成后回車,等待連接iOS設(shè)備。

》接下來會提示你輸入root用戶的密碼,iOS設(shè)備root用戶的默認(rèn)密碼是alpine,在終端中輸入密碼時(shí),終端不會顯示你輸入的字符,所以只需要輸入alpine字符后回車就可以請求連接iOS設(shè)備了。(這一步請保證你的iOS設(shè)備屏幕已經(jīng)解鎖,不然不會出現(xiàn)輸入密碼的提示!)

》如果出現(xiàn)~ root#字符就表示連接成功了。

接下來測試Cydia Substrate 是否安裝成功,上一步已經(jīng)連接上iOS設(shè)備的終端中輸入以下命令:cd /Library/MobleSubstrate/DinamicLibraries
,回車查看返回結(jié)果。如果出現(xiàn)-sh: cd: /Library/MobileSubstrate/DynamicLibraries: No such file or directory
提示那就說明Cydia Substrate安裝**不成功**,不成功請重新進(jìn)入iOS設(shè)備上下載安裝Cydia Substrate軟件。
非也,有可能是安裝成功的
此處有重大更新更新內(nèi)容
cd: /Library/MobileSubstrate/DynamicLibraries: No such file or directory 并不一定就是沒安裝好Cydia Substrate軟件,使用ls -l /Library命令查看里面是否有RHRevealLoader
shujinokinakenkou:~ root# ls -l /Library
total 24
drwxrwxr-x 6 root admin 204 Feb 26 2015 Application Support
drwxrwxr-x 5 root admin 170 Feb 26 2015 Audio
drwxrwxrwt 2 root admin 68 Nov 8 2014 Caches
drwxrwxr-x 2 root admin 68 Nov 8 2014 Filesystems
drwxr-xr-x 3 root admin 102 Jul 2 01:21 Frameworks
drwxrwxr-x 2 root admin 68 Nov 8 2014 Internet Plug-Ins
lrwxr-xr-x 1 root admin 24 Feb 26 2015 Keychains -> ../private/var/Keychains
drwxr-xr-x 2 root wheel 68 Nov 8 2014 LaunchAgents
drwxr-xr-x 2 root wheel 9350 Jul 2 16:00 LaunchDaemons
lrwxr-xr-x 1 root admin 19 Feb 26 2015 Logs -> ../private/var/logs
drwxrwxr-x 2 root admin 102 Nov 8 2014 Managed Preferences
lrwxr-xr-x 1 root admin 27 Feb 26 2015 MobileDevice -> ../private/var/MobileDevice
drwxr-xr-x 3 root wheel 136 Jul 2 18:00 MobileSubstrate
drwxr-xr-x 4 root admin 170 Sep 17 2015 MusicUISupport
drwxr-xr-x 2 root wheel 68 Oct 16 2015 PreferenceBundles
drwxr-xr-x 3 root wheel 102 Jul 2 16:00 PreferenceLoader
lrwxr-xr-x 1 root admin 26 Feb 26 2015 Preferences -> ../private/var/preferences
drwxrwxr-x 2 root admin 68 Nov 8 2014 Printers
drwxr-xr-x 2 root admin 102 Jul 2 16:00 RHRevealLoader
lrwxr-xr-x 1 root admin 29 Jul 1 21:05 Ringtones -> /var/stash/_.3W5Eov/Ringtones
drwxrwxr-x 2 root admin 68 Nov 8 2014 Updates
有RHRevealLoader說明安裝是正確的,再使用root# ls -l /Library/RHRevealLoader ,里面有libReveal.dylib
shujinokinakenkou:~ root# ls -l /Library/RHRevealLoader
total 4284
-rw-r--r-- 1 root admin 4384608 Jul 2 16:00 libReveal.dylib
shujinokinakenkou:~ root#
3.1)下一步配置Reveal(三步,很簡單)

3.2) 效果圖分別為淘寶和appstore的(淘寶的輪播是UIScrollView做的,背景view是大大的collectionView)


如果上面缺少ibReveal.dylib 繼續(xù)4.步
4.上傳libReveal.dylib。如果上一個步驟的檢查工作全部完成:OpenSSH和Cydia Substrate成功安裝。
重新打開mac上的終端工具(Terminal),使用如下命令進(jìn)入Reveal軟件的動態(tài)庫所在目錄:cd /Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries

使用如下命令將libReveal.dylib上傳到iOS設(shè)備的/Library/MobileSubstrate/DynamicLibraries目錄下:scp libReveal.dylib root@iOS設(shè)備IP地址:/Library/MobileSubstrate/DynamicLibraries/
,請?zhí)鎿Q@之后的“iOS設(shè)備的IP地址”為你的iOS設(shè)備的真實(shí)地址,回車執(zhí)行命令后會讓你輸入iOS設(shè)備的root的密碼,默認(rèn)是alpine,上傳成功后會顯示%100字樣。

5.編寫并上傳一份libReveal.plist
到iOS設(shè)備的/Library/MobileSubstrate/DynamicLibraries
目錄中。這個文件的作用是:在Reveal中監(jiān)控指定的App,不上傳這個文件也是可以的,那么Reveal就會監(jiān)控所有的App,只是這樣速度會慢一點(diǎn)點(diǎn)。編寫libReveal.plist文件,最簡單的方法就是新建一個plist文件,它的內(nèi)容是
{ Filter = { Bundles = ( "你要查看的app的bundle Id1","你要查看的app的bundle Id2" ); }; }
xcode下打開這個libReveal.plist文件可以看到它的結(jié)構(gòu)示例(筆者已經(jīng)添加了兩個Bundle ID):



6.上傳libReveal.plist
到iOS設(shè)備的/Library/MobileSubstrate/DynamicLibraries
目錄中。打開終端進(jìn)入libReveal.plist所在的目錄,使用如下命令上傳:scp libReveal.plist root@iOS設(shè)備的IP地址:/Library/MobileSubstrate/DynamicLibraries/
,請?zhí)鎿Q@之后的“iOS設(shè)備的IP地址”為你的iOS設(shè)備的真實(shí)地址,回車執(zhí)行命令后會讓你輸入iOS設(shè)備的root的密碼,默認(rèn)是alpine,上傳成功后會顯示%100字樣。



提示:如果此時(shí)在mac上的Reveal左上方?jīng)]有出現(xiàn)你想要調(diào)試的程序,這里給出幾個檢查的建議:
1.手機(jī)連接的wifi是否與mac處于同一局域網(wǎng)(如果你在執(zhí)行步驟7時(shí)是在正確執(zhí)行步驟5和6之后,那就忽略這個檢查,這里是針對手機(jī)重啟了或者是切換了手機(jī)網(wǎng)絡(luò)等情況)。
2.查看你編寫的libReveal.plist文件中寫的BundleID是否與你在iOS設(shè)備上打開的應(yīng)用是否匹配。甚至,請檢查你的pist文件結(jié)構(gòu)是否正確!
3.iOS設(shè)備上想要觀察的App應(yīng)用必須處于前臺,進(jìn)入后臺即使打開了,在Reveal的左上角“選擇連接的應(yīng)用”框中也不會顯示。
- 作者其他文章推薦,持續(xù)更新學(xué)習(xí)心得筆記
成為iOS頂尖高手,你必須來這里(這里有最好的開源項(xiàng)目和文章)
JSPatch (實(shí)時(shí)修復(fù)App Store bug)學(xué)習(xí)(一)
iOS 高級工程師是怎么進(jìn)階的(補(bǔ)充版20+點(diǎn))
擴(kuò)大按鈕(UIButton)點(diǎn)擊范圍(隨意方向擴(kuò)展哦)
最簡單的免證書真機(jī)調(diào)試(原創(chuàng))