أول مهندس عكسي وكيل في العالم.
تنسيق النماذج اللغوية الكبيرة لهندسة الباينري العكسية
معظم المهام تتبع علاقة خطية: كلما كانت المهمة أصعب، كلما استغرقت وقتًا أطول عادةً. الهندسة العكسية (وتحليل الباينري) هي مهمة تكون الصعوبة الفعلية فيها تافهة إلى حد ما، لكن وقت التنفيذ يمكن أن يصل إلى ساعات (وأيام!)، حتى بالنسبة لباينري يحتوي على بضع مئات من الدوال.
يقوم كونغ بأتمتة الطبقة الميكانيكية، باستخدام إطار عمل للهندسة العكسية من فئة وكالة الأمن القومي. يمكن لكونغ أن يأخذ باينري مبهم بالكامل ومجرد من الرموز ويشغل خط أنابيب تحليل كامل: فرز الدوال، بناء سياق رسم بياني للاستدعاءات، استعادة الأنواع والرموز من خلال فك الترجمة الموجه بواسطة النماذج اللغوية الكبيرة، وكتابة النتائج مرة أخرى في قاعدة بيانات برنامج جيدرا. الناتج هو باينري حيث أصبح FUN_00401a30 الآن parse_http_header، مع هياكل مستعادة وأسماء معاملات واتفاقيات استدعاء.
لماذا هذا موجود
تفقد الباينري المجردة من الرموز كل السياق الذي يجعل الكود قابلًا للقراءة: أسماء الدوال، معلومات الأنواع، أسماء المتغيرات، تخطيطات الهياكل. استعادة هذا السياق تشكل الجزء الأكبر من العمل في معظم مهام الهندسة العكسية، وهي إلى حد كبير مطابقة أنماط: التعرف على دوال المكتبة القياسية، استنتاج الأنواع من الاستخدام، نشر الأسماء عبر رسوم الاستدعاءات.
النماذج اللغوية الكبيرة جيدة في هذا النوع من مطابقة الأنماط. لكن توجيه نموذج لغوي كبير إلى إخراج مفكك الترجمة الخام وسؤاله "ماذا يفعل هذا؟" يعطي نتائج متوسطة. يفتقر النموذج إلى سياق الاستدعاء، معلومات المراجع المتقاطعة، والصورة الأوسع لكيفية تنظيم الباينري. بالإضافة إلى ذلك، تقدم معظم الباينري المبهمة تقنيات متطرفة لمنع الهندسة العكسية.
يحل كونغ هذه المشكلة عن طريق بناء نوافذ سياق غنية من تحليل برنامج جيدرا (رسوم الاستدعاءات، المراجع المتقاطعة، مراجع السلاسل، تدفق البيانات) قبل لمس النموذج اللغوي الكبير، ثم تنسيق التحليل بترتيب التبعية بحيث تستفيد كل دالة من أسماء الدوال التي تستدعيها والتي تم تسميتها مسبقًا. بالإضافة إلى ذلك، يقدم كونغ خط أنابيب إزالة إبهام وكيل من نوعه الأول من نوعه.


