Create ios.md
This commit is contained in:
parent
0f47e4a616
commit
c76f1ce7da
369
scripts/ios.md
Normal file
369
scripts/ios.md
Normal file
@ -0,0 +1,369 @@
|
||||
|
||||
On the iDevice the file `/System/Library/Backup/Domains.plist` determines what files to backup.
|
||||
|
||||
There is a differentiation between "domains" and relative files.
|
||||
|
||||
For [More Info](https://www.theiphonewiki.com/wiki/ITunes_Backup).
|
||||
|
||||
From `Domains.plist` :
|
||||
```
|
||||
...
|
||||
RelativePathsToBackupAndRestore = (
|
||||
"Demo.mov",
|
||||
"Library/com.apple.itunesstored",
|
||||
"Library/AddressBook",
|
||||
"Library/Accounts # <rdar://problem/9489580> Twitter account isn't backed up (or restored)",
|
||||
"Library/Application Support/Front Row # <rdar://problem/11427805> ATV: paths that need to be backed up on AppleTV",
|
||||
"Library/Application Support/com.apple.Home/Wallpapers # <rdar://problem/27410171>",
|
||||
"Library/BackBoard # <rdar://problem/13752515> App Push notification settings don't seem to be backed up/restored",
|
||||
"Library/BulletinBoard # <rdar://problem/9281863> Backup /var/mobile/Library/BulletinBoard",
|
||||
"Library/Caches/com.apple.WebAppCache # <rdar://problem/6500854> Should back up offline application cache and databases for WebKit",
|
||||
"Library/Calendar",
|
||||
>> "Library/CallHistoryDB # <rdar://problem/16651783> Backup request for CallHistory.framework.",
|
||||
>> "Library/CallHistoryTransactions # <rdar://problem/16651783> Backup request for CallHistory.framework.",
|
||||
...
|
||||
RootPath = "/var/mobile";
|
||||
..
|
||||
...
|
||||
```
|
||||
|
||||
List device daemons w/ `$ launchctl list`
|
||||
```
|
||||
PID Status Label
|
||||
2696 0 com.apple.CoreAuthentication.daemon
|
||||
3719 0 com.apple.cloudphotod
|
||||
535 0 com.apple.homed
|
||||
513 0 com.apple.dataaccess.dataaccessd
|
||||
- 0 com.apple.iapauthd
|
||||
618 0 com.apple.cache_delete
|
||||
- 0 com.apple.BTServer.avrcp
|
||||
518 0 com.apple.CallHistorySyncHelper
|
||||
3568 0 UIKitApplication:com.apple.InCallService[0x287]
|
||||
502 0 com.apple.icloud.findmydeviced
|
||||
443 0 com.apple.telephonyutilities.callservicesd
|
||||
549 0 com.apple.icloud.fmfd
|
||||
....
|
||||
```
|
||||
|
||||
launchctl manual
|
||||
```
|
||||
Usage: launchctl <subcommand> ... | help [subcommand]
|
||||
Many subcommands take a target specifier that refers to a domain or service within that domain.
|
||||
The available specifier forms are:
|
||||
|
||||
system/[service-name]
|
||||
Targets the system-wide domain or service within. Root privileges are required to make modifications.
|
||||
|
||||
user/<uid>/[service-name]
|
||||
Targets the user domain or service within.
|
||||
A process running as the target user may make modifications. Root may modify any user's domain.
|
||||
User domains do not exist on iOS.
|
||||
|
||||
gui/<uid>/[service-name]
|
||||
Targets the GUI domain or service within. Each GUI domain is associated with a user domain, and a process running as
|
||||
the owner of that user domain may make modifications.
|
||||
Root may modify any GUI domain. GUI domains do not exist on iOS.
|
||||
|
||||
session/<asid>/[service-name]
|
||||
Targets a session domain or service within. A process running within the target security audit session may make
|
||||
modifications. Root may modify any session domain.
|
||||
|
||||
pid/<pid>/[service-name]
|
||||
Targets a process domain or service within. Only the process which owns the domain may modify it.
|
||||
Even root may not do so.
|
||||
|
||||
When using a legacy subcommand which manipulates a domain, the target domain is assumed to be the system domain.
|
||||
On iOS, there is no support for per-user domains, even though there is a mobile user.
|
||||
|
||||
Subcommands:
|
||||
..
|
||||
debug Configures the next invocation of a service for debugging.
|
||||
kill Sends a signal to the service instance.
|
||||
blame Prints the reason a service is running.
|
||||
print Prints a description of a domain or service.
|
||||
print-cache Prints information about the service cache.
|
||||
print-disabled Prints which services are disabled.
|
||||
plist Prints a property list embedded in a binary (targets the Info.plist by default).
|
||||
procinfo Prints port information about a process.
|
||||
hostinfo Prints port information about the host.
|
||||
runstats Prints performance statistics for a service.
|
||||
examine Runs the specified analysis tool against launchd in a non-reentrant manner.
|
||||
config Modifies persistent configuration parameters for launchd domains.
|
||||
dumpstate Dumps launchd state to stdout.
|
||||
list Lists information about services.
|
||||
start Starts the specified service.
|
||||
..
|
||||
or a given subcommand.
|
||||
```
|
||||
Output of proccess info for CallHistorySyncHelper
|
||||
`$ launchctl procinfo 549`
|
||||
|
||||
Added the content of referenced files (com.apple.CallHistorySyncHelper.plist)
|
||||
|
||||
```
|
||||
com.apple.CallHistorySyncHelper = {
|
||||
active count = 5
|
||||
path = /System/Library/LaunchDaemons/com.apple.CallHistorySyncHelper.plist
|
||||
state = running
|
||||
program = /System/Library/PrivateFrameworks/CallHistory.framework/Support/CallHistorySyncHelper
|
||||
arguments = {
|
||||
/System/Library/PrivateFrameworks/CallHistory.framework/Support/CallHistorySyncHelper
|
||||
}
|
||||
default environment = {
|
||||
PATH => /usr/bin:/bin:/usr/sbin:/sbin
|
||||
}
|
||||
environment = {
|
||||
XPC_SERVICE_NAME => com.apple.CallHistorySyncHelper
|
||||
}
|
||||
domain = com.apple.xpc.launchd.domain.system
|
||||
username = mobile
|
||||
minimum runtime = 10
|
||||
exit timeout = 5
|
||||
runs = 1
|
||||
successive crashes = 0
|
||||
excessive crashing = 0
|
||||
pid = 518
|
||||
immediate reason = ipc (mach)
|
||||
forks = 1
|
||||
execs = 1
|
||||
trampolined = 1
|
||||
started suspended = 0
|
||||
proxy started suspended = 0
|
||||
last exit code = (never exited)
|
||||
event triggers = {
|
||||
com.apple.callhistorysync.idslaunchnotification => {
|
||||
state = 0
|
||||
service = com.apple.CallHistorySyncHelper
|
||||
stream = com.apple.notifyd.matching
|
||||
descriptor = {
|
||||
"Notification" => "com.apple.callhistorysync.idslaunchnotification"
|
||||
}
|
||||
}
|
||||
}
|
||||
endpoints = {
|
||||
"com.apple.callhistory.pairedsync" = {
|
||||
port = 0x46907
|
||||
active = 1
|
||||
managed = 1
|
||||
reset = 0
|
||||
hide = 0
|
||||
}
|
||||
"com.apple.CallHistorySyncHelper" = {
|
||||
port = 0x46607
|
||||
active = 1
|
||||
managed = 1
|
||||
reset = 0
|
||||
hide = 0
|
||||
}
|
||||
"com.apple.CallHistorySyncHelper.aps" = {
|
||||
port = 0x4627b
|
||||
active = 1
|
||||
managed = 1
|
||||
reset = 0
|
||||
hide = 0
|
||||
}
|
||||
}
|
||||
dynamic endpoints = {
|
||||
}
|
||||
pid-local endpoints = {
|
||||
}
|
||||
instance-specific endpoints = {
|
||||
}
|
||||
event channels = {
|
||||
"com.apple.notifyd.matching" = {
|
||||
port = 0x46707
|
||||
active = 1
|
||||
managed = 1
|
||||
reset = 0
|
||||
hide = 0
|
||||
}
|
||||
}
|
||||
sockets = {
|
||||
}
|
||||
spawn type = adaptive
|
||||
jetsam priority = 3
|
||||
jetsam memory limit (active) = 6 MB
|
||||
jetsam memory limit (inactive) = 6 MB
|
||||
jetsamproperties category = daemon
|
||||
allowed to execute = 1
|
||||
submitted job. ignore execute allowed
|
||||
cpumon = default
|
||||
properties = {
|
||||
partial import = 0
|
||||
launchd bundle = 0
|
||||
xpc bundle = 0
|
||||
keepalive = 0
|
||||
runatload = 0
|
||||
dirty at shutdown = 0
|
||||
low priority i/o = 0
|
||||
low priority background i/o = 0
|
||||
exception handler = 0
|
||||
multiple instances = 0
|
||||
supports transactions = 1
|
||||
supports pressured exit = 1
|
||||
enter kdp before kill = 0
|
||||
wait for debugger = 0
|
||||
app = 0
|
||||
system app = 0
|
||||
inetd-compatible = 0
|
||||
inetd listener = 0
|
||||
abandon process group = 0
|
||||
one-shot = 0
|
||||
requires reap = 0
|
||||
event monitor = 0
|
||||
penalty box = 0
|
||||
pended non-demand spawn = 0
|
||||
role account = 0
|
||||
launch only once = 0
|
||||
system support = 0
|
||||
app-like = 0
|
||||
inferred program = 1
|
||||
ios home screen app = 0
|
||||
abandon coalition = 0
|
||||
extension = 0
|
||||
nano allocator = 0
|
||||
no initgroups = 0
|
||||
endpoints initialized = 1
|
||||
platform binary = 1
|
||||
disallow all lookups = 0
|
||||
}
|
||||
}
|
||||
program path = /System/Library/PrivateFrameworks/CallHistory.framework/Support/CallHistorySyncHelper
|
||||
Could not print Mach info for pid 518: 0x5
|
||||
bsd proc info = {
|
||||
pid = 518
|
||||
unique pid = 518
|
||||
ppid = 1
|
||||
pgid = 518
|
||||
status = stopped
|
||||
flags = 64-bit|session leader
|
||||
uid = 501
|
||||
svuid = 501
|
||||
ruid = 501
|
||||
gid = 501
|
||||
svgid = 501
|
||||
ruid = 501
|
||||
comm name = CallHistorySync
|
||||
long name = CallHistorySyncHelper
|
||||
controlling tty devnode = 0xffffffff
|
||||
controlling tty pgid = 0
|
||||
}
|
||||
pressured exit info = {
|
||||
dirty state tracked = 1
|
||||
dirty = 0
|
||||
pressured-exit capable = 1
|
||||
}
|
||||
jetsam priority = 0: idle
|
||||
jetsam memory limit = 6
|
||||
jetsam flags = (none)
|
||||
jetsam state = tracked,idle-exit
|
||||
entitlements = {
|
||||
"com.apple.private.ids.messaging" = (
|
||||
"com.apple.private.alloy.callhistorysync";
|
||||
);
|
||||
"com.apple.developer.icloud-services" = (
|
||||
"CloudKit";
|
||||
);
|
||||
"com.apple.application-identifier" = "CALLSYNCDB.com.apple.callhistory.sync-helper";
|
||||
"com.apple.developer.icloud-container-environment" = "production";
|
||||
"com.apple.private.aps-environment" = "production";
|
||||
"application-identifier" = "CALLSYNCDB.com.apple.callhistory.sync-helper";
|
||||
"aps-connection-initiate" = true;
|
||||
"com.apple.private.aps-connection-initiate" = true;
|
||||
"com.apple.private.ids.messaging.high-priority" = (
|
||||
"com.apple.private.alloy.callhistorysync";
|
||||
);
|
||||
"com.apple.accounts.appleaccount.fullaccess" = true;
|
||||
"aps-environment" = "production";
|
||||
"com.apple.private.tcc.allow" = (
|
||||
"kTCCServiceLiverpool";
|
||||
"kTCCServiceAddressBook";
|
||||
);
|
||||
};
|
||||
code signing info = valid
|
||||
ad-hoc signed
|
||||
get-task-allow entitlement
|
||||
installer entitlement
|
||||
require enforcement
|
||||
allowed mach-o
|
||||
platform dyld
|
||||
entitlements validated
|
||||
platform binary
|
||||
```
|
||||
Content of /System/Library/LaunchDaemons/com.apple.CallHistorySyncHelper.plist
|
||||
```
|
||||
{
|
||||
EnablePressuredExit = 1;
|
||||
EnableTransactions = 1;
|
||||
Label = "com.apple.CallHistorySyncHelper";
|
||||
LaunchEvents = {
|
||||
"com.apple.notifyd.matching" = {
|
||||
"com.apple.callhistorysync.idslaunchnotification" = {
|
||||
Notification = "com.apple.callhistorysync.idslaunchnotification";
|
||||
};
|
||||
};
|
||||
};
|
||||
MachServices = {
|
||||
"com.apple.CallHistorySyncHelper" = 1;
|
||||
"com.apple.CallHistorySyncHelper.aps" = 1;
|
||||
"com.apple.callhistory.pairedsync" = 1;
|
||||
};
|
||||
POSIXSpawnType = Adaptive;
|
||||
ProgramArguments = (
|
||||
"/System/Library/PrivateFrameworks/CallHistory.framework/Support/CallHistorySyncHelper"
|
||||
);
|
||||
UserName = mobile;
|
||||
}
|
||||
```
|
||||
Info about `CallHistorySyncHelper`
|
||||
```
|
||||
$ ls -la /System/Library/PrivateFrameworks/CallHistory.framework/Support/CallHistorySyncHelper
|
||||
-rwxr-xr-x 1 root wheel 279392 Aug 29 2016 CallHistorySyncHelper
|
||||
|
||||
$ file CallHistorySyncHelper
|
||||
Mach-O 64-bit 64-bit architecture=12 executable
|
||||
```
|
||||
|
||||
Frida REPL w/ `$ frida -U 518`
|
||||
|
||||
[Dump ios class hierarchy](https://github.com/iddoeldor/frida-snippets#dump-ios-class-hierarchy)
|
||||
```
|
||||
[iOS Device::PID::518]-> tree
|
||||
{
|
||||
"NSObject": {
|
||||
"CHLogger": {
|
||||
"ApplyLocalTransactions": {},
|
||||
"CHPairedSyncCoordinator": {},
|
||||
"CHPushConnectionDelegate": {},
|
||||
"MergeTransactions": {},
|
||||
"SignalHandler": {},
|
||||
"SyncXPCServer": {}
|
||||
},
|
||||
"CHSynchronizedLoggable": {
|
||||
"AutoSync": {},
|
||||
"CHIDSPeerDevice": {},
|
||||
"CHIDSServiceDelegate": {},
|
||||
"CloudKit": {},
|
||||
"SyncEngine": {},
|
||||
"TransactionLog": {}
|
||||
},
|
||||
"PBCodable": {
|
||||
"CHRecentCallPb": {},
|
||||
"TransactionsPb": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Tried to print `ObjC.classes.AutoSync` and the daemon shut down
|
||||
```
|
||||
PID Status Label
|
||||
- -43 com.apple.CallHistorySyncHelper
|
||||
```
|
||||
Get binary w/ Frida
|
||||
```
|
||||
cmd = Shell(['/bin/sh', '-c', "cat /System/Library/PrivateFrameworks/CallHistory.framework/Support/CallHistorySyncHelper"], None)
|
||||
cmd.exec()/push
|
||||
with open('~/CallHistorySyncHelper', 'wb+') as f:
|
||||
f.writelines(cmd.output)
|
||||
```
|
Loading…
Reference in New Issue
Block a user