【iOS逆向工程】dyld_shared_cache_X動態庫共享緩存

  • 蘋果的動態庫都放在了緩存里,叫動態庫共享緩存,從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 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

所有指令集原則上都是向下兼容的

動態庫共享緩存一個非常明顯的好處是節省內存

現在的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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容