يعمل كونغ مع معظم الباينري القابلة للفك بواسطة جيدرا (في الوقت الحالي، المزيد قادم).
| C | C++ | Go | Rust | |
|---|---|---|---|---|
| x86 | عالية | عالية | متوسطة | متوسطة |
| x86-64 | عالية | عالية | متوسطة | متوسطة |
| ARM (32-bit) | عالية | عالية | متوسطة | منخفضة |
| AArch64 | عالية | عالية | متوسطة | منخفضة |
| MIPS | متوسطة | متوسطة | منخفضة | منخفضة |
| PowerPC | متوسطة | متوسطة | منخفضة | منخفضة |
عالية: يقوم كونغ بشكل موثوق بفك الترجمة، وإزالة الإبهام، واستعادة الأسماء والأنواع والبنية.
متوسطة: فك الترجمة قابل للاستخدام لكنه أكثر ضوضاء. توقع استعادة جزئية ودرجات ثقة أقل.
منخفضة: فك الترجمة به فجوات كبيرة وستبقى النتائج غير مكتملة أو صاخبة أو غير قابلة للقراءة.
ملاحظة: حجم الباينري يتناسب طرديًا مع عدد الدوال، تكلفة النموذج اللغوي الكبير، والوقت حتى الاكتمال. ومع ذلك، حجم الباينري يتناسب عكسيًا مع الثقة، لذا ضع هذا في الاعتبار عند تحليل باينري أكبر.
يستخدم كونغ خط أنابيب من خمس مراحل بقيادة مشرف ينسق الفرز والتحليل المتوازي والمعالجة اللاحقة:
┌──────────────────────────┐
│ الفرز │
│ تعداد، تصنيف، │
│ بناء رسم الاستدعاءات، │
│ مطابقة التوقيعات │
└──────────┬───────────────┘
│
▼
┌────────────────┼────────────────┐
│ │ │
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ تحليل │ │ تحليل │ │ ... │
│ (دوال طرفية)│ │ (الطبقة التالية)│ │ │
└──────┬───────┘ └──────┬───────┘ └──────┬───────┘
│ │ │
└────────┬───────┴────────────────┘
│
▼
┌──────────────────────────┐
│ التنظيف │
│ تطبيع، إزالة التكرار │
└──────────┬───────────────┘
│
▼
┌──────────────────────────┐
│ التوليف │
│ توحيد الأسماء، بناء │
│ الهياكل، إزالة الإبهام │
└──────────┬───────────────┘
│
▼
┌──────────────────────────┐
│ التصدير │
│ analysis.json + │
│ كتابة إلى جيدرا │
└──────────────────────────┘
الفرز يقوم بتعداد جميع الدوال في الباينري، ويصنفها حسب الحجم (تافهة / صغيرة / متوسطة / كبيرة)، ويبني رسم الاستدعاءات، ويكتشف لغة المصدر، ويشغل مطابقة التوقيعات ضد دوال المكتبة القياسية والدوال المشفرة المعروفة. يتم وضع علامة على الدوال المطابقة بالتوقيع على أنها محلولة ويتم تخطي تحليل النموذج اللغوي الكبير بالكامل.
التحليل يعالج الدوال بترتيب من الأسفل إلى الأعلى من رسم الاستدعاءات باستخدام قائمة انتظار عمل. لكل دالة، يبني كونغ نافذة سياق من قاعدة بيانات برنامج جيدرا — فك الترجمة، المراجع المتقاطعة، مراجع السلاسل، وتوقيعات الدوال المستدعاة التي تم تحليلها بالفعل — ويطبيع إخراج مفكك الترجمة، ويرسله إلى النموذج اللغوي الكبير لاستعادة الاسم والنوع والمعاملات. إذا تم اكتشاف إبهام في فك ترجمة دالة، يشغل كونغ تمرير إزالة إبهام وكيلي مع وصول رمزي للأدوات قبل إنتاج التحليل. تتم كتابة النتائج مرة أخرى إلى جيدرا فورًا بحيث ترى الدوال المستدعية اللاحقة الأسماء المحدثة.
التنظيف يوحد أنواع الهياكل من الاقتراحات المتراكمة أثناء التحليل ويعيد محاولة أي توقيعات دالة فشلت في التطبيق أثناء تمرير التحليل.
التوليف يأخذ نظرة شاملة عبر جميع الدوال التي تم تحليلها. استدعاء واحد للنموذج اللغوي الكبير يراجع الدوال الأكثر اتصالاً، ويوحد اصطلاحات التسمية، ويصنع تعريفات الهياكل من أنماط الوصول إلى الحقول، ويصقل الأسماء التي تبدو غير متسقة في السياق الأوسع.
التصدير يكتب analysis.json النهائي ويطبق جميع الأسماء والأنواع والتوقيعات المستعادة مرة أخرى إلى قاعدة بيانات برنامج جيدرا.
# 1. تثبيت كونغ
uv pip install kong-re
# 2. تعيين مفتاح (مفاتيح) API الخاص بك
export ANTHROPIC_API_KEY="sk-ant-..."
# و/أو
export OPENAI_API_KEY="sk-..."
# 3. تشغيل معالج الإعداد (المرة الأولى فقط)
kong setup
# 4. تحليل باينري
kong analyze ./path/to/stripped_binary
يتيح لك معالج الإعداد اختيار مزودي النماذج اللغوية الكبيرة الذين تريد استخدامهم وتعيين الافتراضي. يكتشف كونغ تلقائيًا تثبيتات Ghidra و JDK الخاصة بك، ويحمل الباينري في مثيل Ghidra داخلي، ويشغل خط الأنابيب بالكامل.
git clone https://github.com/amruth-sn/kong.git
cd kong
uv sync
uv run kong setup
uv run kong analyze ./path/to/stripped_binary
| المتغير | مطلوب | الوصف |
|---|---|---|
ANTHROPIC_API_KEY | واحد على الأقل | مفتاح API لـ Anthropic (Claude) |
OPENAI_API_KEY | واحد على الأقل | مفتاح API لـ OpenAI (GPT-4o) |
GHIDRA_INSTALL_DIR | لا | المسار إلى تثبيت Ghidra (يتم الكشف تلقائيًا إذا لم يتم تعيينه) |
JAVA_HOME | لا | المسار إلى JDK (يتم الكشف تلقائيًا إذا لم يتم تعيينه) |
KONG_CONFIG_DIR | لا | تجاوز دليل التكوين (الافتراضي: ~/.config/kong) |
# تشغيل معالج الإعداد
kong setup
# تحليل باينري مجرد من الرموز (يستخدم المزود الافتراضي المُهيأ)
kong analyze ./binary
# التحليل بمزود محدد
kong analyze ./binary --provider openai
# تجاوز النموذج
kong analyze ./binary --provider openai --model gpt-4o-mini
# عرض بيانات الباينري الوصفية دون تشغيل التحليل
kong info ./binary
# تقييم مخرجات التحليل مقابل كود المصدر الحقيقي
kong eval ./analysis.json ./source.c
تتم كتابة النتائج إلى دليل المخرجات (الافتراضي: ./kong_output_{binary_name}/):
kong_output_{binary_name}/
├── analysis.json # جميع أسماء الدوال والأنواع والمعاملات المستعادة
└── events.log # تتبع تنفيذ خط الأنابيب
أعاد كونغ بناء سلسلة القتل الكاملة لـ ثغرة XZ الخلفية (CVE-2024-3094) بشكل مستقل من liblzma.so.5.4.1 المجرد من الرموز — حيث حدد جميع دوال implant الخمسة الأساسية بثقة 90-95% في 15 دقيقة بتكلفة 6.63 دولار.
انظر BENCHMARKS.md لدراسة الحالة الكاملة وتعليمات إعادة الإنتاج.
kong/
├── __main__.py # نقطة دخول CLI (Click)
├── config.py # KongConfig، LLMProvider، LLMConfig
├── db.py # مخزن تكوين SQLite (~/.config/kong/)
├── banner.py # شعار ASCII، مساعدات مفاتيح API
├── agent/
│ ├── supervisor.py # منسق خط الأنابيب
│ ├── triage.py # تعداد الدوال + التصنيف
│ ├── analyzer.py # تحليل الدوال الموجه بواسطة النموذج اللغوي الكبير
│ ├── queue.py # قائمة انتظار عمل BFS من رسم الاستدعاءات
│ ├── signatures.py # مطابقة توقيعات الدوال المعروفة
│ ├── prompts.py # الاستعلام النظامي + مخطط الإخراج
│ ├── events.py # أنواع المراحل/الأحداث لتتبع خط الأنابيب
│ └── models.py # فئة FunctionResult
├── ghidra/
│ ├── client.py # GhidraClient الداخلي (PyGhidra/JPype)
│ ├── types.py # FunctionInfo، BinaryInfo، XRef، إلخ.
│ └── environment.py # الكشف التلقائي عن Ghidra/JDK
├── llm/
│ ├── client.py # AnthropicClient
│ ├── openai_client.py # OpenAIClient
│ ├── usage.py # TokenUsage، تتبع التكاليف، سجل التسعير
│ └── limits.py # حدود خاصة بالنموذج + محدد المعدل
├── normalizer/
│ └── syntactic.py # تطبيع إخراج مفكك الترجمة
├── synthesis/
│ └── semantic.py # توحيد الأسماء العالمي + توليف الهياكل
├── evals/
│ ├── harness.py # استخراج الحقيقة الأساسية + التسجيل
│ └── metrics.py # symbol_accuracy، type_accuracy
├── export/
│ └── source.py # analysis.json + كتابة إلى Ghidra
├── signatures/
│ ├── stdlib.json # توقيعات مكتبة C القياسية
│ └── crypto.json # توقيعات الدوال المشفرة
└── tui/
└── app.py # واجهة المستخدم النصية Textual
كونغ مرخص بموجب رخصة Apache 2.0. كونغ هو مشروع مجاني ومفتوح المصدر.
هذا الترخيص متوافق مع ترخيص Ghidra، ويسمح بالاستخدام التجاري.
نرحب بالمشكلات وطلبات الميزات عبر GitHub Issues.
شكر كبير لمشروع Shannon من KeygraphHQ، والذي قدم الإلهام لهذا المشروع. كان دافعي هو تكرار نفس نوع خط الأنابيب الذي يستخدمه Shannon لأداة اختبار الاختراق المستندة إلى الويب، وتكييفه لتحليل الباينري وفك الترجمة.
خاف من القرد.
كونغ: أول مهندس عكسي بالذكاء الاصطناعي في العالم