Files
SnakeAppleSecurityFiles/X. NU/python/set_xpc_breaks.py

51 lines
1.9 KiB
Python

import lldb
def set_xpc_breaks(debugger, command, result, internal_dict):
"""
Set up tracing for XPC communication.
This includes breakpoints for sending/receiving messages and connection creation.
"""
target = debugger.GetSelectedTarget()
if not target:
result.PutCString("No target selected. Please attach to a process first.")
return
# List of XPC functions for setting breakpoints
send_functions = [
"xpc_connection_send_message",
"xpc_connection_send_message_with_reply",
"xpc_connection_send_message_with_reply_sync"
]
recv_function = "xpc_connection_set_event_handler"
connect_functions = [
"xpc_connection_create",
"xpc_connection_create_mach_service",
]
# Set breakpoints for XPC connection creation
for func in connect_functions:
bp = target.BreakpointCreateByName(func)
if bp.IsValid():
result.PutCString(f"Breakpoint set on {func}")
else:
result.PutCString(f"Failed to set breakpoint on {func}")
# Set breakpoints for sending functions
for func in send_functions:
bp = target.BreakpointCreateByName(func)
if bp.IsValid():
result.PutCString(f"Breakpoint set on {func}")
else:
result.PutCString(f"Failed to set breakpoint on {func}")
# Set breakpoint for receiving messages
bp_recv = target.BreakpointCreateByName(recv_function)
if bp_recv.IsValid():
result.PutCString(f"Breakpoint set on {recv_function}")
else:
result.PutCString(f"Failed to set breakpoint on {recv_function}")
def __lldb_init_module(debugger, internal_dict):
debugger.HandleCommand('command script add -f set_xpc_breaks.set_xpc_breaks set_xpc_breaks')
print("The 'set_xpc_breaks' command has been loaded. Use 'set_xpc_breaks' to set up XPC message tracing.")