
IDA 9.X용 iOS 시스템 콜 탐색기
AArch64 바이너리에서 SVC 명령어를 스캔하고, X16 레지스터에서 BSD 시스템 콜 번호를 해석하며, 시스템 콜별 발생 위치 탐색과 실시간 man-page 문서 가져오기 기능을 갖춘 풍부한 도킹 가능 UI로 모든 결과를 표시하는 IDA Pro 스크립트입니다.
IDA Pro 9.x에서 iOS / macOS 리버스 엔지니어링을 위해 제작되었습니다. 이 스크립트를 만든 유일한 이유는 iOS 플랫폼을 리버스 엔지니어링할 때 시스템 콜 수준까지 내려가는 안티-탬퍼(Anti-Tamper) 대책을 분석하기 위해서였습니다. 시스템 콜을 콘솔에 출력하는 방식에 질려서, 보기에 합리적이면서 동시에 실시간 문서를 가져올 수 있는 무언가를 원했습니다.
이 ReadMe 전체는 AI로 생성되었으며, 스크립트의 대부분도 마찬가지입니다. 제가 기본 틀을 작성한 다음 Claude Opus 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 (9.3에서 테스트됨) |
| Python | IDA와 함께 번들 |
| PySide6 | IDA 9에 포함 |
requests | 선택 사항 — man-page 가져오기에만 필요 |
PyQt5 폴백 — 이 스크립트는 구버전용 IDA의 PyQt5 shim에서도 작동합니다.
requests를 IDA의 Python 환경에 설치하려면 IDA의 Python 콘솔에서 다음을 실행하세요:
import subprocess, sys
subprocess.run([sys.executable, "-m", "pip", "install", "requests"])
syscall_ios.py를 컴퓨터의 아무 곳에나 복사합니다.분석기 패널이 자동으로 열리고 스캔을 시작합니다.
File → Script file… → syscall_ios.py
또는 IDA의 Script command(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개 시스템 콜을 다루며, 다음을 포함합니다:
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 클래스(X16 = 0x2000000 | num인 SVC #0x80)만 다룹니다.
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_*)