
Explorador de Syscalls de iOS para IDA 9.X
Un script de IDA Pro que escanea un binario AArch64 en busca de instrucciones SVC, resuelve el número de syscall BSD desde el registro X16 y presenta todos los resultados en una interfaz acoplable enriquecida, con navegación por ocurrencias de cada syscall y obtención de documentación man en vivo.
Diseñado para la ingeniería inversa de iOS / macOS en IDA Pro 9.x. La única razón por la que creé esto fue la ingeniería inversa de plataformas iOS con medidas anti-manipulación hasta el nivel de las syscalls. Estaba aburrido de imprimir las syscalls en la consola y quería algo agradable a la vista que, al mismo tiempo, pudiera obtener documentación en vivo.
Todo este ReadMe está generado por IA, al igual que la mayor parte del script. Yo escribí la base y luego dejé que Claude Opus 4.7 hiciera su magia para unirlo todo con una hermosa interfaz de usuario.
SVC #0x80 y resuelve la configuración MOV X16, #num hasta 8 instrucciones atrás0x5, 5) o nombre de función; también filtra por categoría desde un menú desplegableEnter para saltar a esa dirección en IDAman 2 desde man.freebsd.org en un hilo en segundo plano (Darwin deriva de BSD); los resultados se guardan en caché por sesiónCtrl+F enfoca el cuadro de búsqueda; Enter sobre una ocurrencia seleccionada navega hasta ella| Requisito | Versión |
|---|---|
| IDA Pro | 9.x (probado en 9.3) |
| Python | incluido con IDA |
| PySide6 | se incluye con IDA 9 |
requests | opcional — solo necesario para obtener páginas man |
Alternativa PyQt5 — el script también funciona con el shim PyQt5 de IDA para versiones anteriores.
Para instalar requests en el entorno Python de IDA, ejecuta esto en la consola Python de IDA:
import subprocess, sys
subprocess.run([sys.executable, "-m", "pip", "install", "requests"])
syscall_ios.py en cualquier lugar de tu máquina.El panel del analizador se abre automáticamente y comienza el escaneo.
File → Script file… → syscall_ios.py
O usa el Script command de IDA (Shift+F2) para pegar y ejecutar directamente.

Los colores imitan la paleta de resaltado de desensamblado de IDA Pro para que el resultado se sienta nativo.
Exportar JSON produce un archivo como este:
[
{
"name": "read",
"number": 3,
"number_hex": "0x3",
"address": "0x1001a4bc",
"rva": "0x4bc",
"function": "sub_1001A0000",
"category": "File I/O"
},
...
]
La tabla integrada cubre 556 syscalls de la capa BSD de Darwin/XNU (clase 0x2000000), incluyendo:
read, write, open, mmap, socket, …)csops, guarded_open_np, memorystatus_control, kevent_qos, …)pid_hibernate, abort_with_payload, necp_*, os_fault_with_payload, …)psynch_mutexwait, psynch_cvwait, , …)Las trampas Mach y los envoltorios de libsystem que pasan por una clase de trampa diferente no están incluidos — esto cubre únicamente la clase BSD (SVC #0x80 con X16 = 0x2000000 | num).
SVC en busca de un MOV X16, #imm dentro de 8 instrucciones. Las cargas indirectas (p. ej. LDR X16, [...]) se mostrarán como UNKNOWN.SLIDE al principio del archivo no tiene efecto sobre las direcciones mostradas — se mantiene como referencia de comentario para correlacionar con una sesión de lldb en vivo.| Categoría | Color | Equivalente en IDA |
|---|
| File I/O | #4EC9B0 | Tipo / struct |
| Network | #569CD6 | Palabra clave |
| Memory | #DCDCAA | Nombre de función |
| Process | #CE9178 | Literal de cadena |
| Threading | #9CDCFE | Variable |
| IPC | #C586C0 | Enum / macro |
| Security | #F44747 | Error / advertencia |
| Time | #6A9955 | Comentario |
| Misc | #858585 | — |
bsdthread_*workq_open, workq_kernreturn, kqueue_workloop_ctl, …)audit_*, __mac_*)