Parse dyld_shared_cache
dyld info
Similar to jtool -h -l dyld_shared_cache
❯ ipsw dyld info -l -s dyld_shared_cache | head -n35
Header
======
Magic = "dyld_v1 arm64e"
UUID = 92537455-A74B-3198-96CD-F2D2D2778315
Platform = iOS
Format = 10 (BuiltFromChainedFixups)
Max Slide = 0x33940000 (ASLR entropy: 16-bits)
Local Symbols (nlist array): 78MB, offset: 0x62144260 -> 0x66F98340
Local Symbols (string pool): 256MB, offset: 0x66F98340 -> 0x7701333B
Code Signature: 3MB, offset: 0x77014000 -> 0x773D0000
ImagesText Info (2072 entries): 64KB, offset: 0x00000300 -> 0x00010600
Slide Info (v3): 0KB, offset: 0x00000000 -> 0x00000000
Branch Pool: 0MB, offset: 0x00000000 -> 0x00000000
Accelerate Tab: 0KB, address: 0x00000000 -> 0x00000000
Patch Info: 512KB, address: 0x1E798654C -> 0x1E7A068BC
Closures: 6MB, address: 0x1E7AE0000 -> 0x1E8129748
Closures Trie: 53KB, address: 0x1E8129748 -> 0x1E8136D40
Shared Region: 4GB, address: 0x180000000 -> 0x280000000
Mappings
========
| SEG | INITPROT | MAXPROT | SIZE | ADDRESS | FILE OFFSET | SLIDE INFO OFFSET | FLAGS |
| ---------- | -------- | ------- | ------- | ---------------------- | -------------------- | -------------------- | ----- |
| __TEXT | r-x | r-x | 1222 MB | 180000000 -> 1CC6C0000 | 00000000 -> 4C6C0000 | 00000000 -> 00000000 | 0 |
| __DATA | rw- | rw- | 116 MB | 1CE6C0000 -> 1D5B18000 | 4C6C0000 -> 53B18000 | 58CA4000 -> 58CB4000 | 0 |
| __AUTH | rw- | rw- | 81 MB | 1D7B18000 -> 1DCCA4000 | 53B18000 -> 58CA4000 | 58CB8000 -> 58CC4000 | 1 |
| __LINKEDIT | r-- | r-- | 148 MB | 1DECA4000 -> 1E8138000 | 58CA4000 -> 62138000 | 00000000 -> 00000000 | 0 |
Code Signature
==============
Code Directory (3963356 bytes)
Version: ExecSeg
Flags: Adhoc
CodeLimit: 0x78f24000
Identifier: com.apple.dyld.cache.arm64e.release (@0x58)
TeamID:
CDHash: 7d32d18703679ac152a74ff872e38dda69339eabe29a0a6837861cec3d05de87 (computed)
# of hashes: 123849 code (16384 pages) + 2 special
Hashes @188 size: 32 Type: Sha256
Requirement Set (12 bytes) with 1 requirement
0: 0x0 (@0, 12 bytes): empty requirement set
Images
======
1: 0x180045000 /usr/lib/system/libsystem_trace.dylib (1264.0.0)
2: 0x18005C000 /usr/lib/system/libxpc.dylib (2001.0.0)
3: 0x180091000 /usr/lib/system/libsystem_blocks.dylib (76.0.0)
4: 0x180093000 /usr/lib/system/libsystem_c.dylib (1431.0.0)
We added the -s
or --sig
flag to also parse the CodeDirectory.
You can also dump the launch closures
❯ ipsw dyld info dyld_shared_cache --closures
Prog Closure Offsets
====================
0x1f1ec10f4 /usr/sbin/wifid
0x1f1ebfe54 /usr/sbin/syslogd
0x1f1ebda8c /usr/sbin/spindump
0x1f1ebad54 /usr/sbin/scutil
0x1f1eb8d30 /usr/sbin/pppd
0x1f1eb7de0 /usr/sbin/otctl
0x1f1eb7818 /usr/sbin/nvram
0x1f1eb6ab4 /usr/sbin/mediaserverd
0x1f1eb24b8 /usr/sbin/mDNSResponder
0x1f1eb612c /usr/sbin/mDNSResponderHelper
0x1f1eb197c /usr/sbin/ipconfig
0x1f1eb1240 /usr/sbin/hdik
0x1f1eb02d8 /usr/sbin/fairplayd.H2
0x1f1eaf770 /usr/sbin/ckksctl
<SNIP>
You can also dump the dlopen image/bundle(s)
❯ ipsw dyld info dyld_shared_cache --dlopen
dlopen(s) Image/Bundle IDs
==========================
5004: /usr/lib/xpc/support.bundle/support
5003: /usr/lib/libobjc-trampolines.dylib
5002: /usr/lib/libffi-trampolines.dylib
5001: /usr/lib/libCoreKE.dylib
5000: /System/Library/VoiceServices/PlugIns/Base.vsplugin/Base
4999: /System/Library/VideoProcessors/CCPortrait.bundle/CCPortrait
4998: /System/Library/UserNotifications/Bundles/com.apple.tailspin.notifications.bundle/com.apple.tailspin.notifications
4997: /System/Library/UserNotifications/Bundles/com.apple.studentd.notifications.bundle/com.apple.studentd.notifications
4996: /System/Library/UserNotifications/Bundles/com.apple.reminders.bundle/com.apple.reminders
4995: /System/Library/UserNotifications/Bundles/com.apple.iCloud.FollowUp.bundle/com.apple.iCloud.FollowUp
4994: /System/Library/UserNotifications/Bundles/com.apple.donotdisturb.bundle/com.apple.donotdisturb
<SNIP>
dyld image
To dump info from dylibsImageArray
, otherImageArray
or progClosures
❯ ipsw dyld image dyld_shared_cache_arm64 CoreFoundation -V
ID: 4
Name: /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation
Flags: objc|plus_loads|dylib|in_cache
UUID: 5BBDEA97-01D2-30D8-8123-43118E96A409
Cache Segments:
offset: 0x00354000, size: 0x003ad000, perms: r-x
offset: 0x53130af0, size: 0x0021c370, perms: rw-
offset: 0x5334ce60, size: 0x00008530, perms: rw-
offset: 0x529ea080, size: 0x00007d88, perms: rw-
offset: 0x65d94000, size: 0x00093000, perms: r--
offset: 0x661a4000, size: 0x001a8000, perms: r--
Dependents:
reExport) /usr/lib/libobjc.dylib
regular ) /usr/lib/libicucore.dylib
regular ) /usr/lib/librpcsvc.dylib
Init Order:
/usr/lib/system/libsystem_blocks.dylib
/usr/lib/system/libdispatch.dylib
/usr/lib/system/libxpc.dylib
/usr/lib/system/libsystem_trace.dylib
/usr/lib/librpcsvc.dylib
/usr/lib/libc++.dylib
/usr/lib/libobjc.dylib
/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation
Initializers:
0x9de90
DOF Offsets:
0x3a63a0
0x3a6d04
In macOS12+/iOS15+ caches replaced this data with prebuilt loader sets
which contain much of the same data and are still VERY powerful (this cmd outputs both types)
dyld extract
Extract dylib from dyld_shared_cache
❯ ipsw dyld extract dyld_shared_cache_arm64e JavaScriptCore
• Created JavaScriptCore
Extract all dylibs from dyld_shared_cache
❯ ipsw dyld extract dyld_shared_cache_arm64e --all
• Extracting all dylibs from dyld_shared_cache_arm64e
✅ [=============================================================| 2700/2700 ]
This command allows you to extract dylibs on non-darwin systems and it will add all local symbols to the symbol table as well as apply the DSC slide info for the pages included in the dylib if you supply the --slide
flag (this removes PACed pointers)
🆕 We recently added 2 new flags:
--objc
that "symbolicates" ObjC runtime info (classes, class methods instance methods, categories, etc.)--stubs
that "symbolicates" all the addresses that point to StubIsland stubs (NOTE: right now this adds ALL them, in the future we'll try and only add the needed stubs)
NOTE: This isn't repairing the ObjC runtime data or patching stubs, it's just adding the symbols to the symbol table so you can use them in your analysis.
This command isn't 💯 done yet and is missing some features:
- Repairing the ObjC runtime data
- Patching the stubs
- 🤔 Create an issue if you would like something else added
The goal with this command is to 1) create "near" perfect dylibs that can be used as stand alone frameworks and 2) create dylibs for reverse engineering (packed with symbols etc) for use in tools like Ghidra.
dyld macho
Parse a cached dylib
MachO file
❯ ipsw dyld macho --help
Parse a dylib file
Usage:
ipsw dyld macho <dyld_shared_cache> <dylib> [flags]
Flags:
-a, --all Parse ALL dylibs
-x, --extract 🚧 Extract the dylib
--force Overwrite existing extracted dylib(s)
-h, --help help for macho
-j, --json Print the TOC as JSON
-l, --loads Print the load commands
-o, --objc Print ObjC info
-r, --objc-refs Print ObjC references
--output string Directory to extract the dylib(s)
--search string Search for byte pattern
-f, --starts Print function starts
-s, --strings Print cstrings
-b, --stubs Print stubs
-n, --symbols Print symbols
Global Flags:
--color colorize output
--config string config file (default is $HOME/.ipsw/config.yaml)
-V, --verbose verbose output
Print a dylibs load commands AND dump the ObjC runtime data
❯ ipsw dyld macho dyld_shared_cache JavaScriptCore --loads --objc
Magic = 64-bit MachO
Type = Dylib
CPU = AARCH64, ARM64e caps: PAC00
Commands = 49 (Size: 6680)
Flags = NoUndefs, DyldLink, TwoLevel, NoReexportedDylibs, AppExtensionSafe, NlistOutofsyncWithDyldinfo, DylibInCache
000: LC_SEGMENT_64 sz=0x0027d000 off=0x390d8000-0x39355000 addr=0x1b90d8000-0x1b9355000 r-x/r-x __TEXT
sz=0x0022e8f4 off=0x390da674-0x39308f68 addr=0x1b90da674-0x1b9308f68 __TEXT.__text PureInstructions|SomeInstructions
sz=0x00001af0 off=0x39308f68-0x3930aa58 addr=0x1b9308f68-0x1b930aa58 __TEXT.__auth_stubs PureInstructions|SomeInstructions (SymbolStubs)
sz=0x00004524 off=0x3930aa58-0x3930ef7c addr=0x1b930aa58-0x1b930ef7c __TEXT.__objc_methlist
<SNIP>
0x001e39fc000 JSContext : NSObject {
// instance variables
+0x08 @"JSVirtualMachine" m_virtualMachine (0x8)
+0x10 ^{OpaqueJSContext=} m_context (0x8)
+0x18 {Strong<JSC::JSObject, JSC::ShouldStrongDestructorGrabLock::No>="m_slot"^{JSValue}} m_exception (0x8)
+0x20 {WeakObjCPtr<id<JSModuleLoaderDelegate> >="m_weakReference"@} m_moduleLoaderDelegate (0x8)
+0x28 @? _exceptionHandler (0x8)
}
@property (T@"JSValue",R) globalObject
@property (T@"JSValue",&) exception
@property (T@?,C,V_exceptionHandler) exceptionHandler
@property (T@"JSVirtualMachine",R) virtualMachine
@property (T@"NSString",C) name
// class methods
0x0018a04680c +[JSContext currentContext]
0x0018a046854 +[JSContext currentThis]
0x0018a0468e8 +[JSContext currentCallee]
0x00189e1b8d4 +[JSContext currentArguments]
0x00189e1b4f8 +[JSContext contextWithJSGlobalContextRef:]
// instance methods
0x0018a046afc -[JSContext _setRemoteInspectionEnabled:]
0x0018a046b1c -[JSContext _debuggerRunLoop]
0x00189e19ce4 -[JSContext wrapperForJSObject:]
0x0018a046b08 -[JSContext _includesNativeCallStackWhenReportingExceptions]
0x00189e1c908 -[JSContext exception]
0x00189e1ba58 -[JSContext objectForKeyedSubscript:]
0x00189e19294 -[JSContext evaluateScript:withSourceURL:]
0x00189e1b588 -[JSContext globalObject]
0x0018a046b44 -[JSContext exceptionHandler]
0x0018a0469dc -[JSContext setName:]
0x00189e1bb28 -[JSContext setException:]
0x00189e19eb4 -[JSContext wrapperForObjCObject:]
0x0018a046984 -[JSContext virtualMachine]
0x0018a046470 -[JSContext dependencyIdentifiersForModuleJSScript:]
0x0018a046b30 -[JSContext moduleLoaderDelegate]
0x0018a046b50 -[JSContext setExceptionHandler:]
0x0018a046cf4 -[JSContext valueFromNotifyException:]
0x00189e1c940 -[JSContext setObject:forKeyedSubscript:]
0x00189e19b48 -[JSContext dealloc]
0x0018a046b10 -[JSContext _setIncludesNativeCallStackWhenReportingExceptions:]
0x0018a046b38 -[JSContext setModuleLoaderDelegate:]
0x00189e19a98 -[JSContext initWithVirtualMachine:]
0x0018a046d44 -[JSContext boolFromNotifyException:]
0x0018a046bb0 -[JSContext initWithGlobalContextRef:]
0x0018a04698c -[JSContext name]
0x0018a046d68 -[JSContext wrapperMap]
0x00189e1c298 -[JSContext beginCallbackWithData:calleeValue:thisValue:argumentCount:arguments:]
0x00189e1c208 -[JSContext ensureWrapperMap]
0x0018a046c78 -[JSContext notifyException:]
0x00189e1ba44 -[JSContext evaluateScript:]
0x00189e19c88 -[JSContext init]
0x00189e1c900 -[JSContext .cxx_construct]
0x0018a0461e8 -[JSContext evaluateJSScript:]
0x0018a046b24 -[JSContext _setDebuggerRunLoop:]
0x0018a046b58 -[JSContext .cxx_destruct]
0x0018a04679c -[JSContext _setITMLDebuggableType]
0x00189e1ba30 -[JSContext JSGlobalContextRef]
0x00189e1baa0 -[JSContext endCallbackWithData:]
0x0018a046af4 -[JSContext _remoteInspectionEnabled]
<SNIP>
Make the output look amazing by piping to bat -l m --tabs 0 -p --theme Nord --wrap=never --pager "less -S"
Dump a dylib's header as JSON
❯ ipsw dyld macho dyld_shared_cache_arm64e JavaScriptCore --json | jq . -C | less -Sr
{
"header": {
"magic": "64-bit MachO",
"type": "DYLIB",
"cpu": "AARCH64, ARM64e caps: USR00",
"commands": 24,
"commands_size": 4736,
"flags": [
"NoUndefs",
"DyldLink",
"TwoLevel",
"BindsToWeak",
"NoReexportedDylibs",
"AppExtensionSafe",
"DylibInCache"
]
},
"loads": [
{
"load_cmd": "LC_SEGMENT_64",
"len": 1112,
"name": "__TEXT",
"addr": 6885064704,
"memsz": 21749760,
"offset": 376832,
"filesz": 21749760,
"maxprot": "r-x",
"prot": "r-x",
"nsect": 13,
"sections": [
{
"name": "__text",
"segment": "__TEXT",
"addr": 6885070320,
"size": 20555936,
"offset": 382448,
"align": 4,
"reloff": 0,
"nreloc": 0,
"type": 64
},
<SNIP>
Search for byte pattern
❯ ipsw dyld macho dyld_shared_cache_arm64e JavaScriptCore --search "7f 23 03 d5 * * * * f6 57 01 a9"
Search Results
--------------
0x199f25c80
0x199f26804
0x199f285c4
0x199f286c4
0x199f28860
0x199f289d8
0x199f2966c
<SNIP>
dyld stubs
Print out the 🆕 stubs islands
❯ ipsw dyld stubs dyld_shared_cache_arm64e | head
• Loading symbol cache file...
0x199ce7640: _CMPhotoJPEGWriteMPFWithJPEG
0x1ad5d5970: _objc_autorelease
0x1c8d0f350: _$ss10_HashTableV12previousHole6beforeAB6BucketVAF_tF
0x1cf7eba00: _$s5TeaUI14KeyCommandItemVMa
0x1bb1f8a40: _swift_task_switch
0x1ec2127d0: _CGColorGetColorSpace
0x207434db0: __swift_stdlib_strtod_clocale
0x1a0622e00: _objc_retain_x20
0x1c1f87d30: _swift_getTupleTypeLayout3
0x1bb220d70: _fcntl
dyld symaddr
Find all instances of a symbol's (unslid) addresses in shared cache
❯ ipsw dyld symaddr dyld_shared_cache <SYMBOL_NAME> --all
Speed it up by supplying the dylib name
❯ ipsw dyld symaddr --image JavaScriptCore dyld_shared_cache <SYMBOL_NAME>
You don't have to supply the full image path
Dump ALL teh symbolz!!!
❯ ipsw dyld symaddr dyld_shared_cache
Read in a JSON symbol lookup file
❯ jq . sym_lookup.json
[
{
"pattern": "__platform_memmove",
"image": "libsystem_platform.dylib"
},
{
"pattern": "_memcpy",
"image": "libsystem_c.dylib"
}
]
❯ ipsw dyld symaddr dyld_shared_cache --in sym_lookup.json | jq .
[
{
"name": "__platform_memmove",
"image": "/usr/lib/system/libsystem_platform.dylib",
"address": 8351373904
},
{
"name": "_memcpy",
"image": "/usr/lib/system/libsystem_c.dylib",
"address": 8351373904
}
]
dyld a2s
Lookup what symbol is at a given unslid or slid address (in hex)
❯ ipsw dyld a2s dyld_shared_cache_arm64e --slide 0x27010000 0x00000001bc39e1e0
• Address location dylib=/usr/lib/libobjc.A.dylib section=__TEXT.__text
0x19538e1e0: _objc_msgSend + 32
This will also create a cached version of the lookup hash table (.a2s) so the next time you lookup it will be much faster
❯ time ipsw dyld a2s dyld_shared_cache 0x190a7221c
• parsing public symbols...
• parsing private symbols...
0x190a7221c: _xmlCtxtGetLastError
61.59s user 9.80s system 233% cpu "30.545 total"
❯ time ipsw dyld a2s dyld_shared_cache 0x190a7221c
0x190a7221c: _xmlCtxtGetLastError
2.12s user 0.51s system 109% cpu "2.407 total"
dyld a2f
Lookup what function (if any) contains a given unslid or slid address
❯ ipsw dyld a2f dyld_shared_cache_arm64e 0x1800980ac
0x1800980ac: _dlsym (start: 0x1800980ac, end: 0x1800980e0)
It can also take a file of pointers (one per line) as input (and will output results as JSON)
❯ ipsw dyld a2f dyld_shared_cache_arm64e --in ptrs.txt \
| jq '.[] | select(.name != null) | select(.name | contains("dlsym"))'
{
"addr": 6443073708,
"start": 6443073708,
"end": 6443073760,
"size": 52,
"name": "_dlsym",
"image": "libdyld.dylib"
}
dyld objc
Dump ObjC addresses
Dump all the classes
❯ ipsw dyld objc --class dyld_shared_cache_arm64e
0x2180bb240: APClientInfoUI AdPlatformsCommonUI
0x1dd4ccf40: FLFollowUpAction CoreFollowUp
0x1dd47d338: ProcessAnalytics SymptomAnalytics
0x1dda0ffb8: SBPosterBoardUpdateManager SpringBoard
0x1ddfbca18: NEIPv6Settings NetworkExtension
0x2180bc130: QLExtension QuickLookSupport
0x218898148: AXAlertAction AXSpringBoardServerInstance
0x1dd606e98: _CPLOptimisticIDMapping CloudPhotoLibrary
0x2186ec0d8: AUGenericViewController CoreAudioKit
<SNIP>
Dump all the protocols
❯ ipsw dyld objc --proto dyld_shared_cache
0x1dd1489c8: NCNotificationListMigrationSchedulerDelegate UserNotificationsUIKit
0x1dd1d3688: SBSceneHandleObserverToken SpringBoardUI
0x1dd09f288: _SFDynamicBarAnimatorStateObserver SafariServices
0x1dd09f288: _SFDynamicBarAnimatorStateObserver MobileSafariUI
0x1dd0a9608: IXCoordinatorWithInstallOptions InstallCoordination
0x1dd096288: SFCompanionServiceManagerProtocol Sharing
0x1dd0a8ee8: ATXEngagementRecordManagerProtocol AppPredictionClient
0x1dd121368: WFParameterEventObserver WorkflowKit
0x1dd121368: WFParameterEventObserver WorkflowEditor
0x1dd121368: WFParameterEventObserver WorkflowEditor
Dump all the selectors
❯ ipsw dyld objc --sel dyld_shared_cache
0x18307bd68: rtiDocumentState
0x18527926c: _grabUserActivityTitleWithCallback:
0x1856042a9: deleteHistoryWithCompletion:
0x185017e2f: releaseViewManager
0x182e62aa2: getAssetPathForLocale:
0x183c89b23: T@"AVMomentCaptureMovie",&,N,V_movie
Dump all the imp-caches
❯ ipsw dyld objc --imp-cache dyld_shared_cache
dyld objc class
Lookup a class's address (same as ipsw dyld objc --class
)
❯ ipsw dyld objc class dyld_shared_cache release
0x1b92c85a8: release
Or get all the classes for an image
❯ ipsw dyld objc class --image libobjc.A.dylib dyld_shared_cache
dyld objc proto
Lookup a protocol's address (same as ipsw dyld objc --proto
)
❯ ipsw dyld objc proto dyld_shared_cache release
0x1b92c85a8: release
dyld objc sel
Lookup a selector's address (same as ipsw dyld objc --sel
)
❯ ipsw dyld objc sel dyld_shared_cache release
0x1b92c85a8: release
Or get all the selectors for an image
❯ ipsw dyld objc sel --image libobjc.A.dylib iPhone12,1_N104AP_18A5319i/dyld_shared_cache
Objective-C Selectors:
/usr/lib/libobjc.A.dylib
0x1c9dcc5fd: instanceMethodSignatureForSelector:
0x1c8f14de2: instanceMethodForSelector:
0x1c9d3be7d: instancesRespondToSelector:
0x1c8f113e9: isAncestorOfObject:
0x1c9e91b48: isSubclassOfClass:
0x1c90fe47d: name
0x1c9aa0937: descriptionForClassMethod:
0x1c9a01891: descriptionForInstanceMethod:
0x1c9aaf8c2: conformsTo:
0x1c8ef287d: 🤯 <========== WTF??
0x1c93562fd: release
0x1c9b2c9fd: initialize
<SNIP>
dyld split
Split up a dyld_shared_cache
❯ ipsw dyld split dyld_shared_cache .
• Splitting dyld_shared_cache
0/1445
1/1445
2/1445
3/1445
<SNIP>
1441/1445
1442/1445
1443/1445
1444/1445
To use an specific version of XCode
❯ ipsw dyld split dyld_shared_cache_arm64e --xcode ~/Downloads/Xcode_12.5.1.app
To create a ~/Library/Developer/Xcode/iOS DeviceSupport/
folder from a dyld_shared_cache to symbolicate a remote lldb
session
❯ ipsw dyld split dyld_shared_cache_arm64e --cache --version 16.3 --build 20D5035i
• Splitting dyld_shared_cache to ~/Library/Developer/Xcode/iOS DeviceSupport/16.3 (20D5035i) arm64e
• Creating XCode cache ~/Library/Developer/Xcode/iOS DeviceSupport/16.3 (20D5035i) arm64e/Info.plist
0/2700
1/2700
2/2700
3/2700
4/2700
5/2700
6/2700
7/2700
8/2700
<SNIP>
❯ ls -1 ~/Library/Developer/Xcode/iOS\ DeviceSupport/
14.4.1 (18D61)
14.4.2 (18D70)
16.0 (20A5303i) arm64e
16.0 (20A5328h) arm64e
16.0 (20A5339d) arm64e
"16.3 (20D5035i) arm64e" 👀
This commnd calls into XCode's dsc_extractor.bundle
so will ALWAYS work as long as your have a recent version of XCode installed
If you are on a non-darwin system use the ipsw dyld extract
command instead. You can use the ipsw dyld extract
command on darwin systems as well, however, it will be slower than using the dsc_extractor.bundle
based ipsw dyld split
command and (for now) only improves on the output by also applying the DSC slide-info if you use the --slide
flag. Eventually ipsw dyld extract
will be able to create near perfect dylib extractions and will be the preferred command and this one will only be useful when Apple releases the next major OS version and inevitably breaks everyones DSC parsing 😏 again, but you can count on ipsw
to once again be the FIRST to figure it out again 😁
dyld webkit
Extract WebKit version from dyld_shared_cache
❯ ipsw dyld webkit dyld_shared_cache_arm64e
• WebKit Version: 614.4.4.0.3
dyld patches
List dyld patch info
❯ ipsw dyld patches dyld_shared_cache_arm64e
[PATCHES] /usr/lib/libobjc.A.dylib (258 symbols)
0x1800c799c: _class_respondsToSelector
0x1de608458: (diversity: 0x0000, key: IA, auth: true) /usr/lib/swift/libswiftCore.dylib
0x1de667330: (diversity: 0x0000, key: IA, auth: true) /System/Library/Frameworks/Foundation.framework/Foundation
0x1de6a66b8: (diversity: 0x0000, key: IA, auth: true) /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation
0x1de7e38f8: (diversity: 0x0000, key: IA, auth: true) /System/Library/Frameworks/CoreData.framework/CoreData
0x1dec4ef48: (diversity: 0x0000, key: IA, auth: true) /System/Library/PrivateFrameworks/GameCenterUI.framework/GameCenterUI
0x1def62d30: (diversity: 0x0000, key: IA, auth: true) /System/Library/PrivateFrameworks/GameCenterFoundation.framework/GameCenterFoundation
0x1df072928: (diversity: 0x0000, key: IA, auth: true) /System/Library/PrivateFrameworks/WorkflowKit.framework/WorkflowKit
0x1e234a1c8: (diversity: 0x0000, key: IA, auth: true) GOT
0x21a88fce8: (diversity: 0x0000, key: IA, auth: true) GOT
0x1800bec28: _objc_setProperty_nonatomic
0x1de667bd0: (diversity: 0x0000, key: IA, auth: true) /System/Library/Frameworks/Foundation.framework/Foundation
0x1de7e3e70: (diversity: 0x0000, key: IA, auth: true) /System/Library/Frameworks/CoreData.framework/CoreData
0x1de84b178: (diversity: 0x0000, key: IA, auth: true) /System/Library/PrivateFrameworks/AccessibilityUtilities.framework/AccessibilityUtilities
0x1de9e0da0: (diversity: 0x0000, key: IA, auth: true) /System/Library/PrivateFrameworks/IMSharedUtilities.framework/IMSharedUtilities
0x1e06c5ac0: (diversity: 0x0000, key: IA, auth: true) /System/Library/PrivateFrameworks/CoreUI.framework/CoreUI
0x1deaa96c0: (diversity: 0x0000, key: IA, auth: true) /System/Library/PrivateFrameworks/Message.framework/Message
<SNIP>
❯ ipsw dyld patches dyld_shared_cache_arm64e -i libdyld.dylib
[PATCHES] /usr/lib/system/libdyld.dylib (98 symbols)
0x1a81ccbf4: __dyld_find_protocol_conformance_on_disk
0x1de608270: (key: IA, auth: true) /usr/lib/swift/libswiftCore.dylib
0x1de6083a8: (diversity: 0x0000, key: IA, auth: true) /usr/lib/swift/libswiftCore.dylib
0x1a81caf30: _dlopen_preflight
0x1de6a6888: (diversity: 0x0000, key: IA, auth: true) /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation
0x218ed9bc8: (diversity: 0x0000, key: IA, auth: true) /System/Library/PrivateFrameworks/DVTInstrumentsFoundation.framework/DVTInstrumentsFoundation
0x1e2304f18: (diversity: 0x0000, key: IA, auth: true) GOT
0x1a81ca71c: _dyld_image_header_containing_address
0x1e2304fb0: (diversity: 0x0000, key: IA, auth: true) GOT
0x1e23085d0: (diversity: 0x0000, key: IA, auth: true) GOT
0x1e2304fb0: (diversity: 0x0000, key: IA, auth: true) GOT
0x1e23085d0: (diversity: 0x0000, key: IA, auth: true) GOT
0x1e2304fb0: (diversity: 0x0000, key: IA, auth: true) GOT
<SNIP>
❯ ipsw dyld patches dyld_shared_cache_arm64e -i libdyld.dylib -s _dlopen | head
0x1a81cada8: _dlopen
0x1de667530: (diversity: 0x0000, key: IA, auth: true) /System/Library/Frameworks/Foundation.framework/Foundation
0x1de6a6880: (diversity: 0x0000, key: IA, auth: true) /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation
0x1de6bbed0: (diversity: 0x0000, key: IA, auth: true) /System/Library/Frameworks/CoreGraphics.framework/CoreGraphics
0x1de7ac910: (diversity: 0x0000, key: IA, auth: true) /System/Library/Frameworks/SwiftUI.framework/SwiftUI
0x1de7e3a88: (diversity: 0x0000, key: IA, auth: true) /System/Library/Frameworks/CoreData.framework/CoreData
0x1de816db8: (diversity: 0x0000, key: IA, auth: true) /System/Library/Frameworks/ContactsUI.framework/ContactsUI
0x1de84ae68: (diversity: 0x0000, key: IA, auth: true) /System/Library/PrivateFrameworks/AccessibilityUtilities.framework/AccessibilityUtilities
0x1de885910: (diversity: 0x0000, key: IA, auth: true) /System/Library/PrivateFrameworks/AppleMediaServices.framework/AppleMediaServices
0x1de8e0620: (diversity: 0x0000, key: IA, auth: true) /System/Library/Frameworks/Contacts.framework/Contacts
dyld slide
Dump dyld_shared_cache slide info
❯ ipsw dyld slide dyld_shared_cache_arm64e
slide info version = 3
page_size = 4096
page_starts_count = 11956
auth_value_add = 0x0000000180000000
page[ 0]: start=0x0000
[ 0 + 0x0000] (0x1d1e48000 @ offset 0x4fe48000 => 0x1d70dabb8) value: 0x1d70dabb8, next: 01, sym: __DefaultRuneLocale
[ 0 + 0x0008] (0x1d1e48008 @ offset 0x4fe48008 => 0x2028f50e0) value: 0x2028f50e0, next: 01, sym: _OBJC_CLASS_$___NSStackBlock__
[ 0 + 0x0018] (0x1d1e48010 @ offset 0x4fe48010 => 0x1d9a3dc60) value: 0x1d9a3dc60, next: 01, sym: ___stack_chk_guard
[ 0 + 0x0030] (0x1d1e48018 @ offset 0x4fe48018 => 0x1d70da940) value: 0x1d70da940, next: 01, sym: ___stderrp
[ 0 + 0x0050] (0x1d1e48020 @ offset 0x4fe48020 => 0x1db4ecc20) value: 0x1db4ecc20, next: 01, sym: __dispatch_source_type_mach_recv
[ 0 + 0x0078] (0x1d1e48028 @ offset 0x4fe48028 => 0x191eb91dc) value: 0x191eb91dc, next: 01, sym: _free
[ 0 + 0x00A8] (0x1d1e48030 @ offset 0x4fe48030 => 0x1d9a3c02c) value: 0x1d9a3c02c, next: 01, sym: _mach_task_self_
[ 0 + 0x00E0] (0x1d1e48038 @ offset 0x4fe48038 => 0x1d9a3c048) value: 0x1d9a3c048, next: 01, sym: _vm_page_size
[ 0 + 0x0120] (0x1d1e48040 @ offset 0x4fe48040 => 0x1800a087c) value: 0x1800a087c, next: 01, sym: ?
[ 0 + 0x0168] (0x1d1e48048 @ offset 0x4fe48048 => 0x1800a0855) value: 0x1800a0855, next: 03, sym: ?
[ 0 + 0x01C8] (0x1d1e48060 @ offset 0x4fe48060 => 0x1800a0958) value: 0x1800a0958, next: 04, sym: ?
[ 0 + 0x0248] (0x1d1e48080 @ offset 0x4fe48080 => 0x1800a0958) value: 0x1800a0958, next: 04, sym: ?
[ 0 + 0x02E8] (0x1d1e480a0 @ offset 0x4fe480a0 => 0x1800a0958) value: 0x1800a0958, next: 04, sym: ?
<SNIP>
Dump slide info as JSON
❯ ipsw dyld slide dyld_shared_cache_arm64e --json \
| jq '.[] | select(.pointer.authenticated == true and .pointer.key == "DA")'
{
"cache_file_offset": 1446288864,
"cache_vm_address": 7955848672,
"target": 7955848672,
"pointer": {
"value": 1524890997136864,
"next": 1,
"diversity": 27361,
"addr_div": true,
"key": "DA",
"authenticated": true
}
}
<SNIP>
dyld str
Scan dyld_shared_cache for strings
❯ ipsw dyld str dyld_shared_cache_arm64e --pattern "fuck"
0x1bae9dfe4: (DialogEngine) "fucking"
0x1bae9dff4: (DialogEngine) "fuckar"
0x1bae9fc8b: (DialogEngine) "motherfucker"
0x1baea059e: (DialogEngine) "fuckfinger"
<SNIP>
0x1e1d8afb8: (DifferentialPrivacy) "motherfucker"
0x1e1d8bdd8: (DifferentialPrivacy) "mindfucker"
0x1e1d8bdf8: (DifferentialPrivacy) "mindfuck"
0x1ec0dcf66: (ResponseKit) "what the fuck"
0x2195d9728: (ResponseKit) "what the fuck"
<SNIP>
🫢 daaaaang Apple's got a real potty mouth 😏
The --pattern
option supports regex and for some reason is the fastest way to search for strings in the cache. I'm not sure why, but it's faster than str1 == str2
comparison 🤷♂️
dyld swift
Dump Swift Optimizations Info (type
conformances, foreign
type conformances and metadata
conformances)
❯ ipsw dyld swift dyld_shared_cache_arm64e --demangle --types
• Loading symbol cache file...
0x4060a8: type_descriptor: 0x4c54ff9c, protocol: 0x118cd50, proto_conformance: 0x4c54ffb8, dylib_objc_index: 707
0x1cc54ff9c: T n/a NewsAnalytics
0x18118cd50: P protocol descriptor for CustomDebugStringConvertible libswiftCore.dylib
0x1cc54ffb8: C n/a NewsAnalytics
0x22ded8: type_descriptor: 0x1414227c, protocol: 0x1189df4, proto_conformance: 0x14142398, dylib_objc_index: 72
0x19414227c: T n/a libVFXCore.dylib
0x181189df4: P protocol descriptor for Equatable libswiftCore.dylib
0x194142398: C n/a libVFXCore.dylib
0x22e058: type_descriptor: 0x14142510, protocol: 0x11884fc, proto_conformance: 0x1414259c, dylib_objc_index: 72
0x194142510: T n/a libVFXCore.dylib
<SNIP>
The --demangle
option is only avabile on darwin hosts for now, as it calls into a dylib.
dyld a2o
Convert dyld_shared_cache address to offset
❯ ipsw dyld a2o dyld_shared_cache_arm64e 0x1D7B18000
• Offset dec=37994496 ext=".27.dylddata" hex=0x243c000 mapping=__LINKEDIT stubs=false uuid=DC237E9C-4500-345E-8C4B-54F12BE73741
dyld o2a
Convert dyld_shared_cache offset to address
❯ ipsw dyld o2a dyld_shared_cache_arm64e 0x243c000
• dyld4 cache with stub islands detected (will search within dyld_subcache_entry cacheVMOffsets)
• Address dec=6480445440 ext=".01" hex=0x18243c000 mapping=__TEXT stubs=false uuid=836E3AA5-1E8F-38F9-AFC5-60DF76027BAD
dyld disass
Disassemble a function in the dyld_shared_cache
❯ ipsw dyld disass dyld_shared_cache_arm64e --symbol _NSLog
• Found dyld_shared_cache companion symbol map file...
• Locating symbol: _NSLog
• Found symbol dylib=/System/Library/Frameworks/Foundation.framework/Foundation
• Parsing ObjC runtime structures...
You can speed up symbol lookups by supplying the --image
flag or you can use the --vaddr
flag
_NSLog:
0x181bac214: 7f 23 03 d5 pacibsp
0x181bac218: ff 83 00 d1 sub sp, sp, #0x20
0x181bac21c: fd 7b 01 a9 stp x29, x30, [sp, #0x10]
0x181bac220: fd 43 00 91 add x29, sp, #0x10
0x181bac224: 28 e9 2b f0 adrp x8, 0x1d98d3000
0x181bac228: 08 45 41 f9 ldr x8, [x8, #0x288] ; __got.___stack_chk_guard
0x181bac22c: 08 01 40 f9 ldr x8, [x8]
0x181bac230: e8 07 00 f9 str x8, [sp, #0x8]
0x181bac234: a8 43 00 91 add x8, x29, #0x10
0x181bac238: e8 03 00 f9 str x8, [sp]
0x181bac23c: e2 03 1e aa mov x2, x30
0x181bac240: e2 43 c1 da xpaci x2
0x181bac244: a1 43 00 91 add x1, x29, #0x10
0x181bac248: 2a 22 00 94 bl __NSLogv
0x181bac24c: e8 07 40 f9 ldr x8, [sp, #0x8]
0x181bac250: 29 e9 2b f0 adrp x9, 0x1d98d3000
0x181bac254: 29 45 41 f9 ldr x9, [x9, #0x288] ; __got.___stack_chk_guard
0x181bac258: 29 01 40 f9 ldr x9, [x9]
0x181bac25c: 3f 01 08 eb cmp x9, x8
0x181bac260: 81 00 00 54 b.ne loc_181bac270 ; ⤵ 0x10
0x181bac264: fd 7b 41 a9 ldp x29, x30, [sp, #0x10]
0x181bac268: ff 83 00 91 add sp, sp, #0x20
0x181bac26c: ff 0f 5f d6 retab
0x181bac270: ; loc_181bac270
0x181bac270: 3e 85 93 97 bl j____stack_chk_fail
Make the output look amazing by adding the --color
flag 🌈
dyld imports
List all dylibs that import/load a given dylib in the dyld_shared_cache
❯ ipsw dyld imports dyld_shared_cache JavaScriptCore
JavaScriptCore Imported By:
===========================
In DSC (Dylibs)
---------------
/System/Library/PrivateFrameworks/WebGPU.framework/WebGPU
/System/Library/PrivateFrameworks/WebCore.framework/WebCore
/System/Library/Frameworks/WebKit.framework/WebKit
/System/Library/PrivateFrameworks/JetEngine.framework/JetEngine
/System/Library/Frameworks/SafariServices.framework/SafariServices
/System/Library/PrivateFrameworks/SafariShared.framework/SafariShared
/System/Library/PrivateFrameworks/SafariSharedUI.framework/SafariSharedUI
/System/Library/PrivateFrameworks/JetUI.framework/JetUI
/System/Library/PrivateFrameworks/ProVideo.framework/ProVideo
/System/Library/PrivateFrameworks/StoreKitUI.framework/StoreKitUI
/System/Library/PrivateFrameworks/WorkflowKit.framework/WorkflowKit
/System/Library/PrivateFrameworks/SeymourServices.framework/SeymourServices
/System/Library/Frameworks/VideoSubscriberAccount.framework/VideoSubscriberAccount
/System/Library/PrivateFrameworks/MobileSafariUI.framework/MobileSafariUI
/System/Library/PrivateFrameworks/WebKitLegacy.framework/WebKitLegacy
/System/Library/PrivateFrameworks/AppStoreKit.framework/AppStoreKit
/System/Library/PrivateFrameworks/AppStoreKitInternal.framework/AppStoreKitInternal
/System/Library/PrivateFrameworks/ITMLKit.framework/ITMLKit
/System/Library/PrivateFrameworks/VideosUI.framework/VideosUI
/System/Library/PrivateFrameworks/TelephonyPreferences.framework/TelephonyPreferences
/System/Library/PrivateFrameworks/CoreChart.framework/CoreChart
/System/Library/PrivateFrameworks/RemoteUI.framework/RemoteUI
/System/Library/PrivateFrameworks/MetricsKit.framework/MetricsKit
/System/Library/PrivateFrameworks/WebBookmarks.framework/WebBookmarks
/System/Library/PrivateFrameworks/WebUI.framework/WebUI
/System/Library/PrivateFrameworks/CommunicationsSetupUI.framework/CommunicationsSetupUI
/System/Library/PrivateFrameworks/TuriCore.framework/TuriCore
/System/Library/PrivateFrameworks/Cards.framework/Cards
/System/Library/PrivateFrameworks/WebInspector.framework/WebInspector
/System/Library/PrivateFrameworks/iTunesStoreUI.framework/iTunesStoreUI
/System/Library/PrivateFrameworks/MailWebProcessSupport.framework/MailWebProcessSupport
/System/Library/PrivateFrameworks/JITAppKit.framework/JITAppKit
/System/Library/PrivateFrameworks/MusicUI.framework/MusicUI
/System/Library/PrivateFrameworks/TVMLKit.framework/TVMLKit
/System/Library/PrivateFrameworks/WorkflowEditor.framework/WorkflowEditor
/System/Library/PrivateFrameworks/MobileSafari.framework/PlugIns/Safari.wkbundle/Safari
/System/Library/PrivateFrameworks/SlideshowKit.framework/Frameworks/OpusKit.framework/OpusKit
/System/Library/PrivateFrameworks/AirPlayKit.framework/AirPlayKit
/System/Library/PrivateFrameworks/TouchML.framework/TouchML
/System/Library/PrivateFrameworks/ActionKit.framework/ActionKit
/System/Library/PrivateFrameworks/WebApp.framework/WebApp
/System/Library/PrivateFrameworks/WebSheet.framework/WebSheet
/System/Library/PrivateFrameworks/VideoSubscriberAccountUI.framework/VideoSubscriberAccountUI
In FileSystem DMG (Apps)
------------------------
/Applications/DataActivation.app/DataActivation
/Applications/MTLReplayer.app/MTLReplayer
/Applications/VideoSubscriberAccountViewService.app/VideoSubscriberAccountViewService
/System/Library/PrivateFrameworks/ActionPredictionHeuristics.framework/XPCServices/HeuristicInterpreter.xpc/HeuristicInterpreter
/System/Library/PrivateFrameworks/AppStoreComponents.framework/Support/appstorecomponentsd
/System/Library/PrivateFrameworks/AppleMediaServicesUI.framework/amsengagementd
/System/Library/PrivateFrameworks/AppleMediaServicesUIDynamic.framework/XPCServices/AppleMediaServicesUIDynamicService.xpc/AppleMediaServicesUIDynamicService
/System/Library/PrivateFrameworks/VideoSubscriberAccountUI.framework/PlugIns/VideoSubscriberAccountAuthenticationExtension.appex/VideoSubscriberAccountAuthenticationExtension
/cdhash/0254faebce8593aaefd5db2b95696a33ff3c9880 (/usr/libexec/proactiveeventtrackerd)
/cdhash/0361ef8633f63f58a344a1f6b44a5883229d11a1 (/Applications/DataActivation.app/DataActivation)
/cdhash/25ef8201f35f9244c6c8ca460cd894cef7b9b86d (/System/Library/PrivateFrameworks/VideoSubscriberAccountUI.framework/PlugIns/VideoSubscriberAccountAuthenticationExtension.appex/VideoSubscriberAccountAuthenticationExtension)
/cdhash/3b863c1ce76a2c31a12a8983c80a139a44d67516 (/System/Library/PrivateFrameworks/AppleMediaServicesUIDynamic.framework/XPCServices/AppleMediaServicesUIDynamicService.xpc/AppleMediaServicesUIDynamicService)
/cdhash/4f9e0310bc4ed6f771eed1bcefa383961edfa57b (/System/Library/PrivateFrameworks/ActionPredictionHeuristics.framework/XPCServices/HeuristicInterpreter.xpc/HeuristicInterpreter)
/cdhash/52afe0df81978225c8408fb42adbd722f4fcced3 (/System/Library/PrivateFrameworks/AppleMediaServicesUI.framework/amsengagementd)
/cdhash/83198ea295da0df64f43a5379433448f401a8a52 (/Applications/MTLReplayer.app/MTLReplayer)
/cdhash/8722d3a31074cf78f16d3d50000c237fffb7072e (/Applications/VideoSubscriberAccountViewService.app/VideoSubscriberAccountViewService)
/cdhash/d87d78b5f59981e4bcbcf13368cd90985da78b76 (/System/Library/PrivateFrameworks/AppStoreComponents.framework/Support/appstorecomponentsd)
/usr/libexec/proactiveeventtrackerd
Notice we also got the filesystem's binaries that import that dylib??? That's due to the POWER 💪 of prebuilt loader sets
😎
For a more comprehensive list of imports run
❯ ipsw dyld imports --file-system iPhone15,2_16.3_20D47_Restore.ipsw JavaScriptCore
dyld xref
List all the cross-references in the dyld_shared_cache for a given virtual address
❯ ipsw dyld symaddr dyld_shared_cache_arm64e _NSLog
0x1813450bc: (local|regular) _NSLog Foundation
0x1813450bc: (symtab|external|__TEXT.__text) _NSLog Foundation
Search the dylib that the symbol is in by default
❯ ipsw dyld xref dyld_shared_cache_arm64e 0x1813450bc
• parsing public symbols...
• parsing private symbols...
• parsing stub islands...
• Searching for xrefs (use -V for more progess output)
• XREFS dylib=Foundation sym=_NSLog xrefs=314
0x1818e4d8c: -[NSFileVersion setResolved:] + 120
0x1812a5228: -[NSString rangeOfString:options:range:locale:] + 196
0x1818e2400: ___36-[NSFileSubarbitrationClaim granted]_block_invoke.71 + 20
0x1817f3b8c: ___52-[NSExtensionItem _matchingDictionaryRepresentation]_block_invoke + 440
0x181330ad4: -[NSFileCoordinator(NSPrivate) _blockOnAccessClaim:withAccessArbiter:] + 320
0x18137e384: ___51-[NSBackgroundActivityScheduler scheduleWithBlock:]_block_invoke + 400
0x1818259b0: -[NSPlaceholderMutableString initWithCString:encoding:] + 124
0x181869b70: -[__NSConcreteURLComponents setPercentEncodedQueryItems:] + 304
0x1812b88e0: -[NSPlaceholderString initWithBytes:length:encoding:] + 112
0x1813036a8: -[NSString(NSPathUtilities) stringByAppendingPathExtension:] + 532
0x181874ad4: -[NSPlaceholderValue getValue:] + 36
0x18188c088: -[NSCorrectionCheckingResult initWithCoder:] + 264
0x1812fd1e8: -[NSThread start] + 260
0x1817d48f8: -[NSMutableCharacterSet invert] + 60
0x1817cb6f8: -[NSBigMutableString _createSubstringWithRange:] + 156
0x181808e84: ___62-[NSURL(NSURLPromisedItems) _valueFromFaultDictionary:forKey:]_block_invoke + 112
0x1818257bc: -[NSPlaceholderMutableString initWithBytesNoCopy:length:encoding:freeWhenDone:] + 104
0x181838c80: +[NSMessagePort sendBeforeTime:streamData:components:to:from:msgid:reserved:] + 476
<SNIP>
- To search ALL dylibs, use the
--all
flag - To search a specific dylib, use the
--image
flag - To search all other dylibs that import the dylib that contains the symbol/address, use the
--imports
flag
This is one of ipsw
's MOST powerful commands and is getting better all the time. Check back periodically and see what's new!
dyld tbd
Generate a .tbd
file for a dylib
❯ ipsw dyld tbd dyld_shared_cache CoreSymbolication
• Created CoreSymbolication.tbd
❯ cat CoreSymbolication.tbd
---
archs: [ arm64e ]
platform: ios
install-name: /System/Library/PrivateFrameworks/CoreSymbolication.framework/CoreSymbolication
current-version: 64544.69.1.0.0
exports:
- archs: [ arm64e ]
symbols: [ _unmap_node, _thread_name_for_thread_port, <SNIP> ]
...
dyld dump
First print the MachO header for CoreData
in a cache
❯ ipsw dyld macho dyld_shared_cache_arm64e CoreData | grep "__DATA_CONST.__got"
sz="0x000002d8" off=0x502c2428-0x502c2700 addr="0x1d22c2428"-0x1d22c2700 __DATA_CONST.__got
Hexdump the section __DATA_CONST.__got
❯ ipsw dyld dump dyld_shared_cache_arm64e 0x1d22c2428 --size 728 # 0x2d8 in decimal
00000000 00 46 a8 d9 01 00 08 00 90 ba a8 d9 01 00 08 00 |.F..............|
00000010 52 3b d8 d6 01 00 08 00 20 ba a8 d9 01 00 08 00 |R;...... .......|
00000020 18 bc a8 d9 01 00 08 00 b0 bc a8 d9 01 00 08 00 |................|
00000030 b8 bc a8 d9 01 00 08 00 c0 bc a8 d9 01 00 08 00 |................|
00000040 a0 bc a8 d9 01 00 08 00 a8 bc a8 d9 01 00 08 00 |................|
00000050 e8 bb a8 d9 01 00 08 00 88 bc a8 d9 01 00 08 00 |................|
00000060 b0 bb a8 d9 01 00 08 00 b0 3d a8 d9 01 00 08 00 |.........=......|
00000070 30 bb a8 d9 01 00 08 00 c8 3d a8 d9 01 00 08 00 |0........=......|
<SNIP>
Or dump the section as a list of pointers
❯ ipsw dyld dump dyld_shared_cache_arm64e 0x1d22c2428 --size 728 --addr
0x1d9a84600
0x1d9a8ba90
0x1d6d83b52
0x1d9a8ba20
0x1d9a8bc18
0x1d9a8bcb0
0x1d9a8bcb8
0x1d9a8bcc0
0x1d9a8bca0
0x1d9a8bca8
<SNIP>
Lookup those pointers in the cache
❯ ipsw dyld dump dyld_shared_cache_arm64e 0x1d22c2428 --size 728 --addr \
| xargs -I {} /bin/zsh -c 'ipsw dyld a2s dyld_shared_cache_arm64e {}'
• Address dylib=CoreFoundation section=__DATA_CONST.__const
0x1d9a84600: _NSCalendarIdentifierGregorian
• Address dylib=Foundation section=__DATA_CONST.__const
0x1d9a8ba90: _NSCocoaErrorDomain
• Address dylib=Foundation section=__DATA.__common
0x1d6d83b52: _NSDeallocateZombies
• Address dylib=/Foundation section=__DATA_CONST.__const
0x1d9a8ba20: _NSFilePathErrorKey
<SNIP>
Or write to a file for later post-processing
❯ ipsw dyld dump dyld_shared_cache_arm64e 0x1d22c2428 --size 728 --output ./data.bin
• Wrote data to file ./data.bin
❯ hexdump -C data.bin
00000000 00 46 a8 d9 01 00 08 00 90 ba a8 d9 01 00 08 00 |.F..............|
00000010 52 3b d8 d6 01 00 08 00 20 ba a8 d9 01 00 08 00 |R;...... .......|
00000020 18 bc a8 d9 01 00 08 00 b0 bc a8 d9 01 00 08 00 |................|
00000030 b8 bc a8 d9 01 00 08 00 c0 bc a8 d9 01 00 08 00 |................|
00000040 a0 bc a8 d9 01 00 08 00 a8 bc a8 d9 01 00 08 00 |................|
00000050 e8 bb a8 d9 01 00 08 00 88 bc a8 d9 01 00 08 00 |................|
00000060 b0 bb a8 d9 01 00 08 00 b0 3d a8 d9 01 00 08 00 |.........=......|
00000070 30 bb a8 d9 01 00 08 00 c8 3d a8 d9 01 00 08 00 |0........=......|
00000080 c0 3d a8 d9 01 00 08 00 68 be a8 d9 01 00 08 00 |.=......h.......|
00000090 70 be a8 d9 01 00 08 00 78 be a8 d9 01 00 08 00 |p.......x.......|
<SNIP>
To dump a section from a dylib in the dyld_shared_cache
❯ ipsw dyld dump dyld_shared_cache --image JavaScriptCore --section __TEXT.__cstring --size 208
• Address location dylib=JavaScriptCore section=__TEXT.__cstring
000000019ba27290: 41 70 70 72 6f 78 69 6d 61 74 65 28 00 20 73 65 |Approximate(. se|
000000019ba272a0: 63 29 00 4e 4f 54 20 49 4d 50 4c 45 4d 45 4e 54 |c).NOT IMPLEMENT|
000000019ba272b0: 45 44 20 59 45 54 0a 00 41 53 53 45 52 54 49 4f |ED YET..ASSERTIO|
000000019ba272c0: 4e 20 46 41 49 4c 45 44 3a 20 25 73 0a 00 53 48 |N FAILED: %s..SH|
000000019ba272d0: 4f 55 4c 44 20 4e 45 56 45 52 20 42 45 20 52 45 |OULD NEVER BE RE|
000000019ba272e0: 41 43 48 45 44 0a 00 41 53 53 45 52 54 49 4f 4e |ACHED..ASSERTION|
000000019ba272f0: 20 46 41 49 4c 45 44 3a 20 00 0a 25 73 0a 00 41 | FAILED: ..%s..A|
000000019ba27300: 52 47 55 4d 45 4e 54 20 42 41 44 3a 20 25 73 2c |RGUMENT BAD: %s,|
000000019ba27310: 20 25 73 0a 00 00 46 41 54 41 4c 20 45 52 52 4f | %s...FATAL ERRO|
000000019ba27320: 52 3a 20 00 0a 00 55 6e 6b 6e 6f 77 6e 20 6c 6f |R: ...Unknown lo|
000000019ba27330: 67 67 69 6e 67 20 6c 65 76 65 6c 3a 20 25 73 00 |gging level: %s.|
000000019ba27340: 55 6e 6b 6e 6f 77 6e 20 6c 6f 67 67 69 6e 67 20 |Unknown logging |
000000019ba27350: 63 68 61 6e 6e 65 6c 3a 20 25 73 00 25 40 00 25 |channel: %s.%@.%|