一屎慢、APP從開發(fā)到安裝到手機(jī)的過程
二、逆向APP的思路
界面分析
Cycript、Reveal代碼分析
對(duì)Mach-O文件的靜態(tài)分析
MachOView棕诵、class-dump、Hopper Disassembler凿将、ida等動(dòng)態(tài)調(diào)試
對(duì)運(yùn)行中的APP進(jìn)行代碼調(diào)試
debugserver校套、LLDB代碼編寫
注入代碼到APP中
必要時(shí)還可能需要重新簽名、打包ipa
三牧抵、class-dump
顧名思義笛匙,它的作用就是把Mach-O文件的class信息給dump出來(把類信息給導(dǎo)出來),生成對(duì)應(yīng)的.h頭文件
下載完工具包后將class-dump文件復(fù)制到Mac的/usr/local/bin目錄膳算,這樣在終端就能識(shí)別class-dump命令了
常用格式
class-dump -H Mach-O文件路徑 -o 頭文件存放目錄
-H表示要生成頭文件
-o用于制定頭文件的存放目錄
四、代碼的編譯過程
不同的OC代碼弛作,編譯出來的匯編代碼可能是一樣的
五、Hopper Disassmbler
Hopper Disassmbler能夠?qū)ach-O文件的機(jī)器語言代碼反編譯成匯編代碼映琳、OC偽代碼或者Swift偽代碼
常用快捷鍵
Shift + Option + X
找出哪里引用了這個(gè)方法
六、動(dòng)態(tài)庫(kù)共享緩存(dyld shared cache)
從iOS3.1開始萨西,為了提高性能,絕大部分的系統(tǒng)動(dòng)態(tài)庫(kù)文件都打包存放到了一個(gè)緩存文件中(dyld shared cache)
緩存文件路徑:/System/Library/Caches/com.apple.dyld/dyld_shared_cache_armX
dyld_shared_cache_armX的X代表ARM處理器指令集架構(gòu)
v6
iPhone谎脯、iPhone3G
iPod Touch、iPod Touch2v7
iPhone3GS源梭、iPhone4娱俺、iPhone4S
iPad、iPad2废麻、iPad3(The New iPad)
iPad mini
iPod Touch3G、iPod Touch4烛愧、iPod Touch5v7s
iPhone5油宜、iPhone5C
iPad4arm64
iPhone5S掂碱、iPhone6、iPhone6 Plus慎冤、iPhone6S疼燥、iPhone6S Plus
iPhoneSE、iPhone7蚁堤、iPhone7 Plus醉者、iPhone8、iPhone8 Plus违寿、iPhoneX
iPad5湃交、iPad Air、iPad Air2藤巢、iPad Pro搞莺、iPad Pro2
iPad mini with Retina display、iPad mini3掂咒、iPad mini4
iPod Touch6
所有指令集原則上都是向下兼容的
動(dòng)態(tài)庫(kù)共享緩存一個(gè)非常明顯的好處是節(jié)省內(nèi)存
現(xiàn)在的ida才沧、Hopper反編譯工具都可以識(shí)別動(dòng)態(tài)庫(kù)共享緩存
七、動(dòng)態(tài)庫(kù)的加載
在Mac\iOS中绍刮,是使用了/usr/lib/dyld程序來加載動(dòng)態(tài)庫(kù)
- dyld
dynamic link editor温圆,動(dòng)態(tài)鏈接編輯器
dynamic loader,動(dòng)態(tài)加載器
dyld源碼
https://opensource.apple.com/tarballs/dyld/
可以使用dyld源碼中的launch-cache/dsc_extractor.cpp
將#if 0前面的代碼刪除(包括#if 0)孩革,把最后面的#endif也刪掉
編譯dsc_extractor.cpp
clang++ -o dsc_extractor dsc_extractor.cpp
使用dsc_extractor
./dsc_extractor 動(dòng)態(tài)庫(kù)共享緩存文件的路徑 用于存放抽取結(jié)果的文件夾