蘋果的動態庫都放在了緩存里,叫動態庫共享緩存,從iOS 3.1開始,為了提高性能,絕大部分的系統動態庫文件都打包存放到了一個緩存文件中(dyld shared cache)
緩存文件路徑:
/System/Library/Caches/com.apple.dyld/dyld_shared_cache_armX
dyld_shared_cache_armX
的X代表ARM處理器指令集架構
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
所有指令集原則上都是向下兼容的
動態庫共享緩存一個非常明顯的好處是節省內存
現在的ida、Hopper反編譯工具都可以識別動態庫共享緩存
在Mac\iOS中,是使用了/usr/lib/dyld程序來加載動態庫
dyld的兩種說法:
dynamic link editor,動態鏈接編輯器
dynamicloader,動態加載器
ndyld源碼
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
動態庫共享緩存文件的路徑 用于存放抽取結果的文件夾
下面就是提取的動態緩存庫里的Mach-O文件,可以把它拖進 Hopper 里進行分析了
最終拿到了FrameWorks