macOS XPC

Support HackTricks

Basic Information

XPC, рдЬрд┐рд╕рдХрд╛ рдорддрд▓рдм XNU (macOS рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдХрд░реНрдиреЗрд▓) рдЗрдВрдЯрд░-рдкреНрд░реЛрд╕реЗрд╕ рд╕рдВрдЪрд╛рд░ рд╣реИ, macOS рдФрд░ iOS рдкрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдврд╛рдВрдЪрд╛ рд╣реИред XPC рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕реБрд░рдХреНрд╖рд┐рдд, рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдПрдкреНрдкрд▓ рдХреЗ рд╕реБрд░рдХреНрд╖рд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдЬреЛ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░-рд╕реЗрдкрд░реЗрдЯреЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд╣рд╛рдБ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХреЗрд╡рд▓ рдЙрдиреНрд╣реАрдВ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЪрд▓рддрд╛ рд╣реИ рдЬрд┐рдирдХреА рдЙрд╕реЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдп рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдПрдХ рд╕рдордЭреМрддрд╛ рдХрд┐рдП рдЧрдП рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рд╕рдВрднрд╛рд╡рд┐рдд рдиреБрдХрд╕рд╛рди рдХреЛ рд╕реАрдорд┐рдд рдХрд░рддрд╛ рд╣реИред

XPC рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЗрдВрдЯрд░-рдкреНрд░реЛрд╕реЗрд╕ рд╕рдВрдЪрд╛рд░ (IPC) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рд╕реЗрдЯ рд╣реИ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдПрдХ рд╣реА рдкреНрд░рдгрд╛рд▓реА рдкрд░ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВ, рдбреЗрдЯрд╛ рдХреЛ рдЖрдЧреЗ-рдкреАрдЫреЗ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдПред

XPC рдХреЗ рдкреНрд░рд╛рдердорд┐рдХ рд▓рд╛рднреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

  1. рд╕реБрд░рдХреНрд╖рд╛: рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдХрд╛рд░реНрдп рдХреЛ рдЕрд▓рдЧ рдХрд░рдХреЗ, рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХреЗрд╡рд▓ рд╡рд╣реА рдЕрдиреБрдорддрд┐рдпрд╛рдБ рджреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ рдЬрд┐рдирдХреА рдЙрд╕реЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрджрд┐ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдордЭреМрддрд╛ рдХрд░ рд▓реА рдЬрд╛рддреА рд╣реИ, рддреЛ рдЙрд╕рдХреЗ рдкрд╛рд╕ рдиреБрдХрд╕рд╛рди рдХрд░рдиреЗ рдХреА рд╕реАрдорд┐рдд рдХреНрд╖рдорддрд╛ рд╣реЛрддреА рд╣реИред

  2. рд╕реНрдерд┐рд░рддрд╛: XPC рдХреНрд░реИрд╢ рдХреЛ рдЙрд╕ рдШрдЯрдХ рддрдХ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдБ рд╡реЗ рд╣реЛрддреЗ рд╣реИрдВред рдпрджрд┐ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреНрд░реИрд╢ рд╣реЛрддреА рд╣реИ, рддреЛ рдЗрд╕реЗ рдмрд┐рдирд╛ рдмрд╛рдХреА рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдП рдкреБрдирдГ рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

  3. рдкреНрд░рджрд░реНрд╢рди: XPC рдЖрд╕рд╛рди рд╕рдорд╡рд░реНрддреАрддрд╛ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдПрдХ рд╕рд╛рде рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдПрдХрдорд╛рддреНрд░ рдиреБрдХрд╕рд╛рди рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдЕрд▓рдЧ рдХрд░рдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ XPC рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрдЪрд╛рд░рд┐рдд рдХрд░рдирд╛ рдХрдо рдкреНрд░рднрд╛рд╡реА рд╣реИред рд▓реЗрдХрд┐рди рдЖрдЬ рдХреА рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рдпрд╣ рд▓рдЧрднрдЧ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ рдФрд░ рд▓рд╛рдн рдмреЗрд╣рддрд░ рд╣реИрдВред

