iOS模拟器镜像
iOS模拟器信息
版本信息:
Xcode:16.3
iOS Simulator:18.4
一些路径信息
下载目录:模拟器位于“/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs”目录下
其他可访问目录
- 模拟器用户目录:位于“/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/
- 模拟器共享目录:位于“/Users/用户名/Library/Developer/CoreSimulator/Shared/System/Library/CoreServices/SharedFileList”下。这个目录是模拟器中所有应用程序共享的,可以用来存储一些公共文件或配置信息。我们可以在这个目录下创建文件,并在应用程序中通过指定相对路径来访问它们。
模拟器镜像包内容
/Library/Developer/CoreSimulator/Cryptex/Images/bundle/
里面有个dmg文件,用磁盘工具看一下?
发现还有个iOS Simulator


bundle最里面有个im4m文件,用于验证签名?
.simruntime/Contents
是个包,点进去再看看:
看了看《MacOS软件安全与逆向分析》4.3.1 Bundle目录结构(P107-108),和APP store的结构还挺像的
/_CodeSignature
/CodeResources
是个plist文件,存放软件包中所有文件的签名信息
/info.plist
记录软件信息

/MacOS
这个目录存放可执行文件?
/iOS 18.4
参考:Mach-O Header(好像就是那本书作者的帖子)
是个Fat Binary

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
这个是压缩类型的Mach-O文件?


Mach-O文件格式是macOS和iOS系统中用于可执行文件、目标文件和动态库的一种文件格式。它通过不同的方式存储和组织加载命令,这些命令描述了如何加载和运行该文件。其中,compressed 类型和 classic 类型的主要区别在于加载命令的写法和存储信息的方式:
-
Compressed类型:
-
Compressed类型是经过优化的加载命令格式,它采用 LC_DYLD_INFO_ONLY 或 LC_DYLD_INFO 来存储动态链接信息。
-
优化包括对重定位信息、符号绑定信息的压缩和整合,减少冗余数据。
-
这通常导致更小的文件大小和更快的加载时间,因为操作系统可以更迅速地解析这些信息。
-
Compressed类型对现代应用更有效,尤其是在运行时需要高效处理描述信息时。
-
-
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
模拟器中的应用程序

/private
/var

/private/var/mobile为空文件夹?还是权限不够?
/usr
/lib
/libSystem.B.dylib
-
MacOS 和 iOS 底层核心库: /usr/lib/libSystem.B.dylib。
-
这是Apple最基本的库,它提供了数千个基础 C 函数,这些函数组成了真正的“Core OS”服务——也就是由C运行时的最低级别提供的服务,或者内核函数的包装器。

-
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
包含可执行文件和运行时库,用于支持各种模拟的系统功能。
浙公网安备 33010602011771号