ios端的app在上線前會由app store添加一個二進位檔案,類似於android的混淆處理,用於防止反編譯,但是往往有時候出於一些不可描述的動機,我們會想像一些大牛們學習一些經驗,孔乙己說過:讀書人竊書不算偷,帶著一顆批判的心,我學習了一下反編譯的技術,在此做一個簡單的記錄(手動滑稽)。
總的來說,反編譯技術可以概括為以下幾步: 脫殼 擷取源碼.h檔案 擷取關心的虛擬碼 脫殼
脫殼即脫去app的二進位加密外殼,從而得到這個app的ipa包的過程。有一些第三方的工具,這裡介紹一款叫clutch的東西,使用簡單易上手。
(友情提示:如果你的手機沒有越獄,看到這裡就可以結束了,因為接下來的步驟需要一台已越獄的手機)
首先去GitHub下載clutch:https://github.com/KJCracks/Clutch/releases
直接下載最新版即可。下載後把你下載的檔案命名為 clutch ,然後使用iTools、ifunbox之類的工具把你的clutch檔案放進越獄手機的Device->usr->bin目錄下。
注意:
1. 不是user,是usr。。。別問我為什麼在這提醒你。。我也蛋疼過。。。
2. 可以不把你的clutch xx.x.x命名成clutch,但是一定要記住你的clutch檔案叫什麼,因為下面的操作需要輸入與之對應的檔案名稱
到此手機端的準備已經完成。(驚不驚喜。意不意外。開不開心。)
接下來確認一點:你的手機連上了WiFi並且與你的mac連著同一個wifi。OK繼續,開啟手機的設定–>無線區域網路 找到你連結的wifi,點擊最右邊的i 查看你的IP地址。
接著開啟你mac的終端,輸入指令:ssh root@xx.xx.xx.xx,(xx.xx.xx.xx)為你的手機的IP地址。接下來會需要你輸入密碼,注意這時候的密碼不是你的mac密碼,也不是你的iPhone密碼,是一個預設的密碼:alpine (誰被坑過誰知道……)
然後就是cd到你的bin目錄下:root# cd /usr/bin 至此你可以使用clutch的相關命令了。輸入clutch -i 來查看你所有可以脫殼的app吧。
不出意外系統將為你羅列出所有可以脫殼的app,想脫誰就翻誰的牌子吧~
舉個栗子,你想翻2號app的牌子,輸入clutch -b 2斷行符號即可~是不是美滋滋~
效果如下:
擷取.h檔案
上一步完成後,會看到紫色部分有一段finish... to ...的字樣,它告訴我們我們去殼後的檔案唄放在哪了,有了這個路徑,就很簡單了,我們之前用什麼黑科技把clutch放進我們手機的(iTools/ifunbox/…),現在也就用什麼黑科技把這個目錄下的去殼檔案拿出來就好~
通過破殼步驟,可以擷取到ipa包,實際上ipa包是一種壓縮包格式,可以直接使用解壓工具解壓。解壓後可以獲得app的二進位可執行檔,以及.app 包(如果解壓不了可以嘗試把尾碼名改成.zip)。在mac上對app包進行“查看包內容”,可以看到包內的可執行檔,未經處理的資源檔(如聲音,圖片等),bundle資源檔,以及經過編譯的nib 布局檔案等。
拿到ipa包的可執行檔之後,在mac上可以通過工具來進行反組譯碼。常
見的反組譯碼工具有class-dump,Hopper Disassembler等。
安裝的教程以class-dump為例,看這個即可,這裡就不再多介紹安裝啦。
安裝完成class-dump後,即可使用以下命令進行反編譯:
class-dump -H /Applications/你的app名.app -o /Users/aa/bb/cc
其中aa/bb/cc這一串是你要輸出的檔案夾路徑,這樣斷行符號運行完就可以到這個路徑下去找反編譯出來的.h檔案了
ps.可能會存在class-dump沒有運行許可權的問題,這種情況可以選擇dmg檔案下載後,將dmg檔案中的class-dump複製到/usr/bin目錄,並在Terminal中執行”sudo
chmod xxx/usr/bin/class-dump” 命令賦予其執行許可權。其中xxx是你mac的使用者名稱.
以上,我們就可以拿到反編譯的標頭檔內容了,感謝閱讀~