
दुनिया का पहला एजेंटिक रिवर्स इंजीनियर।
बाइनरी रिवर्स इंजीनियरिंग के लिए LLM ऑर्केस्ट्रेशन
अधिकांश कार्य एक रेखीय संबंध का पालन करते हैं: कार्य जितना कठिन होता है, आमतौर पर इसमें उतना ही अधिक समय लगता है। रिवर्स इंजीनियरिंग (और बाइनरी विश्लेषण) एक ऐसा कार्य है जिसमें वास्तविक कठिनाई कुछ हद तक तुच्छ है, लेकिन निष्पादन का समय घंटों (और दिनों!) के क्रम में हो सकता है, यहां तक कि कुछ सौ फ़ंक्शन वाले बाइनरी के लिए भी।
कोंग यांत्रिक परत को स्वचालित करता है, NSA-ग्रेड रिवर्स इंजीनियरिंग फ्रेमवर्क का उपयोग करके। कोंग एक पूरी तरह से अस्पष्ट, स्ट्रिप्ड बाइनरी ले सकता है और एक पूर्ण विश्लेषण पाइपलाइन चला सकता है: फ़ंक्शन को ट्राइएज करना, कॉल-ग्राफ़ संदर्भ बनाना, LLM-निर्देशित डीकंपाइलेशन के माध्यम से प्रकार और प्रतीकों को पुनर्प्राप्त करना, और परिणामों को Ghidra के प्रोग्राम डेटाबेस में वापस लिखना। आउटपुट एक बाइनरी है जहाँ कुछ FUN_00401a30 अब parse_http_header है, पुनर्प्राप्त स्ट्रक्ट्स, पैरामीटर नाम और कॉलिंग कन्वेंशन के साथ।
यह क्यों मौजूद है
स्ट्रिप्ड बाइनरी वह सारा संदर्भ खो देती है जो कोड को पढ़ने योग्य बनाता है: फ़ंक्शन नाम, प्रकार की जानकारी, चर नाम, स्ट्रक्ट लेआउट। उस संदर्भ को पुनर्प्राप्त करना अधिकांश रिवर्स इंजीनियरिंग कार्यों में मुख्य कार्य है, और यह काफी हद तक पैटर्न मिलान है: मानक लाइब्रेरी फ़ंक्शन को पहचानना, उपयोग से प्रकार का अनुमान लगाना, कॉल ग्राफ़ के माध्यम से नामों का प्रसार करना।
LLM इस प्रकार के पैटर्न मिलान में ठीक अच्छे हैं। लेकिन कच्चे डीकंपाइलर आउटपुट पर LLM को इंगित करना और पूछना "यह क्या करता है?" आपको औसत दर्जे के परिणाम देता है। मॉडल में कॉलिंग संदर्भ, क्रॉस-रेफरेंस जानकारी, और यह व्यापक चित्र नहीं है कि बाइनरी कैसे संरचित है। इसके अलावा, अधिकांश अस्पष्ट बाइनरी रिवर्स इंजीनियरिंग को रोकने के लिए चरम तकनीकें पेश करती हैं।
कोंग इसे LLM को छूने से पहले Ghidra के प्रोग्राम विश्लेषण (कॉल ग्राफ़, क्रॉस-रेफरेंस, स्ट्रिंग रेफरेंस, डेटा प्रवाह) से समृद्ध संदर्भ विंडो बनाकर हल करता है, फिर निर्भरता क्रम में विश्लेषण को व्यवस्थित करता है ताकि प्रत्येक फ़ंक्शन को उसके कैलीज़ के पहले से नामित होने का लाभ मिले। इसके अतिरिक्त, कोंग अपनी खुद की, अपनी तरह की पहली, एजेंटिक डीऑबफस्केशन पाइपलाइन पेश करता है।
कोंग अधिकांश Ghidra-डीकंपाइल करने योग्य बाइनरी के साथ काम करता है (अभी के लिए, और आने वाला है)।
उच्च: कोंग विश्वसनीय रूप से डीकंपाइल करता है, डीऑबफसकेट करता है, और नाम, प्रकार और संरचना को पुनर्प्राप्त करता है।
मध्यम: डीकंपाइलेशन उपयोग करने योग्य है लेकिन अधिक शोर वाला है। आंशिक पुनर्प्राप्ति और कम आत्मविश्वास स्कोर की अपेक्षा करें।
निम्न: डीकंपाइलेशन में महत्वपूर्ण अंतराल हैं और परिणाम अपूर्ण, शोर वाले या अपठनीय रहेंगे।
नोट: बाइनरी का आकार फ़ंक्शन गणना, LLM लागत और पूरा होने के समय के साथ सकारात्मक रूप से बढ़ता है। हालाँकि, बाइनरी का आकार आत्मविश्वास के साथ नकारात्मक रूप से भी बढ़ता है, इसलिए बड़े बाइनरी का विश्लेषण करते समय इसे ध्यान में रखें।
कोंग एक पर्यवेक्षक द्वारा संचालित पाँच-चरणीय पाइपलाइन का उपयोग करता है जो ट्राइएज, समानांतर विश्लेषण और पोस्ट-प्रोसेसिंग का समन्वय करता है:
┌──────────────────────┐
│ Triage │
│ enumerate, classify,│
│ build call graph, │
│ match signatures │
└──────────┬───────────┘
│
▼
┌────────────────┼────────────────┐
│ │ │
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Analyze │ │ Analyze │ │ ... │
│ (leaf fns) │ │ (next tier) │ │ │
└──────┬───────┘ └──────┬───────┘ └──────┬───────┘
│ │ │
└────────┬───────┴────────────────┘
│
▼
┌──────────────────────┐
│ Cleanup │
│ normalize, dedupe │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ Synthesis │
│ unify names, build │
│ structs, deobfuscate│
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ Export │
│ analysis.json + │
│ Ghidra writeback │
└──────────────────────┘
ट्राइएज बाइनरी में सभी फ़ंक्शन की गणना करता है, उन्हें आकार के अनुसार वर्गीकृत करता है (तुच्छ / छोटा / मध्यम / बड़ा), कॉल ग्राफ़ बनाता है, स्रोत भाषा का पता लगाता है, और ज्ञात मानक लाइब्रेरी और क्रिप्टो फ़ंक्शन के विरुद्ध सिग्नेचर मिलान चलाता है। सिग्नेचर से मिलने वाले फ़ंक्शन को हल के रूप में चिह्नित किया जाता है और LLM विश्लेषण को पूरी तरह से छोड़ देता है।
विश्लेषण एक कार्य कतार का उपयोग करके कॉल ग्राफ़ से नीचे-ऊपर क्रम में फ़ंक्शन को संसाधित करता है। प्रत्येक फ़ंक्शन के लिए, कोंग Ghidra के प्रोग्राम डेटाबेस से एक संदर्भ विंडो बनाता है - डीकंपाइलेशन, क्रॉस-रेफरेंस, स्ट्रिंग रेफरेंस, और पहले से विश्लेषित कैलीज़ के सिग्नेचर - डीकंपाइलर आउटपुट को सामान्य करता है, और नाम, प्रकार और पैरामीटर पुनर्प्राप्ति के लिए इसे LLM को भेजता है। यदि किसी फ़ंक्शन के डीकंपाइलेशन में अस्पष्टता का पता चलता है, तो कोंग विश्लेषण उत्पन्न करने से पहले प्रतीकात्मक उपकरण पहुंच के साथ एक एजेंटिक डीऑबफस्केशन पास चलाता है। परिणाम तुरंत Ghidra में वापस लिखे जाते हैं ताकि डाउनस्ट्रीम कॉलर्स को अपडेटेड नाम दिखें।
सफाई विश्लेषण के दौरान संचित प्रस्तावों से स्ट्रक्ट प्रकारों को एकीकृत करता है और किसी भी फ़ंक्शन सिग्नेचर को पुनः प्रयास करता है जो विश्लेषण पास के दौरान लागू करने में विफल रहे।
सिंथेसिस सभी विश्लेषित फ़ंक्शनों में एक वैश्विक दृश्य लेता है। एक LLM कॉल सबसे अधिक जुड़े फ़ंक्शनों की समीक्षा करता है, नामकरण परंपराओं को एकीकृत करता है, फ़ील्ड एक्सेस पैटर्न से स्ट्रक्ट परिभाषाओं को संश्लेषित करता है, और उन नामों को परिष्कृत करता है जो व्यापक संदर्भ में असंगत दिखते हैं।
निर्यात अंतिम analysis.json लिखता है और सभी पुनर्प्राप्त नामों, प्रकारों और सिग्नेचर को वापस Ghidra प्रोग्राम डेटाबेस में लागू करता है।
# 1. Kong इंस्टॉल करें
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
सेटअप विज़ार्ड आपको चुनने देता है कि किन LLM प्रदाताओं का उपयोग करना है और एक डिफ़ॉल्ट सेट करता है। Kong आपके 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
# सेटअप विज़ार्ड चलाएं
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 # पाइपलाइन निष्पादन ट्रेस
कोंग ने स्वायत्त रूप से एक स्ट्रिप्ड liblzma.so.5.4.1 से पूर्ण XZ बैकडोर (CVE-2024-3094) किल चेन का पुनर्निर्माण किया - 15 मिनट में $6.63 की लागत पर 90-95% आत्मविश्वास के साथ सभी पाँच मुख्य इम्प्लांट फ़ंक्शन की पहचान की।
पूर्ण केस स्टडी और पुनरुत्पादन निर्देशों के लिए BENCHMARKS.md देखें।
kong/
├── __main__.py # CLI entry point (click)
├── config.py # KongConfig, LLMProvider, LLMConfig
├── db.py # SQLite config store (~/.config/kong/)
├── banner.py # ASCII banner, API key helpers
├── agent/
│ ├── supervisor.py # Pipeline orchestrator
│ ├── triage.py # Function enumeration + classification
│ ├── analyzer.py # LLM-guided function analysis
│ ├── queue.py # BFS work queue from call graph
│ ├── signatures.py # Known function signature matching
│ ├── prompts.py # System prompt + output schema
│ ├── events.py # Phase/event types for pipeline tracing
│ └── models.py # FunctionResult dataclass
├── ghidra/
│ ├── client.py # In-process GhidraClient (PyGhidra/JPype)
│ ├── types.py # FunctionInfo, BinaryInfo, XRef, etc.
│ └── environment.py # Ghidra/JDK auto-detection
├── llm/
│ ├── client.py # AnthropicClient
│ ├── openai_client.py # OpenAIClient
│ ├── usage.py # TokenUsage, cost tracking, pricing registry
│ └── limits.py # Model-specific limits + rate limiter
├── normalizer/
│ └── syntactic.py # Decompiler output normalization
├── synthesis/
│ └── semantic.py # Global name unification + struct synthesis
├── evals/
│ ├── harness.py # Ground-truth extraction + scoring
│ └── metrics.py # symbol_accuracy, type_accuracy
├── export/
│ └── source.py # analysis.json + Ghidra writeback
├── signatures/
│ ├── stdlib.json # C standard library signatures
│ └── crypto.json # Cryptographic function signatures
└── tui/
└── app.py # Textual TUI
Kong Apache License 2.0 के तहत लाइसेंस प्राप्त है। Kong एक मुफ्त और ओपन सोर्स प्रोजेक्ट है।
यह लाइसेंस Ghidra लाइसेंस के साथ संगत है, और व्यावसायिक उपयोग की अनुमति देता है।
समस्याएँ और सुविधा अनुरोध GitHub Issues के माध्यम से स्वागत योग्य हैं।
साथ ही, मुझसे X या LinkedIn पर संपर्क करने में संकोच न करें!
KeygraphHQ के Shannon प्रोजेक्ट को एक बड़ी सराहना, जिसने इस प्रोजेक्ट के लिए प्रेरणा प्रदान की। मेरी प्रेरणा उसी तरह की पाइपलाइन को दोहराने से प्रेरित थी जिसका उपयोग Shannon अपने वेब-आधारित पेंटेस्टिंग टूल के लिए करता है, और इसे बाइनरी विश्लेषण और डीकंपाइलेशन के लिए अनुकूलित करना।
बंदर से डरो।
कोंग: दुनिया का पहला AI रिवर्स इंजीनियर
| C | C++ | Go | Rust |
|---|
| x86 | उच्च | उच्च | मध्यम | मध्यम |
| x86-64 | उच्च | उच्च | मध्यम | मध्यम |
| ARM (32-bit) | उच्च | उच्च | मध्यम | निम्न |
| AArch64 | उच्च | उच्च | मध्यम | निम्न |
| MIPS | मध्यम | मध्यम | निम्न | निम्न |
| PowerPC | मध्यम | मध्यम | निम्न | निम्न |
| Variable | Required | विवरण |
|---|
ANTHROPIC_API_KEY | कम से कम एक | Anthropic API कुंजी (Claude) |
OPENAI_API_KEY | कम से कम एक | OpenAI API कुंजी (GPT-4o) |
GHIDRA_INSTALL_DIR | नहीं | Ghidra इंस्टॉलेशन का पथ (सेट नहीं होने पर स्वचालित रूप से पता लगाया जाता है) |
JAVA_HOME | नहीं | JDK का पथ (सेट नहीं होने पर स्वचालित रूप से पता लगाया जाता है) |
KONG_CONFIG_DIR | नहीं | कॉन्फ़िग निर्देशिका को ओवरराइड करें (डिफ़ॉल्ट: ~/.config/kong) |