
ISA Recovery
سلسلة هندسة عكسية تحول ملف ثنائي للبرنامج الثابت (firmware binary) وملف تفكيكه (disassembly) (قد يكون خاطئًا) إلى مواصفات معالج Ghidra قابلة للاستخدام. عندما تواجه معالجًا مملوكًا دون توثيق ودون دعم Ghidra، تقوم هذه الأداة باستعادة الترميز الحقيقي لكل تعليمة — أي البتات هي رمز العملية (opcode)، وأيها هي السجلات، وأيها هي القيم المباشرة (immediates) — وتكتب مواصفات SLEIGH يمكنك تحميلها مباشرة في Ghidra لفك ترجمة البرنامج الثابت.
تحت الغطاء هو سير عمل وكيل (agentic workflow): خط أنابيب ثابت حيث كل خطوة هي نموذج لغة كبير مكلف بمهمة محددة. يتم تنسيق سير العمل بواسطة كود حتمي — وليس بواسطة نماذج اللغة نفسها — ويتم التحقق من كل منشئ SLEIGH يتم إنشاؤه في النهاية عن طريق تجميعه مع ملف sleigh الثنائي الخاص بـ Ghidra قبل قبوله. يتم إعادة التجميعات الفاشلة إلى النموذج لما يصل إلى ثلاث محاولات إصلاح.
Objdump
│
▼
Bootstrap ─── deterministic clustering (no LLM)
│
▼
┌─ Processing Loop ──────────────────────────┐
│ Text Interpreter → Bit Interpreter ──┐ │
│ → Knowledge Manager │ │
│ → Supervisor │ │
│ │ split ─────┘ │
│ └── next cluster ──────────┤
└────────────────────────────────────────────┘
│
▼
Knowledge Base
│
▼
SLEIGH Generator ─── compile-verify-retry loop
│
▼
Ghidra .slaspec
يتم تجميع التعليمات في مجموعات (clusters) حسب الهيكل (حجم البايت، نمط الرمز، قناع البت الثابت). ثم يتم تحليل كل مجموعة بواسطة سلسلة من خطوات LLM المتخصصة:
add {REG1}, {REG2}, {REG3}).عند اكتمال قاعدة المعرفة، يقوم مولد SLEIGH منفصل ببناء مواصفات Ghidra في مرحلتين: هيكل عظمي حتمي لجميع المنشئات المميزة بـ unimpl، ثم يقوم LLM بملء دلالات p-code تعليمة واحدة في كل مرة، مع تجميع كل منها مقابل ملف sleigh الثنائي لـ Ghidra وإعادة المحاولة عند الفشل.
مصمم كـ مساعد للمحلل، وليس بديلاً: تعرض واجهة TUI كل قرار، ويقوم المشرف (Supervisor) برفع المجموعات الغامضة إلى إنسان، ويتم كتابة سجل المحادثة الكامل لـ LLM واستدعاءات الأدوات واستخدام الرموز إلى القرص.
تم اختباره على LEGv8 و MIPS و pi32v2 و x86.
# Docker (recommended)
echo "ANTHROPIC_API_KEY=sk-ant-..." > .env
./docker/run.sh integration_tests/mips
# Local
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_KEYrun.sh)