從頭到尾教你如何class-dump蘋(píng)果的私有api

作為一名愛(ài)折騰的開(kāi)發(fā)者,越不讓我用什么我就越想用,所以就有了這篇教程。

  • 首先你需要一臺(tái)越獄的iOS設(shè)備,如果你確實(shí)沒(méi)有的話,你可以在此GitHub https://github.com/nst/iOS-Runtime-Headers 下載老外已經(jīng)class-dump好的所有庫(kù)

這里有人就會(huì)問(wèn)了,別人都已經(jīng)class-dump并且整理好了所有庫(kù),你干嘛還要從頭到尾做一遍?沒(méi)為什么,我就是愛(ài)折騰,伸手黨看到這里就夠了。

  • 1、 在mac上安裝好iFunBox,如圖:
iFunBox
  • 2、 從iOS 3.1開(kāi)始,包括frameworks在內(nèi)的許多庫(kù)文件被存進(jìn)了一個(gè)大cache里,這個(gè)cache文件位于“/System/Library/Caches/com.apple.dyld/dyld_shared_cache_armx”(名為dyld_shared_cache_armv7、dyld_shared_cache_armv7s或dyld_shared_cache_arm64),可以使用dyld_decache將其中的二進(jìn)制文件提取出來(lái)。使用dyld_decache之前,要將“/System/Library/Caches/com.apple.dyld/dyld_shared_cache_armx”用iFunBox從iOS拷貝到OSX中。然后從https://github.com/downloads/kennytm/Miscellaneous/dyld_decache[v0.1c].bz2 下載dyld_decache。解壓之后賦予其可執(zhí)行權(quán)限,如下:

lizhiyongdeiMac:~ lizhiyong$ chmod +x /Users/lizhiyong/Desktop/LeoCracker/dyld_decache\[v0.1c\]

然后開(kāi)始提取二進(jìn)制文件,如下:

lizhiyongdeiMac:~ lizhiyong$ /Users/lizhiyong/Desktop/LeoCracker/dyld_decache\[v0.1c\] -o /where/to/store/decached/binaries/ /Users/lizhiyong/Desktop/LeoCracker/dyld_shared_cache_armv7

這樣子我們提取出的所有二進(jìn)制文件都存放在了“/where/to/store/decached/binaries/”下,接下來(lái)就如何找到自己感興趣的庫(kù)并class-dump出他的頭文件

  • 3、 舉個(gè)栗子
    栗子

    以前我工作的時(shí)候經(jīng)常要用到某些功能的私有API,而我只知道他的類(lèi)名:LSApplicationWorkspace,這個(gè)時(shí)候怎么從我們剛剛提取的所有的庫(kù)
    提取的庫(kù)

    找到我們真正想用到的庫(kù)呢?這個(gè)時(shí)候我們可以用到檢索目標(biāo)行命令:grep,具體代碼如下:
    grep -r LSApplicationWorkspace /Users/lizhiyong/Desktop/LeoCracker/ios_system_framework/System/Library/Frameworks
    終端輸出如圖:
終端輸出

看到輸出結(jié)果,也就是匹配到十個(gè)左右的庫(kù),這個(gè)時(shí)候發(fā)揮程序員敏銳的嗅覺(jué),發(fā)現(xiàn)了一個(gè)庫(kù):MobileCoreServices.framework,我們不妨嘗試class-dump這個(gè)庫(kù)看一下是否有LSApplicationWorkspace類(lèi)的頭文件。

  • 4、現(xiàn)在我們正式學(xué)習(xí)如何class-dump出二進(jìn)制文件的頭文件。
    首先去 http://stevenygard.com/projects/class-dump 下載最新版的class-dump,下載完后,將dmg文件里的class-dump復(fù)制到“/usr/bin”下,然后在Terminal中執(zhí)行“sudo chmod 777 /usr/bin/class-dump”命令賦予其執(zhí)行權(quán)限。運(yùn)行class-dump,即可看到它的一些基本參數(shù),如圖:

class-dump

準(zhǔn)備工作做完之后,我們就開(kāi)始用class-dump導(dǎo)出剛剛發(fā)現(xiàn)的MobileCoreServices.framework里面的頭文件了,具體代碼如下:
lizhiyongdeiMac:~ lizhiyong$ class-dump -S -s -H /Users/lizhiyong/Desktop/LeoCracker/ios_system_framework/System/Library/Frameworks/MobileCoreServices.framework/MobileCoreServices -o /Users/lizhiyong/Desktop/LeoCracker/ios_system_framework/System/Library/Frameworks/MobileCoreServices.framework/headfile
格式:class-dump
-S -s -H path/to/binaryFile -o /path/to/headers,path/to/binaryFile是庫(kù)的二進(jìn)制文件的路徑,/path/to/headers是你導(dǎo)出的頭文件要存儲(chǔ)的路徑。
導(dǎo)完之后我們查看導(dǎo)出的頭文件:

庫(kù)的頭文件

顯然我們要找的LSApplicationWorkspace類(lèi)的頭文件就在這里頭,打開(kāi)LSApplicationWorkspace.h,我們發(fā)現(xiàn)我們想要的功能的API都在里頭:


LSApplicationWorkspace.jpeg

像這些方法名:

/+ (id)defaultWorkspace;
/- (id)allApplications;
/- (id)allInstalledApplications;
/- (BOOL)uninstallApplication:(id)arg1 withOptions:(id)arg2;

看到這些我們應(yīng)該都懂了,那么我們?cè)趺丛陧?xiàng)目中使用這些蘋(píng)果禁止的私有API呢,OC的runtime機(jī)制會(huì)告訴你答案,至于怎么像正常APP一樣上架AppStore呢,就需要發(fā)揮你程序員聰明機(jī)智的時(shí)候了。

(PS:這是我第一次寫(xiě)簡(jiǎn)書(shū),以前一直用OneNote記筆記,就覺(jué)得寫(xiě)簡(jiǎn)書(shū)寫(xiě)博客效率慢而且很浪費(fèi)時(shí)間,事實(shí)證明,確實(shí)很浪費(fèi)時(shí)間 -。- , 所以我打心底里感激那些寫(xiě)博客寫(xiě)書(shū)的作者們?。?/p>

參考:《iOS應(yīng)用逆向工程》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 逆向工具集的安裝和使用 iOS 逆向工程的工具分類(lèi) 檢查工具如:Reveal(界面分析工具)、tcpdump(抓包...
    Yochi閱讀 6,103評(píng)論 1 5
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,525評(píng)論 19 139
  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 2,032評(píng)論 0 9
  • 第一,學(xué)生傳統(tǒng)的筆記中僅僅包含了單一的顏色、文字、符號(hào)等,只是使用了左腦的功能。而在利用思維導(dǎo)圖做筆記時(shí),則不但使...
    李李lili閱讀 2,075評(píng)論 0 0
  • 布客滿七歲,坦率地說(shuō),早在去年滿六歲那一天,我便心有悸悸,即將迎來(lái)七年之癢,不知前途命運(yùn)會(huì)是如何。 轉(zhuǎn)眼又過(guò)一年,...
    共童成長(zhǎng)de文婷閱讀 729評(píng)論 0 0

友情鏈接更多精彩內(nèi)容