Application Specific XPC services

рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ XPC рдШрдЯрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЕрдВрджрд░ рд╣реА рд╣реЛрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Safari рдореЗрдВ рдЖрдк рдЗрдиреНрд╣реЗрдВ /Applications/Safari.app/Contents/XPCServices рдореЗрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрдирдХреЗ рдкрд╛рд╕ .xpc рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣реЛрддрд╛ рд╣реИ (рдЬреИрд╕реЗ com.apple.Safari.SandboxBroker.xpc) рдФрд░ рдпреЗ рдореБрдЦреНрдп рдмрд╛рдЗрдирд░реА рдХреЗ рд╕рд╛рде рдмрдВрдбрд▓ рд╣реЛрддреЗ рд╣реИрдВ: /Applications/Safari.app/Contents/XPCServices/com.apple.Safari.SandboxBroker.xpc/Contents/MacOS/com.apple.Safari.SandboxBroker рдФрд░ рдПрдХ Info.plist: /Applications/Safari.app/Contents/XPCServices/com.apple.Safari.SandboxBroker.xpc/Contents/Info.plist

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╕реЛрдЪ рд░рд╣реЗ рд╣реЛрдВрдЧреЗ, рдПрдХ XPC рдШрдЯрдХ рдХреЗ рдкрд╛рд╕ рдЕрдиреНрдп XPC рдШрдЯрдХреЛрдВ рдпрд╛ рдореБрдЦреНрдп рдРрдк рдмрд╛рдЗрдирд░реА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдЕрдзрд┐рдХрд╛рд░ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рд╣реЛрдВрдЧреАред рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдпрджрд┐ рдПрдХ XPC рд╕реЗрд╡рд╛ рдХреЛ JoinExistingSession рдЗрд╕рдХреЗ Info.plist рдлрд╝рд╛рдЗрд▓ рдореЗрдВ тАЬTrueтАЭ рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, XPC рд╕реЗрд╡рд╛ рдЙрд╕ рд╕реБрд░рдХреНрд╖рд╛ рд╕рддреНрд░ рдореЗрдВ рдЪрд▓реЗрдЧреА рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдиреЗ рдЗрд╕реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ред

XPC рд╕реЗрд╡рд╛рдПрдБ launchd рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рд╢реБрд░реВ рдХреА рдЬрд╛рддреА рд╣реИрдВ рдФрд░ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкреВрд░реНрдг рд╣реЛрдиреЗ рдкрд░ рд╕рд┐рд╕реНрдЯрдо рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдВрдж рдХрд░ рджреА рдЬрд╛рддреА рд╣реИрдВред рдПрдкреНрд▓рд┐рдХреЗрд╢рди-рд╡рд┐рд╢рд┐рд╖реНрдЯ XPC рдШрдЯрдХ рдХреЗрд╡рд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕рдВрднрд╛рд╡рд┐рдд рдХрдордЬреЛрд░рд┐рдпреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЬреЛрдЦрд┐рдо рдХреЛ рдХрдо рдХрд░рддреЗ рд╣реИрдВред

System Wide XPC services

рд╕рд┐рд╕реНрдЯрдо-рд╡реНрдпрд╛рдкреА XPC рд╕реЗрд╡рд╛рдПрдБ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕реБрд▓рдн рд╣реИрдВред рдпреЗ рд╕реЗрд╡рд╛рдПрдБ, рдЪрд╛рд╣реЗ launchd рдпрд╛ Mach-рдкреНрд░рдХрд╛рд░ рдХреА рд╣реЛрдВ, рдЙрдиреНрд╣реЗрдВ plist рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛрддреА рд╣реИрдВ рдЬреИрд╕реЗ /System/Library/LaunchDaemons, /Library/LaunchDaemons, /System/Library/LaunchAgents, рдпрд╛ /Library/LaunchAgentsред

