iOS模拟器镜像

iOS模拟器信息

版本信息:
Xcode:16.3
iOS Simulator:18.4

一些路径信息

下载目录:模拟器位于“/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs”目录下

其他可访问目录

  1. 模拟器用户目录:位于“/Users/用户名/Library/Developer/CoreSimulator/Devices/设备ID/data/Containers/Data/Application/应用ID”下。这个目录下包含了应用程序的数据和文件。我们可以通过调用应用程序的API来获取这个目录的路径,并在其中读写文件。
CoreSimulator/
├── Caches/
├── Devices/
│   ├── [设备UUID]/
│   │   ├── data/
│   │   │   ├── Containers/
│   │   │   │   ├── Bundle/
│   │   │   │   │   └── Application/
│   │   │   │   └── Data/
│   │   │   │       └── Application/
│   │   │   ├── Library/
│   │   │   ├── Documents/
│   │   │   └── tmp/
│   │   └── device.plist
│   └── device_set.plist
└── Temp/
  1. 模拟器共享目录:位于“/Users/用户名/Library/Developer/CoreSimulator/Shared/System/Library/CoreServices/SharedFileList”下。这个目录是模拟器中所有应用程序共享的,可以用来存储一些公共文件或配置信息。我们可以在这个目录下创建文件,并在应用程序中通过指定相对路径来访问它们。

其他相关路径,但是2015年

模拟器镜像包内容

/Library/Developer/CoreSimulator/Cryptex/Images/bundle/

里面有个dmg文件,用磁盘工具看一下?

发现还有个iOS Simulator
image

image

bundle最里面有个im4m文件,用于验证签名?

.simruntime/Contents

是个包,点进去再看看:

看了看《MacOS软件安全与逆向分析》4.3.1 Bundle目录结构(P107-108),和APP store的结构还挺像的

/_CodeSignature

/CodeResources

是个plist文件,存放软件包中所有文件的签名信息

/info.plist

记录软件信息

image

/MacOS

这个目录存放可执行文件?

/iOS 18.4

参考:Mach-O Header(好像就是那本书作者的帖子)

是个Fat Binary
image

Load Commands加载命令

otool命令行工具可查看Load Commands信息
otool -l <path>

section里没啥东西,奇怪

点击查看代码
% otool -l '/Library/Developer/CoreSimulator/Volumes/iOS_22E238/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 18.4.simruntime/Contents/MacOS/iOS 18.4'
/Library/Developer/CoreSimulator/Volumes/iOS_22E238/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 18.4.simruntime/Contents/MacOS/iOS 18.4:
Load command 0
      cmd LC_SEGMENT_64
  cmdsize 232
  segname __TEXT
   vmaddr 0x0000000000000000
   vmsize 0x0000000000001000
  fileoff 0
 filesize 4096
  maxprot 0x00000005
 initprot 0x00000005
   nsects 2
    flags 0x0
Section
  sectname __text
   segname __TEXT
      addr 0x0000000000000320
      size 0x0000000000000000
    offset 800
     align 2^0 (1)
    reloff 0
    nreloc 0
     flags 0x80000400
 reserved1 0
 reserved2 0
Section
  sectname __const
   segname __TEXT
      addr 0x0000000000000320
      size 0x0000000000000048
    offset 800
     align 2^4 (16)
    reloff 0
    nreloc 0
     flags 0x00000000
 reserved1 0
 reserved2 0
Load command 1
      cmd LC_SEGMENT_64
  cmdsize 72
  segname __LINKEDIT
   vmaddr 0x0000000000001000
   vmsize 0x0000000000008000
  fileoff 4096
 filesize 18896
  maxprot 0x00000001
 initprot 0x00000001
   nsects 0
    flags 0x0
Load command 2
            cmd LC_DYLD_INFO_ONLY
        cmdsize 48
     rebase_off 0
    rebase_size 0
       bind_off 0
      bind_size 0
  weak_bind_off 0
 weak_bind_size 0
  lazy_bind_off 0
 lazy_bind_size 0
     export_off 4096
    export_size 56
Load command 3
     cmd LC_SYMTAB
 cmdsize 24
  symoff 4160
   nsyms 3
  stroff 4208
 strsize 72
