
مستكشف استدعاءات النظام في iOS لـ IDA 9.X
سكربت لـ IDA Pro يفحص ملفًا ثنائيًا AArch64 بحثًا عن تعليمات SVC، ويستخرج رقم استدعاء نظام BSD من المسجّل X16، ويعرض كل النتائج في واجهة مستخدم غنية قابلة للإرساء، مع إمكانية التنقل بين مواضع كل استدعاء وجلب توثيق صفحات man مباشرة.
صُمم للهندسة العكسية لتطبيقات iOS / macOS على IDA Pro 9.x. السبب الوحيد الذي دفعني لإنشائه هو أثناء الهندسة العكسية لمنصات iOS التي تتضمن إجراءات مضادة للعبث تصل حتى مستوى استدعاءات النظام. لقد مللت من طباعة استدعاءات النظام على الطرفية وأردت شيئًا مريحًا للعرض وفي الوقت نفسه يجلب التوثيق مباشرة.
ملف ReadMe هذا بالكامل من إنشاء الذكاء الاصطناعي، وكذلك معظم أجزاء السكربت. كتبت الأساس بنفسي ثم تركت Claude Opus 4.7 يقوم بسحره ليجمّع كل شيء بواجهة مستخدم جميلة.
SVC #0x80 ويستعيد إعداد MOV X16, #num حتى 8 تعليمات سابقة0x5، 5) أو اسم الدالة؛ ويمكن أيضًا التصفية حسب الفئة من قائمة منسدلةEnter للانتقال إلى ذلك العنوان في IDAman 2 كاملة من man.freebsd.org في خيط خلفي (Darwin مشتق من BSD)؛ تُخزَّن النتائج مؤقتًا لكل جلسةCtrl+F يركز على مربع البحث؛ Enter على موضع محدد ينتقل إليه| المتطلب | الإصدار |
|---|---|
| IDA Pro | 9.x (مُختبر على 9.3) |
| Python | مرفق مع IDA |
| PySide6 | يأتي مع IDA 9 |
requests | اختياري — مطلوب فقط لجلب صفحات man |
بديل PyQt5 — يعمل السكربت أيضًا مع طبقة محاكاة PyQt5 الخاصة بـ IDA للإصدارات الأقدم.
لتثبيت requests في بيئة بايثون الخاصة بـ IDA، شغّل ما يلي في وحدة تحكم بايثون الخاصة بـ IDA:
import subprocess, sys
subprocess.run([sys.executable, "-m", "pip", "install", "requests"])
syscall_ios.py إلى أي مكان على جهازك.تُفتح لوحة المحلل تلقائيًا ويبدأ الفحص.
File → Script file… → syscall_ios.py
أو استخدم أمر Script في IDA (Shift+F2) للصق وتشغيله مباشرة.

تعكس الألوان لوحة تمييز التفكيك الخاصة بـ IDA Pro نفسها ليكون المخرَج طبيعيًا.
ينتج تصدير JSON ملفًا مثل:
[
{
"name": "read",
"number": 3,
"number_hex": "0x3",
"address": "0x1001a4bc",
"rva": "0x4bc",
"function": "sub_1001A0000",
"category": "File I/O"
},
...
]
يغطي الجدول المدمج 556 استدعاء نظام من طبقة BSD في Darwin/XNU (فئة 0x2000000)، بما في ذلك:
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, , …)لا تشمل هذه التغطية مصائد Mach وطبقات الالتفاف libsystem التي تمر عبر فئة مصائد مختلفة — يغطي هذا فئة BSD فقط (SVC #0x80 مع X16 = 0x2000000 | num).
SVC بحثًا عن MOV X16, #imm ضمن 8 تعليمات. أي تحميل غير مباشر (مثل LDR X16, [...]) سيظهر كـ UNKNOWN.SLIDE في أعلى الملف على العناوين المعروضة — وهو مُبقى كمرجع تعليقي للمطابقة مع جلسة lldb مباشرة.| الفئة | اللون | المقابل في IDA |
|---|
| إدخال/إخراج الملفات | #4EC9B0 | نوع / بنية |
| الشبكة | #569CD6 | كلمة مفتاحية |
| الذاكرة | #DCDCAA | اسم دالة |
| العمليات | #CE9178 | نص حرفي |
| الخيوط | #9CDCFE | متغير |
| التواصل بين العمليات | #C586C0 | تعداد / ماكرو |
| الأمان | #F44747 | خطأ / تحذير |
| الوقت | #6A9955 | تعليق |
| متنوع | #858585 | — |
bsdthread_*workq_open, workq_kernreturn, kqueue_workloop_ctl, …)audit_*, __mac_*)