【iOS逆向工程】dyld_shared_cache_X動態(tài)庫共享緩存

  • 蘋果的動態(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 Touch2

  • v7
    iPhone3GS、iPhone4、iPhone4S
    iPad、iPad2、iPad3(The New iPad)
    iPad mini
    iPod Touch3G、iPod Touch4、iPod Touch5

  • v7s
    iPhone5、iPhone5C
    iPad4

  • arm64
    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文件,可以把它拖進 Hopper 里進行分析了

    最終拿到了FrameWorks

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容