Load command 4
            cmd LC_DYSYMTAB
        cmdsize 80
      ilocalsym 0
      nlocalsym 0
     iextdefsym 0
     nextdefsym 2
      iundefsym 2
      nundefsym 1
         tocoff 0
           ntoc 0
      modtaboff 0
        nmodtab 0
   extrefsymoff 0
    nextrefsyms 0
 indirectsymoff 0
  nindirectsyms 0
      extreloff 0
        nextrel 0
      locreloff 0
        nlocrel 0
Load command 5
     cmd LC_UUID
 cmdsize 24
    uuid 2AE50C2B-30BB-34AB-B9FF-2FC7E6F25576
Load command 6
      cmd LC_VERSION_MIN_MACOSX
  cmdsize 16
  version 10.10
      sdk 14.0
Load command 7
      cmd LC_SOURCE_VERSION
  cmdsize 16
  version 362.0
Load command 8
          cmd LC_LOAD_DYLIB
      cmdsize 56
         name /usr/lib/libSystem.B.dylib (offset 24)
   time stamp 2 Thu Jan  1 08:00:02 1970
      current version 1336.0.0
compatibility version 1.0.0
Load command 9
          cmd LC_RPATH
      cmdsize 56
         path @loader_path/../../../../../Frameworks (offset 12)
Load command 10
          cmd LC_RPATH
      cmdsize 64
         path @loader_path/../../../../../../PrivateFrameworks (offset 12)
Load command 11
      cmd LC_FUNCTION_STARTS
  cmdsize 16
  dataoff 4152
 datasize 8
Load command 12
      cmd LC_DATA_IN_CODE
  cmdsize 16
  dataoff 4160
 datasize 0
Load command 13
      cmd LC_CODE_SIGNATURE
  cmdsize 16
  dataoff 4288
 datasize 18704

参考1参考2

这个是压缩类型的Mach-O文件?

image

image

Mach-O文件格式是macOS和iOS系统中用于可执行文件、目标文件和动态库的一种文件格式。它通过不同的方式存储和组织加载命令,这些命令描述了如何加载和运行该文件。其中,compressed 类型和 classic 类型的主要区别在于加载命令的写法和存储信息的方式:

  1. Compressed类型:

    • Compressed类型是经过优化的加载命令格式,它采用 LC_DYLD_INFO_ONLY 或 LC_DYLD_INFO 来存储动态链接信息。

    • 优化包括对重定位信息、符号绑定信息的压缩和整合,减少冗余数据。

    • 这通常导致更小的文件大小和更快的加载时间,因为操作系统可以更迅速地解析这些信息。

    • Compressed类型对现代应用更有效,尤其是在运行时需要高效处理描述信息时。

  2. Classic类型:

    • Classic类型使用较为显式的多个加载命令来表示动态链接信息,例如 LC_SYMTAB, LC_DYSYMTAB 等。

    • 这种空间换时间的模式可能占用更多内存,但解析比较直观,提供更详细的信息。

    • Classic类型主要出现在较老或更简化需求的应用中,符合传统应用的兼容性。

总体来说,Compressed类型通过信息优化达到了更好的性能表现,适合于现代复杂应用的需求,而Classic类型仍旧保持传统详细信息描述,这在调试和传统应用场景中依旧有其有效性。选择其中一种类型通常带有特定用途和性能考量。

sudo find / -name "libSystem.B.dylib" 2>/dev/null #搜索并丢弃权限等错误信息

找到libSystem.B.dylib了

/Library/Developer/CoreSimulator/Volumes/iOS_22E238/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 18.4.simruntime/Contents/Resources/RuntimeRoot/usr/lib/libSystem.B.dylib

那么看起来iOS 18.4这个文件中的路径根目录其实是“RuntimeRoot”?

/Resources

/RuntimeRoot

提供文件系统的根路径,模拟iOS系统结构?

/Applications

模拟器中的应用程序
image

/private

/var

image

/private/var/mobile为空文件夹?还是权限不够?

/usr

/lib

