
डीकंपाइल बाइनरीज़ में कमजोरियों की पहचान करने के लिए BianryNinja प्लगइन, जिसमें प्रोग्रामैटिक स्कैन और LLM सपोर्ट दोनों शामिल हैं।
Binary Ninja के लिए LLM-सहायता प्राप्त भेद्यता अनुसंधान।
VulnFanatic-NG एक साइडबार पैनल जोड़ता है जो वर्तमान बाइनरी को स्कैन करता है और एक LLM — डिफ़ॉल्ट रूप से स्थानीय रूप से होस्ट किया गया OpenAI-संगत मॉडल, या Anthropic Claude, Google Gemini, या Azure OpenAI (देखें LLM बैकएंड) — से पूछता है कि क्या संदिग्ध कोड वास्तव में कमजोर है। यह मुख्य रूप से Binary Ninja के डीकंपाइलर आउटपुट (HLIL) से काम करता है, जब आवश्यक हो तो असेंबली पर वापस आता है, और केवल पुष्टि की गई समस्याओं की रिपोर्ट करता है जिनके कोड पर क्लिक करने योग्य संदर्भ होते हैं।
एक स्कैन अधिकतम तीन चरणों में चलता है (चरण 3 ऑप्ट-इन और केवल ऑनलाइन है):
rules/phase1_rules.json में परिभाषित खतरनाक फ़ंक्शनों के कॉल साइट ढूँढता है — strcpy, memcpy, sprintf/फ़ॉर्मेट स्ट्रिंग, system, alloca, scanf, कमांड/निष्पादन API, कमज़ोर RNG, free/delete परिवार (use-after-free / double-free), निश्चित बफ़र में अविश्वसनीय इनपुट पढ़ना (recv/read/fread/ReadFile), SQL इंजेक्शन (sqlite3_exec/mysql_query/PQexec), अक्षम TLS प्रमाणपत्र सत्यापन (SSL_CTX_set_verify/curl), SSRF, और अनुचित विशेषाधिकार प्रबंधन (setuid/setresgid), memset/bzero परिवार, और हमलावर-नियंत्रित लंबाई के साथ तुलना (memcmp/strncmp → प्रमाणीकरण बाईपास) — C/C++, Win32, और (सर्वोत्तम प्रयास) Rust FFI पर। इसमें मजबूत _chk (FORTIFY) और Annex-K _s वेरिएंट शामिल हैं। सीमित फ़ॉर्मेटेड-आउटपुट फ़ंक्शन (snprintf और वेरिएंट) के अपने डिफ़ॉल्ट-सुरक्षित नियम हैं ताकि सही आकार तर्क को ओवरफ़्लो के रूप में रिपोर्ट न किया जाए। कॉल साइट तीन तरीकों से पाए जाते हैं: नामित प्रतीकों के लिए प्रत्यक्ष कॉल; फ़ॉरवर्डिंग थंक / PLT स्टब के माध्यम से रूट की गई कॉल (वास्तविक कॉलर्स पुनर्प्राप्त किए जाते हैं, इसलिए एक आयात जो केवल स्टब के माध्यम से पहुँचा जाता है वह छूटता नहीं है); और — जब तक vulnfanatic.scanIndirectCalls बंद न हो — फ़ंक्शन पॉइंटर या vtable के माध्यम से भेजी गई अप्रत्यक्ष कॉल जिन्हें Binary Ninja ने खतरनाक फ़ंक्शन में हल किया है। प्रत्येक कॉल साइट के लिए यह एक अंतरप्रक्रियात्मक, डीकंपाइलर-केंद्रित संदर्भ बनाता है, जो एक टोकन सीमा (डिफ़ॉल्ट 100k) पर बजट किया जाता है:
__*_chk और बाउंड-जांचे गए *_s वेरिएंट अतिरिक्त अग्रणी तर्क लेते हैं, जो फ़ॉर्मेट/आकार/गंतव्य स्थिति को स्थानांतरित करते हैं,s->buf s के पॉइंटर आकार के बजाय फ़ील्ड के वास्तविक सरणी आकार में हल हो जाए; प्रकार अनुभाग में स्ट्रक्चर परिभाषाएँ प्रति-फ़ील्ड बाइट आकार भी रखती हैं,0x40 या [0, 0xff] तक सीमित सिद्ध), जिसका उपयोग मॉडल बफ़र क्षमता के विरुद्ध आकार की तुलना करते समय अनुमान लगाने के बजाय जमीनी सत्य के रूप में करता है,vulnfanatic.includeStackLayout),if/लूप/switch स्थितियाँ),वह संदर्भ प्लस एक नियम-विशिष्ट प्रॉम्प्ट मॉडल को भेजा जाता है, जो एक संरचित निर्णय लौटाता है। गैर-समस्याएँ हटा दी जाती हैं। प्रॉम्प्ट एक मजबूत स्थानीय कोड मॉडल (जैसे Qwen2.5-Coder) के लिए तैयार किए गए हैं और इसे पूरे प्रवाह का विश्लेषण करने और केवल JSON आउटपुट करने का निर्देश देते हैं।
मॉडल को रिकॉल पसंद करने का निर्देश दिया गया है — प्रशंसनीय, सुरक्षा-प्रासंगिक समस्याओं की रिपोर्ट करें और अनिश्चितता को आत्मविश्वास के माध्यम से व्यक्त करें न कि किसी ऐसी चीज़ को हटाएँ जिसे वह पूरी तरह से साबित नहीं कर सकता। यह एक स्क्रैचपैड में अपना काम दिखाता है जो उन शाब्दिक कोड स्निपेट को उद्धृत करता है जिन पर यह निर्भर था (इनपुट स्रोत, प्रत्येक गार्ड, आकार/लंबाई, प्रासंगिक प्रकार, और सिंक), जो निष्कर्ष पर संग्रहीत किया जाता है ताकि आप तर्क का ऑडिट कर सकें।
प्रत्येक निष्कर्ष में एक आत्मविश्वास (उच्च/मध्यम/निम्न) होता है: उच्च = पूरी श्रृंखला संदर्भ में दिखाई गई है; मध्यम = संभावित, एक या दो लिंक अनुमानित; निम्न = एक सुराग जो मैन्युअल समीक्षा के योग्य है। यह मुख्य मीट्रिक है (मॉडल का गंभीरता अनुमान एक द्वितीयक क्षेत्र है)। vulnfanatic.minConfidence सेट करें ताकि एक सीमा से नीचे कुछ भी हटा दिया जाए।
डिफ़ॉल्ट रूप से VulnFanatic-NG रिकॉल (वास्तविक समस्याओं को पकड़ना) का पक्ष लेता है। यदि आपको बहुत अधिक झूठी सकारात्मकताएँ मिलती हैं, तो किसी के साथ कसें:
vulnfanatic.validationPass (डिफ़ॉल्ट बंद) — एक दूसरा LLM पास चलाता है जो प्रत्येक चिह्नित समस्या की उसी संदर्भ के विरुद्ध दोबारा जाँच करता है (स्क्रैचपैड स्निपेट को सत्यापित करता है और प्रवाह को फिर से ट्रेस करता है) और निर्णय या आत्मविश्वास को सही कर सकता है। चिह्नित उम्मीदवारों के लिए LLM कॉल दोगुनी करता है।
vulnfanatic.validatorModel (प्लस validatorProvider / validatorBaseUrl / validatorApiKey) सेट करें ताकि दूसरा पास एक भिन्न मॉडल पर चले। एक दूसरी राय एक स्वतंत्र मॉडल से कहीं अधिक उपयोगी होती है — यह कम अंधे धब्बे साझा करता है और पहले निर्णय को रबर-स्टैम्प करने की संभावना बहुत कम होती है (मॉडल अपने स्वयं के उत्तरों को पसंद करते हैं)। एक अच्छा पैटर्न एक कैस्केड है: एक तेज़ मॉडल विश्लेषक के रूप में (व्यापक रिकॉल) और आपका सबसे मजबूत मॉडल वैलिडेटर के रूप में, जो केवल चिह्नित उम्मीदवारों पर चलता है। वैलिडेटर मॉडल को खाली छोड़ें ताकि विश्लेषक मॉडल के साथ सत्यापन हो। वैलिडेटर विश्लेषक से कम से कम उतना ही सक्षम होना चाहिए — एक कमजोर मुख्य रूप से झूठी अस्वीकृतियाँ जोड़ता है। प्रदाता/बेस URL/कुंजी/मॉडल को छोड़कर सब कुछ विश्लेषक कनेक्शन सेटिंग्स से विरासत में मिलता है; एक खाली वैलिडेटर कुंजी विश्लेषक कुंजी का पुन: उपयोग करती है; और यदि वैलिडेटर एंडपॉइंट अप्राप्य है, तो पहला निर्णय रखा जाता है (निष्कर्ष कभी भी वैलिडेटर आउटेज के कारण खोता नहीं है)।vulnfanatic.minConfidence (डिफ़ॉल्ट low) — medium/ तक बढ़ाएँ ताकि केवल मजबूत निष्कर्ष रिपोर्ट हों।गति. अधिकांश प्रति-कॉल विलंबता लिखित तर्क है, इसलिए vulnfanatic.verdictReasoning नियंत्रित करता है कि मॉडल कितना लिखता है:
concise (डिफ़ॉल्ट) — एक संक्षिप्त 1-3 वाक्य का तर्क, कोई शाब्दिक कोड नहीं। full की तुलना में बहुत तेज़ और थोड़ी सटीकता हानि; आप vulnfanatic.maxResponseTokens भी कम कर सकते हैं।full — उद्धृत स्निपेट के साथ विस्तृत स्क्रैचपैड (सबसे अधिक ऑडिट योग्य, सबसे धीमा)।none — केवल निर्णय। सबसे तेज़; इसे तर्क-सक्षम बैकएंड (vulnfanatic.reasoningEffort) के साथ जोड़ें ताकि मॉडल का आंतरिक सोच काम करे। एक सादे स्थानीय मॉडल पर none सटीकता खो देता है (कोई विचार-श्रृंखला बिल्कुल नहीं)।हमेशा चालू रहने वाली सटीकता सुविधाएँ (वे मॉडल को सूचित करती हैं बिना निष्कर्षों को दबाए):
_s (Annex K) और _chk (FORTIFY) वेरिएंट और लंबाई-सीमित APIs को सुरक्षित मानते हैं जब तक कि आकार तर्क स्वयं गलत न हो।ऑफ़लाइन स्कैन करें बटन चरण 1 को बिना किसी मॉडल के चलाता है — पूरी तरह से phase1_rules.json में प्रत्येक नियम के offline ब्लॉक में घोषित प्रोग्रामेटिक अनुमान। यह खतरनाक कॉल साइटों को चिह्नित करता है और स्पष्ट रूप से सुरक्षित को समाप्त करता है, एक अनुमानात्मक आत्मविश्वास निर्दिष्ट करता है:
memcpy/memmove, एक स्थिर स्ट्रिंग से एक strcpy, एक स्थिर फ़ॉर्मेट के साथ एक printf, एक स्थिर कमांड के साथ एक system, आदि — ऐसी कॉलें जिनका नियंत्रक तर्क एक संकलन-समय स्थिरांक है और इसलिए हमलावर-नियंत्रित नहीं हो सकता। "स्थिरांक" में वे मान शामिल हैं जिन्हें Binary Ninja के मान-सेट विश्लेषण ने ऊपर की ओर एक निश्चित संख्या पर पिन किया है, न कि केवल शाब्दिक तर्क।strlen/आकार तुलना, if (len < …)) की तुलना करने वाली एक वास्तविक बाउंड/सत्यापन जाँच पाई गई थी — जिसमें पथ पर कॉल किए गए फ़ंक्शन शामिल हैं — इसलिए इसे पहले से ही संभाला जा सकता है। (एक शाखा जो केवल तुलना किए बिना चर का उल्लेख करती है, अब गिना नहीं जाता, जो गलत अवक्रमण के स्रोत को हटा देता है।)अनुमान नियमों में एक छोटी घोषणात्मक शब्दावली का उपयोग करते हैं (constant_safe_args, eliminate_if_all_args_constant, format_arg_lookup, length_guard_vars, base_confidence, skip) जिसका मूल्यांकन पाइथन predicates द्वारा किया जाता है — कोई एम्बेडेड कोड नहीं exec करने के लिए। अधिकांश नियमों में एक ऑफ़लाइन परिभाषा होती है (ओवरफ़्लो, फ़ॉर्मेट-स्ट्रिंग, कमांड-निष्पादन, scanf, पथ हैंडलिंग, कमज़ोर-RNG, कमज़ोर संख्यात्मक पार्सिंग, विशेषाधिकार परिवर्तन, आवंटन आकार, …)। केवल दो श्रेणियाँ जिन्हें वास्तव में अर्थपूर्ण विश्लेषण की आवश्यकता है, उन्हें ऑफ़लाइन छोड़ दिया जाता है और LLM के लिए छोड़ दिया जाता है: free/delete परिवार (use-after-free / double-free, जिसके लिए पॉइंटर-जीवनकाल ट्रैकिंग की आवश्यकता है) और TLS सत्यापन (बग एक विशिष्ट स्थिर मान है जैसे SSL_VERIFY_NONE)। ऑफ़लाइन सारांश रिपोर्ट करता है कि कितनी साइटों को चिह्नित / समाप्त / छोड़ा गया (LLM की आवश्यकता है) / विफल हुआ, इसलिए गणनाएँ जुड़ती हैं। यह एक तेज़ ट्रायेज है; वास्तविक निर्णय के लिए — और छोड़ी गई श्रेणियों के लिए — पूर्ण LLM स्कैन चलाएँ।
ऑफ़लाइन निष्कर्ष अभी भी वही पूर्ण अंतरप्रक्रियात्मक संदर्भ बनाते हैं जो एक ऑनलाइन स्कैन भेजेगा (केवल चिह्नित साइटों के लिए) और इसे संग्रहीत करता है, इसलिए एक बार जब आप उन्हें ट्रायेज कर लेते हैं तो उन्हें ऑनलाइन निष्कर्षों की तरह फाइन-ट्यूनिंग डेटा के रूप में निर्यात किया जा सकता है। यदि आप अधिकतम ऑफ़लाइन गति चाहते हैं तो vulnfanatic.offlineBuildContext से अक्षम करें।
केवल तभी चलता है जब बाइनरी में वास्तविक प्रतीक / चर नाम दिखाई देते हैं। rules/phase2_rules.json में परिभाषित सुरक्षा-संवेदनशील फ़ंक्शन ढूँढता है — प्रमाणीकरण, क्रिप्टोग्राफी (कमज़ोर एल्गोरिदम सहित), हस्ताक्षर/प्रमाणपत्र सत्यापन, सत्र/टोकन हैंडलिंग, पहुँच नियंत्रण, गुप्त/कुंजी हैंडलिंग, इनपुट सत्यापन, गैर-स्थिर-समय गुप्त तुलना, और असुरक्षित डीसीरियलाइज़ेशन — फ़ंक्शन नाम और संदर्भित स्ट्रिंग द्वारा मिलान किया जाता है, फिर मॉडल द्वारा ऑडिट किया जाता है।
फ़ॉल्ट-इंजेक्शन (वोल्टेज/क्लॉक/EM ग्लिचिंग) और साइड-चैनल (टाइमिंग/पावर) हमलों के विरुद्ध एक फर्मवेयर सख्तीकरण ऑडिट, हार्डवेयर-हमला शमन मार्गदर्शन पर आधारित। चरण 1-2 के विपरीत (जो बग ढूँढते हैं), चरण 3 एक सुरक्षा-महत्वपूर्ण फ़ंक्शन पर एक लापता या उल्लंघनित सख्तीकरण नियंत्रण की रिपोर्ट करता है — उदाहरण के लिए: डिफ़ॉल्ट-फ़ेल शाखाएँ, दोहरी-जाँच की गई सुरक्षा निर्णय, पोस्ट-लूप काउंटर सत्यापन, उच्च-हेमिंग-दूरी अवस्था स्थिरांक (सादे 0/1 के बजाय), स्थिर-समय पूर्ण-लंबाई गुप्त तुलना, यादृच्छिक-ऑफ़सेट गुप्त पहुँच/साफ़ करना, एन्क्रिप्ट-फिर-सत्यापित (एंटी-DFA), नियंत्रण-प्रवाह अखंडता काउंटर, उपयोगकर्ता-भूमि क्रिप्टो से बचना, और कच्ची कुंजी सामग्री को सीधे न संभालना (rules/phase3_rules.json)।
क्योंकि कंपाइलर ऑप्टिमाइज़ेशन स्रोत-स्तर की सुरक्षा को हटा सकते हैं, इन नियंत्रणों को संकलित बाइनरी पर सत्यापित करना सबसे अच्छा है — बिल्कुल यही जाँच करता है। चरण 3 केवल LLM (ऑनलाइन), प्रतीक-गेटेड, और डिफ़ॉल्ट रूप से अक्षम है; इसे नए स्कैन टैब पर चरण 3 चेकबॉक्स के साथ प्रति स्कैन सक्षम करें (यह ऑफ़लाइन मोड में कभी नहीं चलता)।
निष्कर्ष एक तालिका (स्थिति, आत्मविश्वास, चरण, CWE, फ़ंक्शन, पता, शीर्षक) में सूचीबद्ध किए गए हैं, जिसमें एक विवरण फलक है जो स्पष्टीकरण, विश्लेषण स्क्रैचपैड, और सत्यापन नोट्स दिखाता है। किसी पंक्ति पर डबल-क्लिक करें बाइनरी दृश्य को कोड पर नेविगेट करने के लिए।
प्रत्येक निष्कर्ष अट्रायेज से शुरू होता है। राइट-क्लिक करें एक पंक्ति पर इसकी स्थिति सेट करने के लिए — वास्तविक समस्या के रूप में चिह्नित करें, झूठी सकारात्मक के रूप में चिह्नित करें, या अट्रायेज के रूप में चिह्नित करें। प्रत्येक स्थिति परिवर्तन एक "कारण प्रदान करें:" टेक्स्ट बॉक्स पॉप अप करता है (कारण निष्कर्ष के साथ संग्रहीत किया जाता है)। तालिका स्थिति को स्पष्ट करती है: वास्तविक समस्याएँ हरे/बोल्ड और शीर्ष पर सॉर्ट होती हैं, झूठी सकारात्मकताएँ ग्रे/स्ट्राइकथ्रू और नीचे सॉर्ट होती हैं, अट्रायेज उनके आत्मविश्वास रंग के साथ बीच में बैठते हैं। एक सारांश पंक्ति गणनाएँ दिखाती है।
प्रत्येक परिणाम टैब में एक ट्रायेज किए गए (फाइन-ट्यूनिंग) निर्यात करें… बटन है जो केवल ट्रायेज किए गए निष्कर्षों (वास्तविक समस्या + झूठी सकारात्मक) को OpenAI चैट-फ़ॉर्मेट JSONL में फाइन-ट्यूनिंग के लिए निर्यात करता है: प्रत्येक उदाहरण मूल सिस्टम+उपयोगकर्ता प्रॉम्प्ट को मानव-सही निर्णय के साथ सहायक लक्ष्य के रूप में जोड़ता है (एक झूठी सकारात्मक is_vulnerable=false आपके कारण के साथ सिखाती है; एक वास्तविक समस्या is_vulnerable=true को मजबूत करती है), ताकि आप अपनी बाइनरी पर मॉडल की सटीकता को पुनरावृत्त रूप से सुधार सकें।
विवरण फलक में दिखाया गया प्रति-निष्कर्ष संदर्भ (और फाइन-ट्यूनिंग प्रॉम्प्ट को पुनर्निर्माण करने के लिए उपयोग किया जाता है) डिफ़ॉल्ट रूप से पूर्ण रखा जाता है — vulnfanatic.storedContextChars द्वारा नियंत्रित (0 = असीमित; एक सकारात्मक कैप सेट करें, जैसे 4000, BNDB वृद्धि को सीमित करने के लिए संदर्भ निष्ठा की कीमत पर)।
पैनल टैब किया गया है। पहला टैब हमेशा नया स्कैन होता है, जहाँ आप सेट करते हैं:
<timestamp> <मोड>, उदा. 2026-06-15 14:03:50 offline),फिर स्कैन शुरू करें या ऑफ़लाइन स्कैन करें दबाएँ। प्रत्येक रन अपना स्वयं का परिणाम टैब खोलता है और निष्कर्ष लाइव स्ट्रीम होते हैं। सभी स्कैन BNDB में संग्रहीत होते हैं, इसलिए आप उदा. एक ऑफ़लाइन स्कैन रख सकते हैं और बाद में एक ऑनलाइन स्कैन जोड़ सकते हैं, या विभिन्न नियम सेटों के साथ रनों की तुलना कर सकते हैं, साथ-साथ — वे डेटाबेस को फिर से खोलने पर टैब के रूप में फिर से प्रकट होते हैं। एक टैब बंद करना उस स्कैन को BNDB से स्थायी रूप से हटा देता है — दुर्घटनाओं को रोकने के लिए यह एक पुष्टिकरण पॉप अप करता है जिसमें परिणामों को हमेशा के लिए हटाएं बटन सक्रिय होने से पहले "मैं पुष्टि करता हूँ कि मैं <नाम> से परिणाम हमेशा के लिए खो दूंगा।" को टिक करना आवश्यक है। वर्तमान स्कैन निर्यात करें… चयनित टैब को Markdown/JSON में लिखता है।
प्रत्येक खुली बाइनरी का अपना स्वतंत्र पैनल राज्य होता है — अपने स्वयं के स्कैन टैब और चल रहे स्कैन। एक बाइनरी में एक स्कैन शुरू करना और दूसरे पर स्विच करना दूसरी बाइनरी के परिणाम दिखाता है (और आपको इसे अलग से स्कैन करने देता है); पहली बाइनरी का स्कैन पृष्ठभूमि में चलता रहता है और जब आप वापस स्विच करते हैं तो वैसा ही होता है।
इस प्लगइन का पैकेज फ़ोल्डर vulnfanatic_ng नाम का है (एक मान्य पाइथन पहचानकर्ता — Binary Ninja प्लगइन फ़ोल्डर नाम को एक मॉड्यूल के रूप में आयात करता है, इसलिए VulnFanatic-NG जैसा हाइफ़नेटेड नाम लोड नहीं होगा)।
(वैकल्पिक) Binary Ninja के Python में सटीक टोकन गणना स्थापित करें: ``` pip install tiktoken
vulnfanatic_ng फ़ोल्डर को अपने Binary Ninja उपयोगकर्ता प्लगइन्स निर्देशिका में सिमलिंक करें या कॉपी करें:
~/Library/Application Support/Binary Ninja/plugins/~/.binaryninja/plugins/%APPDATA%\Binary Ninja\plugins\उदाहरण के लिए, macOS पर: ``` ln -s "$(pwd)/vulnfanatic_ng" "$HOME/Library/Application Support/Binary Ninja/plugins/vulnfanatic_ng"
Binary Ninja को पुनरारंभ करें (या Reload Plugins चलाएँ)। दाएँ साइडबार में एक VF आइकन दिखाई देता है।
सेटिंग्स खोलें (गियर / Edit ▸ Preferences ▸ Settings) और vulnfanatic खोजें। कम से कम निम्नलिखित सेट करें:
vulnfanatic.apiProvider चुनता है कि अनुरोध कैसे बनाए और प्रमाणित किए जाएँ। निर्णय अनुबंध (और सभी नियम प्रॉम्प्ट) सभी प्रदाताओं पर समान हैं।
AWS Bedrock का उपयोग
openaiप्रदाता के माध्यम से इसके OpenAI-संगत एंडपॉइंट के ज़रिए किया जा सकता है, इसलिए इसे एक समर्पित बैकएंड की आवश्यकता नहीं है।
अन्य उपयोगी सेटिंग्स: vulnfanatic.maxContextTokens (डिफ़ॉल्ट 100000),
vulnfanatic.maxResponseTokens, vulnfanatic.temperature,
vulnfanatic.reasoningEffort (off/low/medium/high; डिफ़ॉल्ट high — मॉडल को उत्तर देने से पहले सोचने के लिए कहता है जहाँ समर्थित है, प्रति प्रदाता मैप किया गया: openai/azure reasoning_effort, anthropic अनुकूली सोच + output_config.effort, google डायनामिक thinkingConfig; यदि कोई मॉडल इसे अस्वीकार करता है तो स्वचालित रूप से हटा दिया जाता है और पुनः प्रयास किया जाता है),
vulnfanatic.requestTimeoutSec,
vulnfanatic.callPathMaxDepth / ,
(कॉल पथ के साथ फ़ंक्शंस के डीकंपाइल किए गए बॉडी शामिल करें; डिफ़ॉल्ट चालू) / (सीमा, डिफ़ॉल्ट 12),
(पथ के साथ कॉल किए गए अन्य फ़ंक्शंस भी शामिल करें, जिनमें सीमा/सत्यापन जाँच हो सकती है; डिफ़ॉल्ट चालू) /
(सीमा, डिफ़ॉल्ट 12),
(struct/union/enum परिभाषाएँ शामिल करें; डिफ़ॉल्ट चालू) /
(सीमा, डिफ़ॉल्ट 24),
(कॉल तर्कों को उनके उत्पादकों/उपभोक्ताओं के माध्यम से वापस ट्रेस करें और उन बॉडी को शामिल करें; डिफ़ॉल्ट चालू) /
(सीमा, डिफ़ॉल्ट 8),
(कॉल करने वाले फ़ंक्शन का स्टैक-वेरिएबल लेआउट शामिल करें जब उसमें निश्चित-आकार का बफ़र हो; डिफ़ॉल्ट चालू),
(हल किए गए फ़ंक्शन पॉइंटर/vtable के माध्यम से भेजे गए खतरनाक कॉल का भी मिलान करें; डिफ़ॉल्ट चालू — बहुत बड़े बाइनरी पर तेज़ स्कैन के लिए बंद करें),
(दूसरा डबल-चेक पास चलाएँ; डिफ़ॉल्ट बंद) /
/ /
/ (सत्यापन पास को एक अलग, स्वतंत्र मॉडल पर चलाएँ; खाली = विश्लेषक के समान मॉडल) /
(//; इससे नीचे के निष्कर्ष हटाएँ; डिफ़ॉल्ट
), (उन साइटों की रिपोर्ट करें जिन्हें मॉडल स्कोर नहीं कर सका -आत्मविश्वास वाले "Unscored" लीड के रूप में, न कि उन्हें हटाने के; डिफ़ॉल्ट चालू),
(सभी-स्थिर ओवरफ़्लो कॉल साइटों को छोड़ें;
डिफ़ॉल्ट बंद), (//; मॉडल प्रति निर्णय कितना तर्क लिखता है — गति का मुख्य लीवर; डिफ़ॉल्ट ),
/
/ (प्रत्येक चरण को सक्षम करें; चरण 3 केवल ऑनलाइन है और आमतौर पर यहाँ के बजाय New Scan चेकबॉक्स के माध्यम से प्रति-स्कैन टॉगल किया जाता है),
/ ,
(टोकन अनुमानों के लिए tiktoken एन्कोडिंग; यदि tiktoken स्थापित नहीं है तो वर्ण अनुमान पर वापस आता है),
(ऑफ़लाइन निष्कर्षों के लिए पूर्ण संदर्भ बनाएँ ताकि उन्हें फ़ाइन-ट्यूनिंग के लिए निर्यात किया जा सके; डिफ़ॉल्ट चालू),
(कंसोल पर वर्बोज़ पाइपलाइन ट्रेस; डिफ़ॉल्ट बंद) /
(सभी बाइनरी-पहचान विवरणों को हटाएँ ताकि लॉग साझा किया जा सके — नीचे देखें),
, (HTTPS
प्रमाणपत्र सत्यापित करें; डिफ़ॉल्ट चालू) / (HTTPS के लिए CA बंडल — यदि मिलता है तो समस्या निवारण देखें), और
/ /
(डिटेक्शन और प्रॉम्प्ट को अनुकूलित करने के लिए अपनी स्वयं की नियम फ़ाइलों को इंगित करें).
सुरक्षा नोट: API कुंजी Binary Ninja की सेटिंग्स में सादे पाठ में संग्रहीत होती है। संवेदनशील कुंजियों के लिए पर्यावरण चर ओवरराइड को प्राथमिकता दें।
vulnfanatic.apiBaseUrl को शाब्दिक मान TEST पर सेट करें ताकि बिना किसी LLM के चलाया जा सके:
/tmp/vulnfanatic_ng/<binary>-<timestamp>/ के अंतर्गत अपनी स्वयं की फ़ाइल में लिखा जाता है।इसका उपयोग यह निरीक्षण और मान्य करने के लिए करें कि VulnFanatic-NG मॉडल को वास्तव में क्या भेजेगा, और मॉडल समय खर्च किए बिना नियम प्रॉम्प्ट/संदर्भ पर पुनरावृति करने के लिए।
vulnfanatic.debugLogging चालू करें ताकि स्कैन पाइपलाइन (ऑनलाइन और ऑफ़लाइन दोनों) का एक वर्बोज़, चरण-दर-चरण ट्रेस Binary Ninja लॉग/कंसोल पर प्रिंट हो: प्रत्येक कॉल साइट, प्रत्येक छोड़/उन्मूलन निर्णय, संदर्भ निर्माण (केवल आकार), प्रत्येक LLM अनुरोध (प्रदाता/मॉडल/एंडपॉइंट, पुनर्प्रयास, फ़ॉलबैक), प्रत्येक निर्णय, और प्रत्येक रिपोर्ट किया गया निष्कर्ष। API कुंजियाँ कभी लॉग नहीं की जातीं।
जब डीबग लॉगिंग चालू होती है, एक ऑनलाइन स्कैन प्रत्येक उम्मीदवार को परिणाम तालिका में रखता है, न कि उन्हें हटाने के जो पुष्ट मुद्दे नहीं बनते, प्रत्येक को डीबग-केवल स्थिति (मंद, नीचे की ओर क्रमबद्ध) के साथ टैग किया जाता है:
इसलिए एक डीबग स्कैन प्रति उम्मीदवार /N कुल में एक पंक्ति दिखाता है, और सारांश अलग-अलग मुद्दों बनाम अस्वीकृत/छोड़े/त्रुटि गणनाओं की रिपोर्ट करता है। आप इनमें से किसी भी पंक्ति पर राइट-क्लिक कर सकते हैं ताकि इसे Real Issue या False Positive के रूप में पुनः ट्राइएज किया जा सके (जो इसे फ़ाइन-ट्यूनिंग निर्यात के लिए पात्र बनाता है)। (ऑफ़लाइन स्कैन प्रभावित नहीं होते — वे कभी LLM को कॉल नहीं करते।)
डीबग मोड से स्वतंत्र रूप से, जब कोई मॉडल एक अव्याख्या योग्य प्रतिक्रिया लौटाता है — Gemma का <unused…> जैसा भटका टोकन, JSON के बजाय गद्य, या एक खाली संदेश (केवल एक role, कोई content नहीं) — तो क्लाइंट एक सुधारात्मक पुनर्प्रयास करता है, केवल JSON के लिए पुनः पूछता है जिसमें संरचित-आउटपुट प्रारूप अक्षम होता है; यदि वह सफल होता है तो वह बाकी स्कैन के लिए प्रारूप को बंद रखता है। क्लाइंट content खाली होने पर तर्क चैनल (reasoning_content / reasoning) भी पढ़ता है, इसलिए तर्क मॉडल जो अपना उत्तर वहाँ रखते हैं, वे अभी भी काम करते हैं।
खाली-संदेश मामला GPT-OSS / o1 जैसे तर्क मॉडल के साथ आम है जो OpenAI-संगत API (उदा. mlx-community/gpt-oss-20b) के माध्यम से प्रस्तुत किए जाते हैं: response_format=json_object सेट होने पर, सामंजस्य "अंतिम" उत्तर चैनल अक्सर दबा दिया जाता है और सर्वर बिना किसी सामग्री के {"role": "assistant"} लौटाता है। ये मॉडल अपना पूरा आउटपुट बजट तर्क चैनल पर जला सकते हैं और बीच में सोचते-सोचते ट्रंकेटेड हो सकते हैं, बिना किसी JSON के गद्य लौटाते हैं। ऑटो-पुनर्प्रयास प्रारूप-संबंधित मामलों को पुनर्प्राप्त करता है; यदि यह बना रहता है, तो vulnfanatic.sendJsonResponseFormat बंद करें, vulnfanatic.reasoningEffort कम करें (ताकि सोच पर कम बजट खर्च हो), और/या vulnfanatic.maxResponseTokens बढ़ाएँ। एक लगातार <unused…>/कचरा उत्तर इसके बजाय आमतौर पर इसका मतलब है कि प्रॉम्प्ट मॉडल के संदर्भ विंडो से अधिक है (vulnfanatic.modelContextWindow सेट करें और/या सर्वर की संदर्भ लंबाई बढ़ाएँ), या वह मॉडल सख्त JSON आउटपुट के लिए एक खराब फिट है (Gemma की तुलना में Qwen2.5-Coder जैसा कोड मॉडल यहाँ बहुत बेहतर व्यवहार करता है)।
याद रखने वाला फ़ॉलबैक। जब एक उम्मीदवार पुनर्प्रयास के बाद भी स्कोर नहीं किया जा सकता है, तो vulnfanatic.flagUnparseableResponses (डिफ़ॉल्ट चालू) इसे वैसे भी "Unscored" निष्कर्ष के रूप में रिपोर्ट करता है जिसमें UNKNOWN आत्मविश्वास होता है — low से अलग एक मान (मॉडल ने कभी निर्णय नहीं दिया, इसलिए यह कम-आत्मविश्वास का निर्णय नहीं है) जो नीचे की ओर क्रमबद्ध होता है — मॉडल के आंशिक आउटपुट को स्पष्टीकरण के रूप में रखता है, ताकि आप साइट को न खोएं, आप बस इसे मैन्युअल रूप से समीक्षा करें। ऐसी साइटों को हटाने के लिए इसे बंद करें (वे तब केवल विश्लेषण त्रुटियों, या डीबग ERROR पंक्तियों के रूप में सामने आती हैं)।
साथ ही vulnfanatic.debugAnonymous सक्षम करें ताकि लॉग साझा करना सुरक्षित हो: यह उन सभी चीजों को हटा देता है जो विश्लेषण की गई फ़ाइल की पहचान कर सकती हैं — प्रतीक/वेरिएबल नाम और पते प्रति-रन साल्टेड हैश बन जाते हैं (एक रन के भीतर अभी भी संगत ताकि प्रवाह का अनुसरण किया जा सके), फ़ाइल का नाम छिपा हुआ है, निष्कर्ष पाठ को <redacted> से बदल दिया गया है, LLM एंडपॉइंट होस्ट हैश किया गया है, और डीकंपाइल कोड / प्रॉम्प्ट / संदर्भ को केवल आकार के रूप में लॉग किया जाता है (कभी सामग्री नहीं)। ताकि आप अपने बाइनरी के बारे में कुछ भी प्रकट किए बिना किसी समस्या की रिपोर्ट करने के लिए डीबग लॉग भेज सकें।
निष्कर्ष — उनकी झूठी-सकारात्मक स्थिति सहित — Binary Ninja डेटाबेस में संग्रहीत होते हैं। जब आप डेटाबेस सहेजते हैं तो वे .bndb में लिखे जाते हैं (और यदि .bndb पहले से मौजूद है तो तुरंत फ्लश हो जाते हैं), इसलिए वे पुनः खोलने पर बने रहते हैं।
स्कैन प्रत्येक मिलान की गई कॉल साइट (कोई सीमा नहीं) का विश्लेषण करता है, जो स्थानीय मॉडलों के लिए उपयुक्त है। एक होस्ट किए गए/भुगतान वाले एंडपॉइंट के लिए, बड़े बाइनरी पर मात्रा का ध्यान रखें।
दोनों नियम फ़ाइलें एक साझा system_prompt और output_schema के साथ एक आवरण साझा करती हैं, साथ ही rules की एक सूची। एक बंडल की गई फ़ाइल को कॉपी करें, फ़ंक्शन/कीवर्ड/प्रॉम्प्ट संपादित करें, और vulnfanatic.rulesPhase1Path / vulnfanatic.rulesPhase2Path को अपनी प्रतिलिपि पर इंगित करें। चरण 1 नियम functions (सटीक) और name_regex द्वारा मिलान करते हैं; चरण 2 नियम name_keywords, name_regex, और string_keywords द्वारा मिलान करते हैं। प्रत्येक नियम का prompt {function} प्लेसहोल्डर का उपयोग कर सकता है।
ट्राइएज किए गए निर्यात को सीधे मॉडल में वापस फीड करने के लिए डिज़ाइन किया गया है। कई बाइनरी में निष्कर्षों को ट्राइएज करने और प्रत्येक पर एक्सपोर्ट ट्राइएज्ड (फ़ाइन-ट्यूनिंग)… क्लिक करने (.jsonl फ़ाइलों को एक फ़ोल्डर में एकत्रित करने) के बाद, scripts/finetune_mlx.py उन पर एक MLX LoRA फ़ाइन-ट्यून चलाता है।```bash
pip install mlx-lm # Apple Silicon / macOS
python scripts/finetune_mlx.py ./exports
--model mlx-community/Qwen2.5-Coder-7B-Instruct-4bit
--adapter-path ./vf-adapters --iters 800
python scripts/finetune_mlx.py ./exports --model
--fuse --fused-path ./vf-qwen-coder-vuln
The script **`training-data फ़ोल्डर`** को अपने पोज़िशनल आर्गुमेंट के रूप में लेता है और base **`--model`** (लोकल पथ या MLX/HF repo id); अन्य पैरामीटर वैकल्पिक हैं: `--adapter-path`, `--valid-split` (0.1), `--iters`, `--batch-size` (एक छोटे स्प्लिट में फिट होने के लिए ऑटो-क्लैम्प), `--num-layers`, `--learning-rate`, `--max-seq-length` (`0` = सबसे लंबे उदाहरण में **ऑटो-फिट**, 16384 पर कैप; इसे बलपूर्वक करने के लिए एक सकारात्मक मान सेट करें), `--fine-tune-type` (`lora`/`dora`/`full`), `--seed`, `--fuse`/`--fused-path`, और `--dry-run` (प्रशिक्षण के बिना डेटा तैयार करें + कमांड प्रिंट करें)। एक literal `--` के बाद कुछ भी `mlx_lm lora` को शब्दशः अग्रेषित किया जाता है। यह फ़ोल्डर में प्रत्येक `*.jsonl` को पुनरावर्ती रूप से मर्ज करता है, चैट उदाहरणों को मान्य और **डी-डुप्लिकेट** करता है, MLX द्वारा अपेक्षित `train.jsonl`/`valid.jsonl` स्प्लिट बनाता है, फिर `python -m mlx_lm lora` लॉन्च करता है (और `--fuse` के साथ `mlx_lm fuse`).
परिणाम को एक OpenAI-संगत सर्वर (`mlx_lm.server --model <path>`) के साथ सर्व करें और अपने ट्यून किए गए मॉडल से स्कैन करने के लिए `vulnfanatic.apiBaseUrl` को वापस उस पर पॉइंट करें।
> VulnFanatic-NG कॉन्टेक्स्ट बड़े होते हैं, इसलिए डिफ़ॉल्ट रूप से स्क्रिप्ट आपके सबसे लंबे उदाहरण में **ऑटो-फिट** करता है `--max-seq-length` (गोल करके ऊपर, **16384 टोकन** पर कैप किया हुआ)। लंबे अनुक्रम प्रशिक्षण मेमोरी पर हावी होते हैं, इसलिए इस कैप के पास एक बड़ा मॉडल एक छोटे Mac को मेमोरी से बाहर कर सकता है। यदि आपके उदाहरण कैप से अधिक हैं तो वे ट्रंकेट हो जाते हैं — निर्यात से पहले एक उच्च `--max-seq-length` (अधिक मेमोरी) या कम `vulnfanatic.storedContextChars` पास करें। यदि प्रशिक्षण एक सिग्नल द्वारा समाप्त हो जाता है (जैसे `exit -10` / SIGBUS), तो यह मेमोरी खत्म होने की क्रैश है: `--max-seq-length` कम करें, `-- --grad-checkpoint` जोड़ें, या एक छोटा मॉडल उपयोग करें।
---
## विकास और परीक्षण
प्लगइन में शून्य आवश्यक तृतीय-पक्ष निर्भरताएँ हैं। शुद्ध मॉड्यूल (`rules`, `tokens`, `llm`, `findings`, `settings`, `prototypes`) एक ऑफ़लाइन परीक्षण सूट द्वारा कवर किए गए हैं जिसे न तो Binary Ninja और न ही नेटवर्क की आवश्यकता है। `tests/` सूट प्रोजेक्ट के सोर्स रिपॉजिटरी में रहता है (यह प्रकाशित प्लगइन के अंदर शिप नहीं किया जाता है); इसे वहाँ से चलाएँ। पैकेज निर्देशिका से आप अभी भी प्रत्येक मॉड्यूल की सिंटैक्स जाँच कर सकते हैं:```
python3 -m py_compile *.py ui/*.py
python3 -m unittest discover -s tests # from the source repository
Binary Ninja-सामना करने वाले मॉड्यूल (context_builder, phase1, phase2) Binary Ninja के बिना साफ़-सुथरे तरीके से आयात होते हैं (उनकी API तक पहुंच सुरक्षित है) लेकिन उनके प्रयोग के लिए एक चालू Binary Ninja की आवश्यकता होती है।
argv[1] को एक निश्चित स्टैक बफर में strcpy करता है और इनपुट पर system() को कॉल करता है)। प्रतीकों (symbols) के साथ संकलित करें ताकि Phase 2 का भी प्रयोग हो सके।vulnfanatic.apiBaseUrl, vulnfanatic.apiKey, तथा vulnfanatic.model सेट करें।SSL: CERTIFICATE_VERIFY_FAILED ... unable to get local issuer certificate —
HTTPS एंडपॉइंट का प्रमाणपत्र ठीक है, लेकिन Binary Ninja के बंडल किए गए Python में इसके सत्यापन के लिए कोई CA बंडल नहीं है (macOS और एम्बेडेड Python में आम है; आप इसे AWS Bedrock, Anthropic, Google, Azure जैसे होस्टेड एंडपॉइंट के साथ देखेंगे)। इसे पसंदीदा क्रम में निम्नलिखित में से किसी एक से ठीक करें:
pip install certifi।
VulnFanatic-NG इसे स्वचालित रूप से उठा लेता है।vulnfanatic.caBundlePath को एक बंडल फ़ाइल (या निर्देशिका) पर सेट करें — उदा. python3 -m certifi द्वारा मुद्रित पथ, या /etc/ssl/cert.pem।vulnfanatic.tlsVerify बंद करें (केवल विश्वसनीय/आंतरिक एंडपॉइंट या सेल्फ-साइन किए गए स्थानीय सर्वर के लिए — इससे प्रमाणपत्र जांच अक्षम हो जाती है)।HTTP 400 ... tokenizer.chat_template is not set — जिस मॉडल को आप सेवा दे रहे हैं उसमें कोई चैट टेम्पलेट नहीं है, इसलिए /chat/completions एंडपॉइंट संदेशों को प्रारूपित नहीं कर सकता। VulnFanatic-NG इस त्रुटि को देखने पर बाकी स्कैन के लिए स्वचालित रूप से /completions एंडपॉइंट पर वापस चला जाता है, इसलिए स्कैनिंग जारी रहती है। पहले असफल अनुरोध से पूरी तरह बचने के लिए, vulnfanatic.apiMode को completions पर सेट करें। वैकल्पिक रूप से, इसे सर्वर-साइड ठीक करें: एक ऐसा मॉडल परोसें जो चैट टेम्पलेट के साथ आता है, या अपने सर्वर को एक पास करें — उदा. vLLM के लिए: --chat-template <template.jinja> (या -Instruct/-Chat मॉडल वेरिएंट का उपयोग करें)। समर्पित चैट टेम्पलेट आमतौर पर चपटे completions प्रॉम्प्ट से बेहतर परिणाम देता है।
No JSON object found ... response looks truncated — मॉडल का उत्तर JSON समाप्त होने से पहले काट दिया गया। दो कारण:
vulnfanatic.maxResponseTokens बढ़ाएँ।maxResponseTokens कितना भी अधिक क्यों न हो। स्थानीय सर्वरों में अक्सर छोटी विंडो होती है (ollama डिफ़ॉल्ट रूप से num_ctx=2048!)। इसे vulnfanatic.modelContextWindow को अपने सर्वर की विंडो पर सेट करके ठीक करें (उदा. ollama num_ctx, llama.cpp -c, vLLM --max-model-len) — तब VulnFanatic-NG स्वचालित रूप से भेजे जाने वाले संदर्भ को कैप कर देता है ताकि प्रॉम्प्ट + प्रतिक्रिया फिट हो जाए। साथ ही vulnfanatic.maxResponseTokens को उचित रखें (≈8192, 65535 नहीं) और/या सर्वर की विंडो बढ़ाएँ। छोटी विंडो (≤8k) पूरा अंतर-प्रक्रियात्मक संदर्भ नहीं रख सकती; 32k+ के लिए कॉन्फ़िगर किए गए मॉडल/सर्वर का उपयोग करें।IncompleteRead / Could not complete request ... after N attempt(s) — सर्वर ने अनुरोध स्वीकार कर लिया लेकिन पूर्ण प्रतिक्रिया भेजने से पहले कनेक्शन बंद कर दिया। इसका लगभग हमेशा मतलब है कि मॉडल सर्वर मिड-जनरेशन के दौरान मर गया या रुक गया: मेमोरी की कमी (बड़ा संदर्भ + लंबा आउटपुट), आंतरिक/कार्यकर्ता टाइमआउट, या प्रॉक्सी द्वारा कनेक्शन रीसेट करना। VulnFanatic-NG स्वचालित रूप से एक बार पुनः प्रयास करता है और फिर उस साइट को छोड़ देता है। मॉडल सर्वर के स्वयं के लॉग जाँचें वास्तविक कारण के लिए; vulnfanatic.maxContextTokens और/या vulnfanatic.maxResponseTokens कम करना, या सर्वर को अधिक मेमोरी / बड़ी संदर्भ विंडो देना, आमतौर पर इसे हल करता है।
vulnfanatic.phase2ForceEnable सेट करें, या vulnfanatic.phase2RequireSymbols=off। प्रतीक गेट एक ह्यूरिस्टिक है।response_format=json_object को अनदेखा या अस्वीकार करते हैं; क्लाइंट इसे सहन करता है और फिर भी JSON निकालता है। यदि आपका सर्वर पैरामीटर को पूरी तरह अस्वीकार करता है, तो vulnfanatic.sendJsonResponseFormat अक्षम करें।Apache-2.0 (© Martin Petran) — plugin.json देखें।
MAIN→ABCD→strcpy के लिए, MAIN और ABCD द्वारा कहीं और कॉल किए गए फ़ंक्शन भी), क्योंकि उनमें वे बाउंड/सत्यापन जाँच हो सकती हैं जो खतरनाक मान को गेट करती हैं (vulnfanatic.includeCallPathSiblings, बजट अनुमति देने पर भरी जाती हैं), औरrecv/read/getenv जैसे इनपुट फ़ंक्शन)।highvulnfanatic.skipConstantArgCalls (डिफ़ॉल्ट बंद) — ओवरफ़्लो-श्रेणी के कॉल साइट को छोड़ें जिनके तर्क सभी संकलन-समय स्थिरांक हैं।| सेटिंग | अर्थ |
|---|
vulnfanatic.apiProvider | किस LLM बैकएंड को कॉल करना है: openai (डिफ़ॉल्ट), anthropic, google, या azure। नीचे LLM बैकएंड देखें। सभी प्रदाता Python मानक पुस्तकालय के माध्यम से पहुँचे जाते हैं — pip install करने की आवश्यकता नहीं। |
vulnfanatic.apiBaseUrl | चयनित प्रदाता के लिए एंडपॉइंट आधार (नीचे तालिका देखें)। डिफ़ॉल्ट http://localhost:8080/v1। परीक्षण मोड सक्षम करने के लिए शाब्दिक TEST पर सेट करें (नीचे देखें)। |
vulnfanatic.apiKey | API कुंजी / बियरर टोकन। स्थानीय सर्वर के लिए खाली हो सकता है। VULNFANATIC_API_KEY या OPENAI_API_KEY पर्यावरण चरों द्वारा अधिलेखित किया जाता है। |
vulnfanatic.model | आवश्यक (परीक्षण मोड को छोड़कर)। मॉडल पहचानकर्ता (azure के लिए, डिप्लॉयमेंट नाम). |
vulnfanatic.apiMode | केवल openai: chat (डिफ़ॉल्ट, /chat/completions) बनाम completions (एकल समतल प्रॉम्प्ट — बेस/इंस्ट्रक्ट मॉडल के लिए जो चैट टेम्पलेट के बिना प्रस्तुत किए जाते हैं). |
vulnfanatic.azureApiVersion | केवल azure: api-version क्वेरी पैरामीटर (डिफ़ॉल्ट 2024-10-21). |
| प्रदाता | apiBaseUrl | प्रमाणीकरण | नोट्स |
|---|
openai | आपका सर्वर, उदा. http://localhost:8080/v1 | Authorization: Bearer | OpenAI-संगत Chat/Completions: स्थानीय llama.cpp / ollama / vLLM, OpenAI, और AWS Bedrock का OpenAI-संगत एंडपॉइंट. |
anthropic | खाली → https://api.anthropic.com | x-api-key + anthropic-version | Claude Messages API (POST <base>/v1/messages). temperature नहीं भेजा जाता (वर्तमान Claude मॉडल इसे अस्वीकार करते हैं). |
google | खाली → https://generativelanguage.googleapis.com | URL में API कुंजी | Gemini generateContent (<base>/v1beta/models/<model>:generateContent). |
azure | https://<resource>.openai.azure.com | api-key हेडर | Azure OpenAI; model को डिप्लॉयमेंट नाम और azureApiVersion को अपने API संस्करण पर सेट करें। |
vulnfanatic.callPathMaxPathsvulnfanatic.callPathIncludeBodiesvulnfanatic.callPathMaxBodiesvulnfanatic.includeCallPathSiblingsvulnfanatic.callPathSiblingMaxBodiesvulnfanatic.includeDataTypesvulnfanatic.maxTypeDefsvulnfanatic.includeVariableDataflowvulnfanatic.dataflowMaxFunctionsvulnfanatic.includeStackLayoutvulnfanatic.scanIndirectCallsvulnfanatic.validationPassvulnfanatic.validatorModelvulnfanatic.validatorProvidervulnfanatic.validatorBaseUrlvulnfanatic.validatorApiKeyvulnfanatic.minConfidencelowmediumhighlowvulnfanatic.flagUnparseableResponsesUNKNOWNvulnfanatic.skipConstantArgCallsvulnfanatic.verdictReasoningconcisefullnoneconcisevulnfanatic.runPhase1vulnfanatic.runPhase2vulnfanatic.runPhase3vulnfanatic.phase2RequireSymbolsvulnfanatic.phase2ForceEnablevulnfanatic.tokenizerEncodingvulnfanatic.offlineBuildContextvulnfanatic.debugLoggingvulnfanatic.debugAnonymousvulnfanatic.sendJsonResponseFormatvulnfanatic.tlsVerifyvulnfanatic.caBundlePathCERTIFICATE_VERIFY_FAILEDvulnfanatic.rulesPhase1Pathvulnfanatic.rulesPhase2Pathvulnfanatic.rulesPhase3Path