рдЗрди plist рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдПрдХ рдХреБрдВрдЬреА рд╣реЛрдЧреА рдЬрд┐рд╕реЗ MachServices рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реЗрд╡рд╛ рдХрд╛ рдирд╛рдо рд╣реЛрдЧрд╛, рдФрд░ рдПрдХ рдХреБрдВрдЬреА рд╣реЛрдЧреА рдЬрд┐рд╕реЗ Program рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдмрд╛рдЗрдирд░реА рдХрд╛ рдкрде рд╣реЛрдЧрд╛:

cat /Library/LaunchDaemons/com.jamf.management.daemon.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Program</key>
<string>/Library/Application Support/JAMF/Jamf.app/Contents/MacOS/JamfDaemon.app/Contents/MacOS/JamfDaemon</string>
<key>AbandonProcessGroup</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>Label</key>
<string>com.jamf.management.daemon</string>
<key>MachServices</key>
<dict>
<key>com.jamf.management.daemon.aad</key>
<true/>
<key>com.jamf.management.daemon.agent</key>
<true/>
<key>com.jamf.management.daemon.binary</key>
<true/>
<key>com.jamf.management.daemon.selfservice</key>
<true/>
<key>com.jamf.management.daemon.service</key>
<true/>
</dict>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>

The ones in LaunchDameons root рджреНрд╡рд╛рд░рд╛ рдЪрд▓рд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдПрдХ рдЕрдкреНрд░рд┐рд╡рд┐рд▓реЗрдЬреНрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЗ рд╕рд╛рде рдмрд╛рдд рдХрд░ рд╕рдХрддреА рд╣реИ, рддреЛ рдпрд╣ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдмрдврд╝рд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддреА рд╣реИред

XPC рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕

  • xpc_object_t

