1. 程式人生 > >iOS逆向開發- class-dump使用中出現的一些問題

iOS逆向開發- class-dump使用中出現的一些問題

​最近正在嘗試逆向App的學習和研究,其中不乏出現一些問題,在此主要是分享一些學習中遇到的問題和解決方法以及部分原理

1.class-dump無法拖入/usr/bin目錄(這個問題是大多數人都邁不過去的坎)
​原因:Mac當前系統為Mac OS X 10.11 El Capitan,對於Mac OS X 10.11 El Capitan使用者,由於系統啟用了SIP(System Integrity Protection), 導致root使用者也沒有許可權修改/usr/bin目錄。
解決辦法:
方法一:
重啟Mac,按住command R,進入recovery模式。選擇開啟Utilities下的終端,輸入:csrutil disable並回車,然後正常重啟Mac即可。

方法二:
    1.開啟Terminal,輸入mkdir ~/bin,在當前使用者根目錄下建立一個bin目錄;

    2.把class-dump.dmg解壓縮出來的class-dump拷貝到這個目錄裡,並賦予其可執行許可權; 拷貝class-dump可使用拖拽的方式也可以使用命令的方式,拖拽的方式就不再贅述
    命令移動的方式: mv /.../class-dump ~/bin    (/.../class-dump是指的class-dump的完整路徑) 
    賦予執行許可權:chmod +x ~/bin/class-dump

    3.使用命令vi ~/.bash_profile 開啟~/.bash_profile檔案,配置環境變數; 按 i 鍵進入編輯模式,寫入程式碼: export PATH=$HOME/bin/:$PATH   ;按ESC然後輸入冒號(:),然後輸入wq,退出即可。

    4.在Terminal中執行source命令 source ~/.bash_profile

    5.在terminal中執行class-dump實驗一下,應該就可以了。

2.​class-dump -S -s -H xxxx -o xxxx 時報錯 Error: Cannot find offset for address 0x780000000100a489 in stringAtAddress:
如下圖所示:
class-dump 報錯
​經檢驗和檢視該專案是用OC和Swift混編。class-dump是利用Object-C語言的runtime特性,提取標頭檔案,而Swift則不支援該規則。(其他情況會不會出現此錯誤,我也說不好,如有,請回復告知我哦!大家共同學習進步)。 可使用IDA檢視包內容進行分析

經過反覆試驗證實,在app沒有經過砸殼之前,直接使用class-dump進行標頭檔案提取,如果專案中使用了swift這回出現 Error: Cannot find offset for address 0x780000000100a489 in stringAtAddress: 的錯誤, 但是經過砸殼之後, 再使用class-dump提取標頭檔案,這回提取出相應的標頭檔案, 只是標頭檔案的格式和樣式與OC匯出的標頭檔案會有一定的差異, 可根據實際情況自行處理匯出標頭檔案。