
ISA Recovery
एक रिवर्स-इंजीनियरिंग पाइपलाइन जो एक फर्मवेयर बाइनरी और उसके (संभवतः गलत) डिसअसेंबली को एक कार्यशील Ghidra प्रोसेसर स्पेसिफिकेशन में बदलती है। जब आपके पास कोई दस्तावेज़ीकरण और कोई Ghidra समर्थन न हो, तो यह टूल प्रत्येक इंस्ट्रक्शन की वास्तविक एन्कोडिंग को पुनर्प्राप्त करता है — कौन से बिट्स ऑपकोड हैं, कौन से रजिस्टर हैं, कौन से इमीडिएट हैं — और एक SLEIGH स्पेक लिखता है जिसे आप सीधे Ghidra में लोड करके फर्मवेयर को डीकंपाइल कर सकते हैं।
हुड के नीचे यह एक एजेंटिक कार्यप्रवाह है: एक निश्चित पाइपलाइन जहां प्रत्येक चरण एक बड़ी भाषा मॉडल है जिसे एक संकीर्ण कार्य के लिए प्रेरित किया गया है। कार्यप्रवाह नियतात्मक कोड द्वारा संयोजित होता है — न कि स्वयं LLM द्वारा — और अंत में उत्पन्न प्रत्येक SLEIGH कंस्ट्रक्टर को स्वीकार किए जाने से पहले Ghidra के sleigh बाइनरी के साथ संकलित करके सत्यापित किया जाता है। विफल संकलन को मॉडल को अधिकतम तीन मरम्मत प्रयासों के लिए वापस फीड किया जाता है।
Objdump
│
▼
Bootstrap ─── नियतात्मक क्लस्टरिंग (कोई LLM नहीं)
│
▼
┌─ प्रसंस्करण लूप ──────────────────────────┐
│ टेक्स्ट इंटरप्रेटर → बिट इंटरप्रेटर ──┐ │
│ → ज्ञान प्रबंधक │ │
│ → पर्यवेक्षक │ │
│ │ विभाजन ─────┘ │
│ └── अगला क्लस्टर ──────────┤
└────────────────────────────────────────────┘
│
▼
ज्ञान आधार
│
▼
SLEIGH जनरेटर ─── संकलन-सत्यापन-पुनःप्रयास लूप
│
▼
Ghidra .slaspec
इंस्ट्रक्शन को संरचना (बाइट आकार, टोकन पैटर्न, निश्चित-बिट मास्क) द्वारा क्लस्टर में समूहित किया जाता है। फिर प्रत्येक क्लस्टर का विश्लेषण विशिष्ट LLM चरणों की एक श्रृंखला द्वारा किया जाता है:
add {REG1}, {REG2}, {REG3}).जब ज्ञान आधार पूरा हो जाता है, तो एक अलग SLEIGH जनरेटर दो चरणों में Ghidra स्पेक बनाता है: सभी कंस्ट्रक्टरों का एक नियतात्मक ढाँचा जिसे unimpl चिह्नित किया गया है, फिर एक LLM एक बार में एक इंस्ट्रक्शन के लिए p-कोड सिमैंटिक्स भरता है, प्रत्येक को Ghidra के sleigh बाइनरी के विरुद्ध संकलित करता है और विफलता पर पुनः प्रयास करता है।
विश्लेषक के लिए एक सह-पायलट के रूप में डिज़ाइन किया गया, प्रतिस्थापन के रूप में नहीं: TUI प्रत्येक निर्णय को उजागर करता है, पर्यवेक्षक अस्पष्ट क्लस्टर को मानव को एस्केलेट करता है, और पूर्ण LLM वार्तालाप, टूल-कॉल और टोकन-उपयोग इतिहास डिस्क पर लिखा जाता है।
LEGv8, MIPS, pi32v2 और x86 पर परीक्षण किया गया।
# डॉकर (अनुशंसित)
echo "ANTHROPIC_API_KEY=sk-ant-..." > .env
./docker/run.sh integration_tests/mips
# स्थानीय
pip install -e ".[all]"
python -m main --config config.yaml
इनपुट: एक फर्मवेयर बाइनरी और एक objdump डिसअसेंबली — भले ही वह गलत आर्किटेक्चर के विरुद्ध बनाई गई हो। टूल स्वयं डिसअसेंबली समस्या को हल नहीं करता; आउटपुट गुणवत्ता इनपुट डिसअसेंबली गुणवत्ता के साथ स्केल करती है।
आउटपुट: एक Ghidra .slaspec फ़ाइल और रजिस्टरों, इंस्ट्रक्शन एन्कोडिंग, एड्रेसिंग मोड और आर्किटेक्चर विशेषताओं का एक JSON ज्ञान आधार।
पूर्ण दस्तावेज़ीकरण — आर्किटेक्चर, एजेंट आंतरिक, कार्य उदाहरण, कॉन्फ़िगरेशन संदर्भ — विकी में रहता है:
pip install -e ".[docs]"
cd wiki && mkdocs serve
फिर http://localhost:8000 खोलें।
ANTHROPIC_API_KEY एनवायरनमेंट वेरिएबलrun.sh के लिए)