在 Ghidra 中查看 MacOS 系统库

主要观点:作者打开《OS Internals Volume 1》想跟随书中系统库示例,在 Ghidra 中却未找到libSystem.B.dyld,经搜索发现 Apple 论坛解释,MacOS 11 后系统库已移至动态链接器共享缓存,不再在/usr/lib,Big Sur 补丁说明也确认了这一点。Apple 将二进制文件打包进“缓存”文件,在启动时加载到内存,通过动态加载器拦截dlopen等操作以提供缓存版本。
关键信息

  • 作者使用otool -L /bin/ls命令找到系统库路径。
  • Apple 论坛解释系统库的变化及原因。
  • Ghidra 可通过特定菜单导入缓存文件,选择要导入的库并以“Mac OS X Mach-O”格式导入可自动导入依赖库。
  • 若使用 Hopper 可处理相关事宜,未测试;推荐使用dyld-shared-cache-extractor项目将缓存文件提取到文件系统的文件夹中。
    重要细节
  • 缓存文件位置在 macOS 14.7 中为/System/Cryptexes/OS/System/Library/dyld/dyld_shared_cache_arm64e/System/Library/dyld/dyld_shared_cache_arm64e
  • 导入时选择“Load Libraries From Disk”可自动导入依赖库。
  • 关于此变化的性能相关原因可参考lobste.rs 上 lgerbarg 的评论
阅读 9
0 条评论