
ida_kernelcache के ऊपर c++ समर्थन बढ़ाने के लिए एक IDAPython मॉड्यूल
iOS kernelcaches को रिवर्स इंजीनियर करने के लिए एक बहुत अधिक सुविधाजनक तरीका प्रदान करने वाला एक IDAPython मॉड्यूल।
iOS kernelcache का बड़ा हिस्सा C++ में लिखा गया है, जो जटिल बाइनरी कोड में संकलित होकर स्पष्ट सीधे कॉल के बजाय कई वर्चुअल टेबल डीरेफ़रेंस का उपयोग करता है। ida_kcpp ida_kernelcache की क्लास पदानुक्रम पुनर्निर्माण का लाभ उठाता है। यह IDB को मैप करता है और बाइनरी फ़ंक्शंस तथा मूल वर्चुअल मेथड्स को सिंक्रोनाइज़ करता है। यह C++ वर्चुअल मेथड कॉल पर डबल-क्लिक करके iOS kernelcache में नेविगेट करने, उनके xrefs खोजने, और लाइव रिसर्च के दौरान इन सबको सिंक्रोनाइज़ रखने में सक्षम बनाता है।
ida_kcpp ida_medigate से प्रेरित है, लेकिन iOS kernelcache की अनूठी संरचना का लाभ उठाते हुए अधिक शक्तिशाली और सुविधाजनक रिसर्च वातावरण प्रदान करता है।

इनमें से कोई भी 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 kernelEdit >> Plugins >> Kernel Cache CPP >> Perform Initial sync... चलाएँ (कुछ चेतावनी messagebox दिखाई दे सकते हैं, आप अभी के लिए उन्हें अनदेखा कर सकते हैं)। यह चरण Virtual functions के नामों को उनके prefix को उस class पर सेट करके बदलता है जिससे वे संबंधित हैं। यह चरण सभी virtual functions को decompile भी करता है, उनका this argument सेट करता है, और संबंधित ::vmethods member को decompiled type के function pointer में बदलता है। इस चरण में काफी समय लग सकता है...ida_kcpp स्वचालित रूप से नाम और prototypes propagate करता है, और IDA में navigation के कुछ पहलुओं को भी बदलता है, इसलिए यह स्वचालित रूप से सक्रिय नहीं होता बल्कि किसी भी समय सक्रिय या निष्क्रिय किया जा सकता है।
edit >> Plugins >> Kernel Cache CPP >> Activate Plugin पर क्लिक करके ida_kcpp सक्रिय करें (यह Hexrays hooks install करेगा और ida_kernelcache.collect_class_info() भी चलाएगा)
Edit >> Plugins >> Kernel Cache CPP >> Deactivate Plugin पर क्लिक करके
किसी virtual function का नाम बदलते समय कोई mangled name (उदाहरण के लिए __ZNK10AppleA7IOP9method_86Ev_99) संपादित कर सकता है, या इसे मानव-पठनीय नामों (AppleA7IOP::method_86) में बदल सकता है जो स्वचालित रूप से mangled हो जाएगा। संबंधित ANCESTOR::vmethods member का भी नाम बदला जाएगा, और उन सभी virtual functions का नाम भी बदला जाएगा जो उसी virtual method को implement करते हैं।
यही बात virtual function prototype बदलने पर भी लागू होती है। इस स्थिति में, संबंधित ANCESTOR::vmethods member का prototype उस type के function pointer में बदल दिया जाएगा जो अभी सेट किया गया था, साथ ही this को ANCESTOR * के रूप में सेट किया जाएगा। साथ ही, ANCESTOR के DESCENDANTS के सभी संबंधित virtual method implementations के prototypes भी बदले जाएंगे, उनके this को DESCENTANT * पर सेट करके।
::vmethods member तक एक xref जोड़ते हैं।ida_referee का उपयोग करके हम decompiler में हर field के उपयोग को track कर सकते हैं, और विशेष रूप से ::vmethods member (virtual calls) को।
CTRL+SHIFT+Y hotkey भी जोड़ा है, जो सीधे उसके संबंधित ::vmethod member के xrefs window को खोलता है। IDA में एक bug है और यह केवल disassembly window से काम करता है, decompiler से नहीं।Decompiler: किसी virtual function call पर double click करने से एक window pop up होती है जो उपयोगकर्ता को virtual method का implementation चुनने की अनुमति देती है।

Local Types view (Shift+F1):
Cmd+Enter भी implementation पर navigate करता है (double-click का साफ़ विकल्प):: वाले struct name पर double-click करने से jump नहीं होता था।Cellebrite Labs के Uriel Malin, Ievgen Solodovnykov और Omer Porzecanski द्वारा लिखित। macOS पर Python 3.13 के साथ IDA 9.2 के लिए विकसित और परीक्षित