蘋果的動態(tài)庫都放在了緩存里卵凑,叫動態(tài)庫共享緩存庆聘,從iOS 3.1開始,為了提高性能勺卢,絕大部分的系統(tǒng)動態(tài)庫文件都打包存放到了一個緩存文件中(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
所有指令集原則上都是向下兼容的
動態(tài)庫共享緩存一個非常明顯的好處是節(jié)省內(nèi)存
現(xiàn)在的ida运悲、Hopper反編譯工具都可以識別動態(tài)庫共享緩存
在Mac\iOS中龄减,是使用了/usr/lib/dyld程序來加載動態(tài)庫
dyld的兩種說法:
dynamic link editor,動態(tài)鏈接編輯器
dynamicloader班眯,動態(tài)加載器
ndyld源碼
https://opensource.apple.com/tarballs/dyld/
從動態(tài)庫共享緩存抽取動態(tài)庫
可以使用上面下載好的
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
動態(tài)庫共享緩存文件的路徑 用于存放抽取結(jié)果的文件夾
下面就是提取的動態(tài)緩存庫里的Mach-O文件,可以把它拖進(jìn) Hopper 里進(jìn)行分析了
最終拿到了FrameWorks