【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 里进行分析了

    【iOS逆向工程】dyld_shared_cache_X动态库共享缓存_第1张图片
    最终拿到了FrameWorks

你可能感兴趣的:(【iOS逆向工程】dyld_shared_cache_X动态库共享缓存)