
ida_kernelcache 위에서 C++ 지원을 강화하기 위한 IDAPython 모듈
iOS 커널캐시를 훨씬 더 편리하게 리버스 엔지니어링할 수 있는 IDAPython 모듈입니다.
iOS 커널캐시의 상당 부분은 C++로 작성되어 있으며, 이는 명시적인 직접 호출보다는 많은 가상 테이블 역참조를 사용하는 복잡한 바이너리 코드로 컴파일됩니다. ida_kcpp는 ida_kernelcache의 클래스 계층 구조 재구성 기능을 활용합니다. IDB를 매핑하고 바이너리 함수와 원본 가상 메서드를 동기화합니다. 이를 통해 C++ 가상 메서드 호출을 더블클릭하여 탐색하고, 해당 xref를 찾고, 라이브 리서치 중에 이 모든 것을 동기화된 상태로 유지함으로써 iOS 커널캐시를 탐색할 수 있습니다.
ida_kcpp는 ida_medigate에서 영감을 받았지만, iOS 커널캐시의 독특한 구조를 활용하여 더 강력하고 편리한 리서치 환경을 제공합니다.

둘 다 PyPI에 없으므로, 각 저장소의 설치 지침을 따르세요.
ida-setup 사용 시:
ida-setup plugin install -e /path/to/ida-kcpp
또는 수동으로:
ida_kernelcache와 ida_kcpp가 IDA python 경로에 있는지 확인합니다.~/.idapro/idapythonrc.py에 추가하여 설치할 수도 있습니다:
import sys
sys.path.append(IDA_KCPP_PATH)
sys.path.append(IDA_KERNELCACHE_PATH)
~/.idapro/plugins/ida_kcpp_plugin.py를 ida_kcpp_plugin.py에 symlink합니다.ida_kernelcache가 아직 실행되지 않았다면 edit >> Plugins >> Kernel Cache CPP >> ida_kernelcache process kernel을 실행하세요.Edit >> Plugins >> Kernel Cache CPP >> Perform Initial sync...를 실행합니다 (경고 메시지 상자가 나타날 수 있으며, 지금은 무시해도 됩니다). 이 단계는 가상 함수 이름의 접두사를 해당 함수가 속한 클래스로 설정하여 이름을 변경합니다. 또한 이 단계는 모든 가상 함수를 디컴파일하고, 해당 this 인자를 설정하며, 관련 ::vmethods 멤버를 디컴파일된 타입에 대한 함수 포인터로 변경합니다. 이 단계는 시간이 다소 걸릴 수 있습니다...ida_kcpp는 이름과 프로토타입을 자동으로 전파하며, IDA의 탐색 방식 일부도 변경하기 때문에 자동으로 활성화되지 않지만, 언제든지 활성화하거나 비활성화할 수 있습니다.
edit >> Plugins >> Kernel Cache CPP >> Activate Plugin을 클릭하여 ida_kcpp를 활성화합니다 (Hexrays 훅을 설치하고 ida_kernelcache.collect_class_info()도 실행합니다).
Edit >> Plugins >> Kernel Cache CPP >> Deactivate Plugin을 클릭합니다.
가상 함수의 이름을 변경할 때 맹글링된 이름(예: __ZNK10AppleA7IOP9method_86Ev_99)을 편집하거나, 사람이 읽기 쉬운 이름(AppleA7IOP::method_86)으로 변경할 수 있으며, 이는 자동으로 맹글링됩니다. 관련 ANCESTOR::vmethods 멤버도 함께 이름이 변경되며, 동일한 가상 메서드를 구현하는 모든 가상 함수도 함께 이름이 변경됩니다.
가상 함수 프로토타입 변경도 마찬가지입니다. 이 경우 관련 ANCESTOR::vmethods 멤버의 프로토타입이 방금 설정된 타입에 대한 함수 포인터로 변경되며, this는 ANCESTOR *로 설정됩니다. 또한 ANCESTOR의 DESCENDANTS에 있는 관련 가상 메서드 구현의 프로토타입도 모두 변경되며, 해당 this는 DESCENTANT *로 설정됩니다.
::vmethods 멤버로의 xref를 추가합니다.ida_referee를 사용하여 모든 필드의 사용, 특히 디컴파일러에서 ::vmethods 멤버(가상 호출)의 사용을 추적할 수 있습니다.
CTRL+SHIFT+Y 단축키를 추가하여 관련 ::vmethod 멤버의 xrefs 창을 바로 열 수 있습니다. IDA의 버그로 인해 이 기능은 디컴파일러가 아닌 디스어셈블리 창에서만 작동합니다.디컴파일러: 가상 함수 호출을 더블 클릭하면 가상 메서드의 구현을 선택할 수 있는 창이 팝업됩니다.

Local Types 보기 (Shift+F1):
Cmd+Enter를 눌러도 구현으로 이동합니다 (더블 클릭보다 깔끔한 대안)::를 포함하는 구조체 이름을 더블 클릭하면 이동하지 않는 IDA 버그를 수정했습니다.Cellebrite Labs의 Uriel Malin, Ievgen Solodovnykov, Omer Porzecanski가 작성했습니다. macOS에서 Python 3.13과 함께 IDA 9.2용으로 개발 및 테스트되었습니다