/libSystem.B.dylib

  • MacOS 和 iOS 底层核心库: /usr/lib/libSystem.B.dylib。

  • 这是Apple最基本的库,它提供了数千个基础 C 函数,这些函数组成了真正的“Core OS”服务——也就是由C运行时的最低级别提供的服务,或者内核函数的包装器。

image

  • dylib和许多标准的UNIX库都被实现为libSystem的符号链接。

  • libSystem.B.dylib支持多种架构如 x86_64-macos, x86_64-maccatalyst, arm64-macos, arm64-maccatalyst, arm64e-macos, arm64e-maccatalyst。

  • libSystem不提供任何符号和代码。它链接了/usr/lib/system中的许多其他dylibs,并将它们的符号作为自己的符号重新导出

点击查看代码
libcache.dylib: 内存缓存支持
libcommonCrypto.dylib: 比CoreCrypto.dylib更高级的底层库
libcorecrypto.dylib: 通用密码库(在Apple中用来代替OpenSSL)
libcompiler_rt.dylib: 原子和浮点操作支持
libcopyfile.dylib: 拷贝文件的支持
libdispatch.dylib: GCD 支持
libdyld.dylib: DYLD运行时api
libkeymgr.dylib: MacOS中键/值支持
liblaunch.dylib: 遗留的vproc,引导和启动api(重定向到libxp.dylib)
libmacho.dylib: Mach-O处理api
libquarantine.dylib: MacOS隔离支持
libremovefile.dylib: Remove file支持
libsystem_asl.dylib: Apple系统日志支持(在Darwin 16中已弃用)
libsystem_blocks.dylib: C block 支持
libsystem_c.dylib: C runtime 库
libsystem_configuration.dylib: DNS、网络配置和配置接口libsystem_containermanager.dyllb: 容器管理器用户模式api libsystem_coreservices.dylib: 系统目录搜索路径和dir helper接口
libsystem_coretls.dylib: SSL/TLS的支持
libsystem_darwin.dylib: 支持os_variant查询。
libsystem_dnssd.dylib: DNS服务发现(mDNS/Bonjour)
libsystem_info.dylib: NIS和DNS服务支持
libsystem_kernel.dylib: System call 和Mach trap包装器
libsystem_m.dylib: 数学函数
libsystem_malloc.dylib: malloc, zone和调试支持
libsystem_network.dylib: 路由和其他网络支持
libsystem_notify.dylib: notify API支持
libsystem_platform.dylib: OSAtomic和优化的platform_variant
libsystem_pthread.dylib: POSIX线程支持
libsystem_sandbox.dylib: 沙盒支持
libsystem_secinit.dylib: MacOS: securityd集成
libsystem_trace.dylib: os_log
libunwind.dylib: 栈展开/回溯的支持
libxpc.dylib: XPC支持
  • 除了libSystem的各种子库之外,还有许多其他的特定于Darwin的库,如下所示。这些都是闭源的
点击查看代码
libafc.dylib: iOS支持Apple File Conduit (afcd) 
libdscsym.dylib: 共享缓存符号函数和段迭代器 
libcoreroutine.dylib: 支持/usr/libexec/routated(跟踪用户行为模式) 
libenergytrace.dylib: 能量跟踪Kdebug代码的包装器 
libktrace.dylib: Kdebug接口包装器(第15章) 
libmis.dylib: /usr/libexec/amfid 
libMobileGestalt: MobileGestalt系统信息接口 
libnetwork: 基于套接字、mDNS和SSL的高级nw_*和tcp_* api 
libnetworkextension.dylib: 用于网络扩展(VPN等)的api 
libpmsample.dylib: 源管理采样 
libpmenergy.dylib: 能量影响计算 libsandbox.1.dylib: 沙盒。kext接口 
libsysdiagnose.dylib: 系统诊断(调试快照)支持 
libsysmon.dylib: /usr/libexec/sysmond接口 
libsystemstats.dylib: usr/sbin/systemstats接口 
libtailspin.dylib: 调试快照支持 
libXSEvent.dylib: MacOS:用于emond的 client 库
/bin
/libexec

包含可执行文件和运行时库,用于支持各种模拟的系统功能。

posted @ 2025-08-04 16:09  IrisHyaline  阅读(158)  评论(0)    收藏  举报