рд╣рд░ XPC рд╕рдВрджреЗрд╢ рдПрдХ рдбрд┐рдХреНрд╢рдирд░реА рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ рдЬреЛ рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬреЗрд╢рди рдФрд░ рдбреАрд╕рд┐рд░рд┐рдпрд▓рд╛рдЗрдЬреЗрд╢рди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, libxpc.dylib рдЕрдзрд┐рдХрд╛рдВрд╢ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реЛред C API рдореЗрдВ рд╣рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ xpc_object_t рд╣реИ (рдФрд░ рдЗрд╕рдХрд╛ рдкреНрд░рдХрд╛рд░ xpc_get_type(object) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд╛рдВрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдлрд╝рдВрдХреНрд╢рди xpc_copy_description(object) рдХрд╛ рдЙрдкрдпреЛрдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдбрд┐рдмрдЧрд┐рдВрдЧ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдХреБрдЫ рд╡рд┐рдзрд┐рдпрд╛рдБ рднреА рд╣реЛрддреА рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ xpc_<object>_copy, xpc_<object>_equal, xpc_<object>_hash, xpc_<object>_serialize, xpc_<object>_deserialize...

xpc_object_t рдХреЛ xpc_<objetType>_create рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ _xpc_base_create(Class, Size) рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдБ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдХреНрд▓рд╛рд╕ рдХрд╛ рдкреНрд░рдХрд╛рд░ (рдПрдХ XPC_TYPE_* рдореЗрдВ рд╕реЗ) рдФрд░ рдЗрд╕рдХрд╛ рдЖрдХрд╛рд░ (рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд 40B рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдЖрдХрд╛рд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛) рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдбреЗрдЯрд╛ 40B рдХреЗ рдСрдлрд╕реЗрдЯ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, xpc_<objectType>_t рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ xpc_object_t рдХрд╛ рдЙрдкрд╡рд░реНрдЧ рд╣реИ рдЬреЛ os_object_t* рдХрд╛ рдЙрдкрд╡рд░реНрдЧ рд╣реЛрдЧрд╛ред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдбреЗрд╡рд▓рдкрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ xpc_dictionary_[get/set]_<objectType> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдХреБрдВрдЬреА рдХреЗ рдкреНрд░рдХрд╛рд░ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рди рдХреЛ рдкреНрд░рд╛рдкреНрдд рдпрд╛ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред

  • xpc_pipe

рдПрдХ xpc_pipe рдПрдХ FIFO рдкрд╛рдЗрдк рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреА рд╣реИрдВ (рд╕рдВрд╡рд╛рдж рдореЗрдВ Mach рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИ)ред рдПрдХ XPC рд╕рд░реНрд╡рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП xpc_pipe_create() рдпрд╛ xpc_pipe_create_from_port() рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдЗрд╕реЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ Mach рдкреЛрд░реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдлрд┐рд░, рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП xpc_pipe_receive рдФрд░ xpc_pipe_try_receive рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ xpc_pipe рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ xpc_object_t рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЗрд╕рдХреЗ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рджреЛ Mach рдкреЛрд░реНрдЯ рдФрд░ рдирд╛рдо (рдпрджрд┐ рдХреЛрдИ рд╣реЛ) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИред рдирд╛рдо, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреЗрдорди secinitd рдЕрдкрдиреЗ plist /System/Library/LaunchDaemons/com.apple.secinitd.plist рдореЗрдВ рдкрд╛рдЗрдк рдХреЛ com.apple.secinitd рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред

рдПрдХ xpc_pipe рдХрд╛ рдЙрджрд╛рд╣рд░рдг bootstrap pipe рд╣реИ рдЬреЛ launchd рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ Mach рдкреЛрд░реНрдЯ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

  • NSXPC*

рдпреЗ Objective-C рдЙрдЪреНрдЪ рд╕реНрддрд░ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИрдВ рдЬреЛ XPC рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХрд╛ рдЕрдореВрд░реНрддрдХрд░рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ DTrace рдХреЗ рд╕рд╛рде рдбрд┐рдмрдЧ рдХрд░рдирд╛ рдкрд┐рдЫрд▓реЗ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИред

  • GCD Queues

XPC рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП GCD рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдпрд╣ рдХреБрдЫ рдбрд┐рд╕реНрдкреИрдЪ рдХрддрд╛рд░реЗрдВ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ xpc.transactionq, xpc.io, xpc-events.add-listenerq, xpc.service-instance...

XPC рд╕реЗрд╡рд╛рдПрдБ

рдпреЗ .xpc рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд╛рд▓реЗ рдмрдВрдбрд▓ рд╣реИрдВ рдЬреЛ рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ XPCServices рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдЕрдВрджрд░ рд╕реНрдерд┐рдд рд╣реИрдВ рдФрд░ Info.plist рдореЗрдВ рдЙрдирдХреЗ рдкрд╛рд╕ CFBundlePackageType XPC! рдкрд░ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЕрдиреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреБрдВрдЬреА рд╣реЛрддреА рд╣реИрдВ рдЬреИрд╕реЗ ServiceType рдЬреЛ Application, User, System рдпрд╛ _SandboxProfile рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬреЛ рдПрдХ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИ рдпрд╛ _AllowedClients рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рдЕрдзрд┐рдХрд╛рд░ рдпрд╛ ID рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИ рдЬреЛ рд╕реЗрд╡рд╛ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпреЗ рдФрд░ рдЕрдиреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рдХрд▓реНрдк рд╕реЗрд╡рд╛ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╕рдордп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдВрдЧреЗред

рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░рдирд╛

рдРрдк xpc_connection_create_mach_service рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ XPC рд╕реЗрд╡рд╛ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ launchd рдбреЗрдорди рдХреЛ рдвреВрдВрдврддрд╛ рд╣реИ рдФрд░ xpcproxy рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред xpcproxy рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХреА рдЧрдИ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП FDs рдФрд░ Mach рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде рд╕реЗрд╡рд╛ рдХреЛ рд╕реНрдкреЙрди рдХрд░рддрд╛ рд╣реИред

XPC рд╕реЗрд╡рд╛ рдХреА рдЦреЛрдЬ рдХреА рдЧрддрд┐ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдХреИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

xpcproxy рдХреА рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЯреНрд░реЗрд╕ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ:

supraudit S -C -o /tmp/output /dev/auditpipe

The XPC рд▓рд╛рдЗрдмреНрд░реЗрд░реА kdebug рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ рддрд╛рдХрд┐ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд▓реЙрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдЬреЛ xpc_ktrace_pid0 рдФрд░ xpc_ktrace_pid1 рдХреЛ рдХреЙрд▓ рдХрд░рддреА рд╣реИрдВред рдЬреЛ рдХреЛрдб рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рд╡реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рдирд╣реАрдВ рд╣реИрдВ рдЗрд╕рд▓рд┐рдП рдЗрдиреНрд╣реЗрдВ /usr/share/misc/trace.codes рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЗрдирдХреЗ рдкрд╛рд╕ 0x29 рдЙрдкрд╕рд░реНрдЧ рд╣реИ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реИ 0x29000004: XPC_serializer_packред рдЙрдкрдХрд░рдг xpcproxy рдЙрдкрд╕рд░реНрдЧ 0x22 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: 0x2200001c: xpcproxy:will_do_preexecред

XPC рдЗрд╡реЗрдВрдЯ рд╕рдВрджреЗрд╢

рдРрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рднрд┐рдиреНрди рдЗрд╡реЗрдВрдЯ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рджрд╕реНрдпрддрд╛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдРрд╕реЗ рдЗрд╡реЗрдВрдЯ рд╣реЛрдиреЗ рдкрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдЗрди рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрдЕрдк launchd plist рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдкрд┐рдЫрд▓реА рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛрддреА рд╣реИрдВ рдФрд░ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд LaunchEvent рдХреБрдВрдЬреА рд╣реЛрддреА рд╣реИред

XPC рдХрдиреЗрдХреНрдЯрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЬрд╛рдВрдЪ

рдЬрдм рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ XPC рдХрдиреЗрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреА рд╣реИ, рддреЛ XPC рд╕реЗрд╡рд╛ рдХреЛ рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдЙрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред рдпрд╣рд╛рдБ рдЗрд╕реЗ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп pitfalls рд╣реИрдВ:

macOS XPC Connecting Process Check

XPC рдкреНрд░рд╛рдзрд┐рдХрд░рдг

Apple рдРрдкреНрд╕ рдХреЛ рдХреБрдЫ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рднреА рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдкрд╛рд╕ рдпреЗ рд╣реИрдВ рддреЛ рдЗрд╕реЗ XPC рд╕реЗрд╡рд╛ рд╕реЗ рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реЛрдЧреА:

macOS XPC Authorization

XPC рд╕реНрдирд┐рдлрд░

XPC рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕реНрдирд┐рдлрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк xpcspy рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ Frida рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

# Install
pip3 install xpcspy
pip3 install xpcspy --no-deps # To not make xpcspy install Frida 15 and downgrade your Frida installation

# Start sniffing
xpcspy -U -r -W <bundle-id>
## Using filters (i: for input, o: for output)
xpcspy -U <prog-name> -t 'i:com.apple.*' -t 'o:com.apple.*' -r

рдПрдХ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдЙрдкрдХрд░рдг рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рд╡рд╣ рд╣реИ XPoCe2.

XPC рд╕рдВрдЪрд╛рд░ C рдХреЛрдб рдЙрджрд╛рд╣рд░рдг

// gcc xpc_server.c -o xpc_server

#include <xpc/xpc.h>

static void handle_event(xpc_object_t event) {
if (xpc_get_type(event) == XPC_TYPE_DICTIONARY) {
// Print received message
const char* received_message = xpc_dictionary_get_string(event, "message");
printf("Received message: %s\n", received_message);

// Create a response dictionary
xpc_object_t response = xpc_dictionary_create(NULL, NULL, 0);
xpc_dictionary_set_string(response, "received", "received");

// Send response
xpc_connection_t remote = xpc_dictionary_get_remote_connection(event);
xpc_connection_send_message(remote, response);

// Clean up
xpc_release(response);
}
}

static void handle_connection(xpc_connection_t connection) {
xpc_connection_set_event_handler(connection, ^(xpc_object_t event) {
handle_event(event);
});
xpc_connection_resume(connection);
}

int main(int argc, const char *argv[]) {
xpc_connection_t service = xpc_connection_create_mach_service("xyz.hacktricks.service",
dispatch_get_main_queue(),
XPC_CONNECTION_MACH_SERVICE_LISTENER);
if (!service) {
fprintf(stderr, "Failed to create service.\n");
exit(EXIT_FAILURE);
}

xpc_connection_set_event_handler(service, ^(xpc_object_t event) {
xpc_type_t type = xpc_get_type(event);
if (type == XPC_TYPE_CONNECTION) {
handle_connection(event);
}
});

xpc_connection_resume(service);
dispatch_main();

return 0;
}
# Compile the server & client
gcc xpc_server.c -o xpc_server
gcc xpc_client.c -o xpc_client

# Save server on it's location
cp xpc_server /tmp

# Load daemon
sudo cp xyz.hacktricks.service.plist /Library/LaunchDaemons
sudo launchctl load /Library/LaunchDaemons/xyz.hacktricks.service.plist

# Call client
./xpc_client

# Clean
sudo launchctl unload /Library/LaunchDaemons/xyz.hacktricks.service.plist
sudo rm /Library/LaunchDaemons/xyz.hacktricks.service.plist /tmp/xpc_server

XPC рд╕рдВрдЪрд╛рд░ рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рдХреЛрдб рдЙрджрд╛рд╣рд░рдг

// gcc -framework Foundation oc_xpc_server.m -o oc_xpc_server
#include <Foundation/Foundation.h>

@protocol MyXPCProtocol
- (void)sayHello:(NSString *)some_string withReply:(void (^)(NSString *))reply;
@end

@interface MyXPCObject : NSObject <MyXPCProtocol>
@end


@implementation MyXPCObject
- (void)sayHello:(NSString *)some_string withReply:(void (^)(NSString *))reply {
NSLog(@"Received message: %@", some_string);
NSString *response = @"Received";
reply(response);
}
@end

@interface MyDelegate : NSObject <NSXPCListenerDelegate>
@end


@implementation MyDelegate

- (BOOL)listener:(NSXPCListener *)listener shouldAcceptNewConnection:(NSXPCConnection *)newConnection {
newConnection.exportedInterface = [NSXPCInterface interfaceWithProtocol:@protocol(MyXPCProtocol)];

MyXPCObject *my_object = [MyXPCObject new];

newConnection.exportedObject = my_object;

[newConnection resume];
return YES;
}
@end

int main(void) {

NSXPCListener *listener = [[NSXPCListener alloc] initWithMachServiceName:@"xyz.hacktricks.svcoc"];

id <NSXPCListenerDelegate> delegate = [MyDelegate new];
listener.delegate = delegate;
[listener resume];

sleep(10); // Fake something is done and then it ends
}
# Compile the server & client
gcc -framework Foundation oc_xpc_server.m -o oc_xpc_server
gcc -framework Foundation oc_xpc_client.m -o oc_xpc_client

# Save server on it's location
cp oc_xpc_server /tmp

# Load daemon
sudo cp xyz.hacktricks.svcoc.plist /Library/LaunchDaemons
sudo launchctl load /Library/LaunchDaemons/xyz.hacktricks.svcoc.plist

# Call client
./oc_xpc_client

# Clean
sudo launchctl unload /Library/LaunchDaemons/xyz.hacktricks.svcoc.plist
sudo rm /Library/LaunchDaemons/xyz.hacktricks.svcoc.plist /tmp/oc_xpc_server

рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдХ Dylb рдХреЛрдб рдХреЗ рдЕрдВрджрд░

// gcc -dynamiclib -framework Foundation oc_xpc_client.m -o oc_xpc_client.dylib
// gcc injection example:
// DYLD_INSERT_LIBRARIES=oc_xpc_client.dylib /path/to/vuln/bin

#import <Foundation/Foundation.h>

@protocol MyXPCProtocol
- (void)sayHello:(NSString *)some_string withReply:(void (^)(NSString *))reply;
@end

__attribute__((constructor))
static void customConstructor(int argc, const char **argv)
{
NSString*  _serviceName = @"xyz.hacktricks.svcoc";

NSXPCConnection* _agentConnection = [[NSXPCConnection alloc] initWithMachServiceName:_serviceName options:4096];

[_agentConnection setRemoteObjectInterface:[NSXPCInterface interfaceWithProtocol:@protocol(MyXPCProtocol)]];

[_agentConnection resume];

[[_agentConnection remoteObjectProxyWithErrorHandler:^(NSError* error) {
(void)error;
NSLog(@"Connection Failure");
}] sayHello:@"Hello, Server!" withReply:^(NSString *response) {
NSLog(@"Received response: %@", response);
}    ];
NSLog(@"Done!");

return;
}

Remote XPC

рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ RemoteXPC.framework (рдЬреЛ libxpc рд╕реЗ рд╣реИ) рд╡рд┐рднрд┐рдиреНрди рд╣реЛрд╕реНрдЯреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ XPC рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдЬреЛ рд╕реЗрд╡рд╛рдПрдБ рджреВрд░рд╕реНрде XPC рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИрдВ, рдЙрдирдХреЗ plist рдореЗрдВ рдХреБрдВрдЬреА UsesRemoteXPC рд╣реЛрдЧреА рдЬреИрд╕реЗ рдХрд┐ /System/Library/LaunchDaemons/com.apple.SubmitDiagInfo.plist рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╕реЗрд╡рд╛ launchd рдХреЗ рд╕рд╛рде рдкрдВрдЬреАрдХреГрдд рд╣реЛрдЧреА, рдпрд╣ UserEventAgent рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкреНрд▓рдЧрдЗрдиреНрд╕ com.apple.remoted.plugin рдФрд░ com.apple.remoteservicediscovery.events.plugin рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, RemoteServiceDiscovery.framework com.apple.remoted.plugin рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ get_device, get_unique_device, connect...

рдПрдХ рдмрд╛рд░ рдЬрдм рдХрдиреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕реЗрд╡рд╛ рдХрд╛ рд╕реЙрдХреЗрдЯ fd рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ remote_xpc_connection_* рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред

рдпрд╣ CLI рдЯреВрд▓ /usr/libexec/remotectl рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреВрд░рд╕реНрде рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

/usr/libexec/remotectl list # Get bridge devices
/usr/libexec/remotectl show ...# Get device properties and services
/usr/libexec/remotectl dumpstate # Like dump withuot indicateing a servie
/usr/libexec/remotectl [netcat|relay] ... # Expose a service in a port
...

BridgeOS рдФрд░ рд╣реЛрд╕реНрдЯ рдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд░ рдПрдХ рд╕рдорд░реНрдкрд┐рдд IPv6 рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддрд╛ рд╣реИред MultiverseSupport.framework рд╕реЙрдХреЗрдЯ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рдирдХрд╛ fd рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрди рд╕рдВрдЪрд╛рд░реЛрдВ рдХреЛ netstat, nettop рдпрд╛ рдУрдкрди-рд╕реЛрд░реНрд╕ рд╡рд┐рдХрд▓реНрдк netbottom рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

Support HackTricks

Last updated