
iOS Syscall Explorer for IDA 9.X
एक IDA Pro स्क्रिप्ट जो AArch64 बाइनरी को SVC निर्देशों के लिए स्कैन करती है, X16 रजिस्टर से BSD syscall संख्या को हल करती है, और प्रत्येक परिणाम को एक समृद्ध डॉकेबल UI में प्रस्तुत करती है, जिसमें प्रति-सिस्कॉल घटना नेविगेशन और लाइव मैन-पेज दस्तावेज़ीकरण प्राप्त करना शामिल है।
iOS / macOS रिवर्स इंजीनियरिंग के लिए IDA Pro 9.x पर बनाया गया। इसके निर्माण का एकमात्र उद्देश्य था जब मैं iOS प्लेटफार्मों को रिवर्स इंजीनियर कर रहा था जिनमें syscalls तक एंटी-टैम्पर उपाय थे। मैं syscalls को कंसोल पर प्रिंट करने से ऊब गया था और कुछ उचित चाहता था जिसे देखा जा सके और साथ ही लाइव दस्तावेज़ीकरण प्राप्त कर सके।
यह संपूर्ण ReadMe AI द्वारा उत्पन्न है, स्क्रिप्ट के अधिकांश भागों के साथ भी ऐसा ही है। मैंने इसका आधार लिखा था और फिर क्लॉड ओपस 4.7 को अपना जादू करने दिया ताकि एक सुंदर यूज़र-इंटरफ़ेस के साथ सब कुछ एक साथ लाया जा सके।
SVC #0x80 निर्देश ढूंढता है और 8 निर्देश पीछे तक MOV X16, #num सेटअप को हल करता है0x5, 5), या फ़ंक्शन नाम से खोजें; ड्रॉपडाउन से श्रेणी द्वारा भी फ़िल्टर करेंEnter दबाएं IDA में उस पते पर जाने के लिएman.freebsd.org से पूर्ण man 2 पृष्ठ प्राप्त करता है (Darwin BSD-व्युत्पन्न है); परिणाम प्रति सत्र कैश किए जाते हैंCtrl+F खोज बॉक्स को फोकस करता है; चयनित घटना पर Enter उस पर नेविगेट करता है| आवश्यकता | संस्करण |
|---|---|
| IDA Pro | 9.x (tested on 9.3) |
| Python | IDA के साथ बंडल |
| PySide6 | IDA 9 के साथ आता है |
requests | वैकल्पिक — केवल मैन-पेज प्राप्त करने के लिए आवश्यक |
PyQt5 फ़ॉलबैक — स्क्रिप्ट पुराने संस्करणों के लिए IDA के PyQt5 शिम के साथ भी काम करती है।
IDA के Python वातावरण में requests स्थापित करने के लिए, IDA के Python कंसोल में यह चलाएँ:
import subprocess, sys
subprocess.run([sys.executable, "-m", "pip", "install", "requests"])
syscall_ios.py को अपनी मशीन पर कहीं भी कॉपी करें।विश्लेषक पैनल स्वचालित रूप से खुलता है और स्कैनिंग शुरू करता है।
File → Script file… → syscall_ios.py
या IDA के स्क्रिप्ट कमांड (Shift+F2) का उपयोग करके सीधे पेस्ट और चलाएँ।

रंग IDA Pro के स्वयं के डिसअसेंबली हाइलाइट पैलेट को दर्पण करते हैं ताकि आउटपुट मूल लगे।
JSON निर्यात एक फ़ाइल उत्पन्न करता है जैसे:
[
{
"name": "read",
"number": 3,
"number_hex": "0x3",
"address": "0x1001a4bc",
"rva": "0x4bc",
"function": "sub_1001A0000",
"category": "File I/O"
},
...
]
एम्बेडेड तालिका Darwin/XNU BSD परत (0x2000000 वर्ग) से 556 syscalls को कवर करती है, जिनमें शामिल हैं:
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 निर्देश से 8 निर्देशों के भीतर MOV X16, #imm के लिए पीछे की ओर स्कैन करके हल किया जाता है। अप्रत्यक्ष लोड (जैसे LDR X16, [...]) को UNKNOWN के रूप में दिखाया जाएगा।SLIDE स्थिरांक का प्रदर्शित पतों पर कोई प्रभाव नहीं है — इसे लाइव lldb सत्र के साथ सहसंबंधित करने के लिए एक टिप्पणी संदर्भ के रूप में रखा गया है।| श्रेणी | रंग | IDA समतुल्य |
|---|
| फ़ाइल I/O | #4EC9B0 | प्रकार / संरचना |
| नेटवर्क | #569CD6 | कीवर्ड |
| मेमोरी | #DCDCAA | फ़ंक्शन नाम |
| प्रोसेस | #CE9178 | स्ट्रिंग लिटरल |
| थ्रेडिंग | #9CDCFE | चर |
| IPC | #C586C0 | एनम / मैक्रो |
| सुरक्षा | #F44747 | त्रुटि / चेतावनी |
| समय | #6A9955 | टिप्पणी |
| विविध | #858585 | — |
bsdthread_*workq_open, workq_kernreturn, kqueue_workloop_ctl, …)audit_*, __mac_*)