
Explorateur d'appels système iOS pour IDA 9.X
Un script IDA Pro qui scanne un binaire AArch64 à la recherche d'instructions SVC, résout le numéro de syscall BSD à partir du registre X16 et présente chaque résultat dans une interface utilisateur riche et ancrable, avec navigation par occurrence de syscall et récupération en direct de la documentation man-page.
Conçu pour le reverse engineering iOS / macOS avec IDA Pro 9.x. La seule raison pour laquelle j'ai créé cela était lors du reverse engineering de plateformes iOS avec des mesures anti-altération au niveau des syscalls. J'en avais assez d'imprimer les syscalls dans la console et je voulais quelque chose de raisonnable à regarder tout en récupérant de la documentation en direct.
Ce ReadMe entier est généré par IA, de même que la plupart des parties du script. J'avais écrit la base, puis j'ai laissé Claude Opus 4.7 faire sa magie pour rassembler le tout avec une belle interface utilisateur.
SVC #0x80 et résout la configuration MOV X16, #num jusqu'à 8 instructions en arrière0x5, 5) ou nom de fonction ; filtrez également par catégorie via une liste déroulanteEntrée pour sauter à cette adresse dans IDAman 2 complète depuis man.freebsd.org dans un thread d'arrière-plan (Darwin est dérivé de BSD) ; les résultats sont mis en cache par sessionCtrl+F focalise la zone de recherche ; Entrée sur une occurrence sélectionnée y navigue| Prérequis | Version |
|---|---|
| IDA Pro | 9.x (testé sur 9.3) |
| Python | fourni avec IDA |
| PySide6 | livré avec IDA 9 |
requests | optionnel — nécessaire uniquement pour la récupération des pages man |
Fallback PyQt5 — le script fonctionne également avec le shim PyQt5 d'IDA pour les versions plus anciennes.
Pour installer requests dans l'environnement Python d'IDA, exécutez ceci dans la console Python d'IDA :
import subprocess, sys
subprocess.run([sys.executable, "-m", "pip", "install", "requests"])
syscall_ios.py n'importe où sur votre machine.Le panneau d'analyse s'ouvre automatiquement et commence l'analyse.
File → Script file… → syscall_ios.py
Ou utilisez la Commande de script d'IDA (Maj+F2) pour coller et exécuter directement.

Les couleurs reflètent la propre palette de surbrillance de désassemblage d'IDA Pro pour que le résultat semble natif.
| Catégorie | Couleur | Équivalent IDA |
|---|---|---|
| E/S fichiers | #4EC9B0 | Type / structure |
| Réseau | #569CD6 | Mot-clé |
| Mémoire | #DCDCAA | Nom de fonction |
| Processus | #CE9178 | Littéral chaîne |
| Threads | #9CDCFE | Variable |
| IPC | #C586C0 | Énumération / macro |
| Sécurité | #F44747 | Erreur / avertissement |
| Temps | #6A9955 | Commentaire |
| Divers | #858585 | — |
Export JSON produit un fichier comme :
[
{
"name": "read",
"number": 3,
"number_hex": "0x3",
"address": "0x1001a4bc",
"rva": "0x4bc",
"function": "sub_1001A0000",
"category": "File I/O"
},
...
]
La table intégrée couvre 556 syscalls de la couche BSD Darwin/XNU (classe 0x2000000), notamment :
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, bsdthread_*, …)workq_open, workq_kernreturn, kqueue_workloop_ctl, …)audit_*, __mac_*)Les Mach traps et les wrappers libsystem qui passent par une classe de trap différente ne sont pas inclus — cela couvre uniquement la classe BSD (SVC #0x80 avec X16 = 0x2000000 | num).
SVC pour un MOV X16, #imm dans les 8 instructions. Les chargements indirects (par ex. LDR X16, [...]) apparaîtront comme UNKNOWN.SLIDE en haut du fichier n'a aucun effet sur les adresses affichées — elle est conservée comme référence de commentaire pour la corrélation avec une session lldb en direct.