Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
VulnFanatic-NG — डीकंपाइल बाइनरीज़ में कमजोरियों की पहचान करने के लिए BianryNinja प्लगइन, जिसमें प्रोग्रामैटिक स्कैन और LLM सपोर्ट दोनों शामिल हैं। | Kitploit
उपकरण/GitHubGitHub/martyx00/vulnfanatic-ng
स्थैतिक कोड विश्लेषण (SAST)भेद्यता विश्लेषणकोड विश्लेषणशोषणरिवर्स इंजीनियरिंगफज़िंगपेनिट्रेशन टेस्टिंगहार्डवेयर सुरक्षाबाइनरी विश्लेषणआपूर्ति श्रृंखला सुरक्षालर्निंग और शिक्षाAI-सहायित रिवर्सिंग
14152 महीने पहलेअभी तक समीक्षित नहीं

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें
GitHubmartyx00/vulnfanatic-ng

VulnFanatic-NG

डीकंपाइल बाइनरीज़ में कमजोरियों की पहचान करने के लिए BianryNinja प्लगइन, जिसमें प्रोग्रामैटिक स्कैन और LLM सपोर्ट दोनों शामिल हैं।

रिपॉजिटरी देखें

VulnFanatic-NG

Binary Ninja के लिए LLM-सहायता प्राप्त भेद्यता अनुसंधान।

VulnFanatic-NG एक साइडबार पैनल जोड़ता है जो वर्तमान बाइनरी को स्कैन करता है और एक LLM — डिफ़ॉल्ट रूप से स्थानीय रूप से होस्ट किया गया OpenAI-संगत मॉडल, या Anthropic Claude, Google Gemini, या Azure OpenAI (देखें LLM बैकएंड) — से पूछता है कि क्या संदिग्ध कोड वास्तव में कमजोर है। यह मुख्य रूप से Binary Ninja के डीकंपाइलर आउटपुट (HLIL) से काम करता है, जब आवश्यक हो तो असेंबली पर वापस आता है, और केवल पुष्टि की गई समस्याओं की रिपोर्ट करता है जिनके कोड पर क्लिक करने योग्य संदर्भ होते हैं।


यह कैसे काम करता है

एक स्कैन अधिकतम तीन चरणों में चलता है (चरण 3 ऑप्ट-इन और केवल ऑनलाइन है):

चरण 1 — खतरनाक फ़ंक्शन कॉल

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) पर बजट किया जाता है:

  • कॉल एक्सप्रेशन और उसके तर्क,
  • कॉल किए गए फ़ंक्शन का घोषित प्रोटोटाइप (Binary Ninja के प्रकार की जानकारी से, अन्यथा एक अंतर्निहित तालिका) ताकि मॉडल तर्कों को पैरामीटर से सही ढंग से मैप कर सके — मजबूत __*_chk और बाउंड-जांचे गए *_s वेरिएंट अतिरिक्त अग्रणी तर्क लेते हैं, जो फ़ॉर्मेट/आकार/गंतव्य स्थिति को स्थानांतरित करते हैं,
  • प्रत्येक कॉल तर्क का प्रकार और बाइट आकार (बफ़र क्षमताएँ), तर्क के HLIL एक्सप्रेशन प्रकार से व्युत्पन्न, ताकि एक स्ट्रक्चर फ़ील्ड जैसे s->buf s के पॉइंटर आकार के बजाय फ़ील्ड के वास्तविक सरणी आकार में हल हो जाए; प्रकार अनुभाग में स्ट्रक्चर परिभाषाएँ प्रति-फ़ील्ड बाइट आकार भी रखती हैं,
  • प्रत्येक तर्क का ठोस मान / सीमा Binary Ninja के स्थिर-प्रसार और मान-सेट विश्लेषण द्वारा हल किया गया (उदा. एक लंबाई स्थिर 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 को सुरक्षित मानते हैं जब तक कि आकार तर्क स्वयं गलत न हो।
  • स्पष्ट बफ़र आकार — तर्क और स्ट्रक्चर-फ़ील्ड बाइट क्षमताएँ प्रदान की जाती हैं ताकि मॉडल क्षमता की तुलना लिखे गए बाइट्स से करे, अनुमान लगाने के बजाय।

ऑफ़लाइन स्कैन करें (कोई LLM नहीं)

ऑफ़लाइन स्कैन करें बटन चरण 1 को बिना किसी मॉडल के चलाता है — पूरी तरह से phase1_rules.json में प्रत्येक नियम के offline ब्लॉक में घोषित प्रोग्रामेटिक अनुमान। यह खतरनाक कॉल साइटों को चिह्नित करता है और स्पष्ट रूप से सुरक्षित को समाप्त करता है, एक अनुमानात्मक आत्मविश्वास निर्दिष्ट करता है:

  • समाप्त (रिपोर्ट नहीं किया गया): एक स्थिर लंबाई के साथ एक memcpy/memmove, एक स्थिर स्ट्रिंग से एक strcpy, एक स्थिर फ़ॉर्मेट के साथ एक printf, एक स्थिर कमांड के साथ एक system, आदि — ऐसी कॉलें जिनका नियंत्रक तर्क एक संकलन-समय स्थिरांक है और इसलिए हमलावर-नियंत्रित नहीं हो सकता। "स्थिरांक" में वे मान शामिल हैं जिन्हें Binary Ninja के मान-सेट विश्लेषण ने ऊपर की ओर एक निश्चित संख्या पर पिन किया है, न कि केवल शाब्दिक तर्क।
  • उच्च आत्मविश्वास: निष्पादन प्रवाह पर कहीं भी कोई शमन जाँच नहीं मिली, इस प्रकार चिह्नित किया गया।
  • अवक्रमित (→ मध्यम): आकार/लंबाई तर्क या तो 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 से अक्षम करें।

चरण 2 — सुरक्षा-संवेदनशील कोड (प्रतीक-गेटेड)

केवल तभी चलता है जब बाइनरी में वास्तविक प्रतीक / चर नाम दिखाई देते हैं। rules/phase2_rules.json में परिभाषित सुरक्षा-संवेदनशील फ़ंक्शन ढूँढता है — प्रमाणीकरण, क्रिप्टोग्राफी (कमज़ोर एल्गोरिदम सहित), हस्ताक्षर/प्रमाणपत्र सत्यापन, सत्र/टोकन हैंडलिंग, पहुँच नियंत्रण, गुप्त/कुंजी हैंडलिंग, इनपुट सत्यापन, गैर-स्थिर-समय गुप्त तुलना, और असुरक्षित डीसीरियलाइज़ेशन — फ़ंक्शन नाम और संदर्भित स्ट्रिंग द्वारा मिलान किया जाता है, फिर मॉडल द्वारा ऑडिट किया जाता है।

चरण 3 — हार्डवेयर-हमला सख्तीकरण ऑडिट (ऑनलाइन, ऑप्ट-इन)

फ़ॉल्ट-इंजेक्शन (वोल्टेज/क्लॉक/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),
  • एक वैकल्पिक चरण 1 / चरण 2 / चरण 3 कस्टम नियम पथ (खाली → बंडल किए गए डिफ़ॉल्ट), ताकि आप एक वैकल्पिक नियम सेट चला सकें,
  • एक चरण 3 चेकबॉक्स (डिफ़ॉल्ट रूप से बंद) केवल-ऑनलाइन हार्डवेयर-हमला सख्तीकरण ऑडिट को अतिरिक्त रूप से चलाने के लिए,

फिर स्कैन शुरू करें या ऑफ़लाइन स्कैन करें दबाएँ। प्रत्येक रन अपना स्वयं का परिणाम टैब खोलता है और निष्कर्ष लाइव स्ट्रीम होते हैं। सभी स्कैन BNDB में संग्रहीत होते हैं, इसलिए आप उदा. एक ऑफ़लाइन स्कैन रख सकते हैं और बाद में एक ऑनलाइन स्कैन जोड़ सकते हैं, या विभिन्न नियम सेटों के साथ रनों की तुलना कर सकते हैं, साथ-साथ — वे डेटाबेस को फिर से खोलने पर टैब के रूप में फिर से प्रकट होते हैं। एक टैब बंद करना उस स्कैन को BNDB से स्थायी रूप से हटा देता है — दुर्घटनाओं को रोकने के लिए यह एक पुष्टिकरण पॉप अप करता है जिसमें परिणामों को हमेशा के लिए हटाएं बटन सक्रिय होने से पहले "मैं पुष्टि करता हूँ कि मैं <नाम> से परिणाम हमेशा के लिए खो दूंगा।" को टिक करना आवश्यक है। वर्तमान स्कैन निर्यात करें… चयनित टैब को Markdown/JSON में लिखता है।

प्रत्येक खुली बाइनरी का अपना स्वतंत्र पैनल राज्य होता है — अपने स्वयं के स्कैन टैब और चल रहे स्कैन। एक बाइनरी में एक स्कैन शुरू करना और दूसरे पर स्विच करना दूसरी बाइनरी के परिणाम दिखाता है (और आपको इसे अलग से स्कैन करने देता है); पहली बाइनरी का स्कैन पृष्ठभूमि में चलता रहता है और जब आप वापस स्विच करते हैं तो वैसा ही होता है।


स्थापना

इस प्लगइन का पैकेज फ़ोल्डर vulnfanatic_ng नाम का है (एक मान्य पाइथन पहचानकर्ता — Binary Ninja प्लगइन फ़ोल्डर नाम को एक मॉड्यूल के रूप में आयात करता है, इसलिए VulnFanatic-NG जैसा हाइफ़नेटेड नाम लोड नहीं होगा)।

  1. (वैकल्पिक) Binary Ninja के Python में सटीक टोकन गणना स्थापित करें: ``` pip install tiktoken

    root@kitploit:~
  2. vulnfanatic_ng फ़ोल्डर को अपने Binary Ninja उपयोगकर्ता प्लगइन्स निर्देशिका में सिमलिंक करें या कॉपी करें:

    • macOS: ~/Library/Application Support/Binary Ninja/plugins/
    • Linux: ~/.binaryninja/plugins/
    • Windows: %APPDATA%\Binary Ninja\plugins\

    उदाहरण के लिए, macOS पर: ``` ln -s "$(pwd)/vulnfanatic_ng" "$HOME/Library/Application Support/Binary Ninja/plugins/vulnfanatic_ng"

    root@kitploit:~
  3. Binary Ninja को पुनरारंभ करें (या Reload Plugins चलाएँ)। दाएँ साइडबार में एक VF आइकन दिखाई देता है।


कॉन्फ़िगरेशन

सेटिंग्स खोलें (गियर / Edit ▸ Preferences ▸ Settings) और vulnfanatic खोजें। कम से कम निम्नलिखित सेट करें:

LLM बैकएंड

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 की सेटिंग्स में सादे पाठ में संग्रहीत होती है। संवेदनशील कुंजियों के लिए पर्यावरण चर ओवरराइड को प्राथमिकता दें।

परीक्षण मोड (ड्राई रन, कोई LLM नहीं)

vulnfanatic.apiBaseUrl को शाब्दिक मान TEST पर सेट करें ताकि बिना किसी LLM के चलाया जा सके:

  • मॉडल को कभी नहीं बुलाया जाता (कोई नेटवर्क नहीं, कोई API कुंजी/मॉडल आवश्यक नहीं)।
  • प्रत्येक उम्मीदवार (चरण 1 में प्रत्येक खतरनाक कॉल साइट, चरण 2 में प्रत्येक सुरक्षा-संवेदनशील फ़ंक्शन) को चिह्नित किया जाता है।
  • प्रत्येक उम्मीदवार के लिए पूर्ण प्रॉम्प्ट — सिस्टम प्रॉम्प्ट और पूर्ण उत्पन्न संदर्भ — /tmp/vulnfanatic_ng/<binary>-<timestamp>/ के अंतर्गत अपनी स्वयं की फ़ाइल में लिखा जाता है।
  • निष्कर्ष तालिका में एक प्रॉम्प्ट फ़ाइल कॉलम दिखाई देता है (पूर्ण पथ के लिए होवर करें), और विवरण फलक और निर्यात में पथ शामिल होता है।

इसका उपयोग यह निरीक्षण और मान्य करने के लिए करें कि VulnFanatic-NG मॉडल को वास्तव में क्या भेजेगा, और मॉडल समय खर्च किए बिना नियम प्रॉम्प्ट/संदर्भ पर पुनरावृति करने के लिए।

डीबग लॉगिंग

vulnfanatic.debugLogging चालू करें ताकि स्कैन पाइपलाइन (ऑनलाइन और ऑफ़लाइन दोनों) का एक वर्बोज़, चरण-दर-चरण ट्रेस Binary Ninja लॉग/कंसोल पर प्रिंट हो: प्रत्येक कॉल साइट, प्रत्येक छोड़/उन्मूलन निर्णय, संदर्भ निर्माण (केवल आकार), प्रत्येक LLM अनुरोध (प्रदाता/मॉडल/एंडपॉइंट, पुनर्प्रयास, फ़ॉलबैक), प्रत्येक निर्णय, और प्रत्येक रिपोर्ट किया गया निष्कर्ष। API कुंजियाँ कभी लॉग नहीं की जातीं।

जब डीबग लॉगिंग चालू होती है, एक ऑनलाइन स्कैन प्रत्येक उम्मीदवार को परिणाम तालिका में रखता है, न कि उन्हें हटाने के जो पुष्ट मुद्दे नहीं बनते, प्रत्येक को डीबग-केवल स्थिति (मंद, नीचे की ओर क्रमबद्ध) के साथ टैग किया जाता है:

  • REJECTED — LLM ने कोई मुद्दा नहीं का निर्णय लौटाया।
  • SKIPPED — एक प्रमाणित-सुरक्षित नियम द्वारा LLM से पहले समाप्त किया गया (एक स्थिर प्रारूप स्ट्रिंग, या सभी-स्थिर तर्क); पंक्ति बताती है कि कौन सा।
  • ERROR — उम्मीदवार का विश्लेषण नहीं किया जा सका (संदर्भ निर्माण विफल, या LLM प्रतिक्रिया अव्याख्या योग्य / कनेक्शन विफल); पंक्ति में त्रुटि होती है।

इसलिए एक डीबग स्कैन प्रति उम्मीदवार /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 एंडपॉइंट होस्ट हैश किया गया है, और डीकंपाइल कोड / प्रॉम्प्ट / संदर्भ को केवल आकार के रूप में लॉग किया जाता है (कभी सामग्री नहीं)। ताकि आप अपने बाइनरी के बारे में कुछ भी प्रकट किए बिना किसी समस्या की रिपोर्ट करने के लिए डीबग लॉग भेज सकें।


उपयोग

  1. एक बाइनरी खोलें और विश्लेषण समाप्त होने दें।
  2. VulnFanatic-NG खोलने के लिए VF साइडबार आइकन पर क्लिक करें।
  3. स्कैन प्रारंभ करें (पूर्ण LLM स्कैन) या ऑफ़लाइन स्कैन करें (तेज़, कोई-LLM प्रोग्रामेटिक चरण 1 — ऊपर देखें) दबाएँ। प्रगति पैनल और Binary Ninja स्थिति पट्टी में दिखाई देती है; निष्कर्ष लाइव दिखाई देते हैं और रद्द किए जा सकते हैं।
  4. स्पष्टीकरण पढ़ने के लिए एक निष्कर्ष पर क्लिक करें; कोड में जाने के लिए डबल-क्लिक करें।
  5. किसी निष्कर्ष पर राइट-क्लिक करके झूठी सकारात्मक के रूप में चिह्नित करें — यह तालिका के नीचे चला जाता है, ग्रे और स्ट्राइकथ्रू, और मेनू प्रविष्टि पलट कर वास्तविक मुद्दे के रूप में चिह्नित करें हो जाती है (पूर्ववत करने के लिए)। (राइट-क्लिक मेनू में कोड पर जाएँ भी है।)
  6. निर्यात Markdown या JSON में करें, या सहेजे गए निष्कर्षों को हटाने के लिए साफ़ करें दबाएँ।

निष्कर्ष — उनकी झूठी-सकारात्मक स्थिति सहित — 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} प्लेसहोल्डर का उपयोग कर सकता है।


मॉडल को फ़ाइन-ट्यून करना (MLX, Apple Silicon)

ट्राइएज किए गए निर्यात को सीधे मॉडल में वापस फीड करने के लिए डिज़ाइन किया गया है। कई बाइनरी में निष्कर्षों को ट्राइएज करने और प्रत्येक पर एक्सपोर्ट ट्राइएज्ड (फ़ाइन-ट्यूनिंग)… क्लिक करने (.jsonl फ़ाइलों को एक फ़ोल्डर में एकत्रित करने) के बाद, scripts/finetune_mlx.py उन पर एक MLX LoRA फ़ाइन-ट्यून चलाता है।```bash pip install mlx-lm # Apple Silicon / macOS

Fine-tune a local 4-bit model on every *.jsonl under ./exports

python scripts/finetune_mlx.py ./exports
--model mlx-community/Qwen2.5-Coder-7B-Instruct-4bit
--adapter-path ./vf-adapters --iters 800

...then fuse the adapters into a standalone model

python scripts/finetune_mlx.py ./exports --model
--fuse --fused-path ./vf-qwen-coder-vuln

root@kitploit:~
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 की आवश्यकता होती है।

Binary Ninja के अंदर मैन्युअल परीक्षण

  1. एक छोटा कमजोर C प्रोग्राम बनाएं (जैसे एक जो argv[1] को एक निश्चित स्टैक बफर में strcpy करता है और इनपुट पर system() को कॉल करता है)। प्रतीकों (symbols) के साथ संकलित करें ताकि Phase 2 का भी प्रयोग हो सके।
  2. अपना स्थानीय OpenAI-संगत सर्वर शुरू करें और vulnfanatic.apiBaseUrl, vulnfanatic.apiKey, तथा vulnfanatic.model सेट करें।
  3. बाइनरी खोलें, Start Scan चलाएँ, और सुनिश्चित करें कि खतरनाक कॉल्स रिपोर्ट होती हैं और डबल-क्लिक करने से कॉल साइट्स पर नेविगेट होता है।

समस्या निवारण

SSL: CERTIFICATE_VERIFY_FAILED ... unable to get local issuer certificate — HTTPS एंडपॉइंट का प्रमाणपत्र ठीक है, लेकिन Binary Ninja के बंडल किए गए Python में इसके सत्यापन के लिए कोई CA बंडल नहीं है (macOS और एम्बेडेड Python में आम है; आप इसे AWS Bedrock, Anthropic, Google, Azure जैसे होस्टेड एंडपॉइंट के साथ देखेंगे)। इसे पसंदीदा क्रम में निम्नलिखित में से किसी एक से ठीक करें:

  • certifi स्थापित करें उस Python में जिसका Binary Ninja उपयोग करता है: pip install certifi। VulnFanatic-NG इसे स्वचालित रूप से उठा लेता है।
  • CA बंडल की ओर इशारा करें: 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 कम करना, या सर्वर को अधिक मेमोरी / बड़ी संदर्भ विंडो देना, आमतौर पर इसे हल करता है।

सीमाएँ

  • Phase 2 प्रतीक-जागरूक है। स्ट्रिप्ड बाइनरी पर, नाम-आधारित मिलान अविश्वसनीय होता है, इसलिए डिफ़ॉल्ट रूप से केवल स्ट्रिंग-एविडेंस नियम चलते हैं (फ़ंक्शन जो बताने वाले स्ट्रिंग स्थिरांकों का संदर्भ देते हैं, फिर भी ऑडिट योग्य हैं)। नाम-आधारित मिलानों को ऑडिट करने के लिए vulnfanatic.phase2ForceEnable सेट करें, या vulnfanatic.phase2RequireSymbols=off। प्रतीक गेट एक ह्यूरिस्टिक है।
  • HLIL ↔ कॉल-साइट मैपिंग विफल हो सकती है; VulnFanatic-NG MLIL/असेंबली पर वापस गिर जाता है और प्रति निष्कर्ष उपयोग किए गए प्रतिनिधित्व को नोट करता है।
  • निर्णय केवल मॉडल जितने अच्छे होते हैं। निष्कर्षों को मैन्युअल समीक्षा के लिए सुराग मानें, न कि वास्तविकता।
  • कुछ स्थानीय सर्वर response_format=json_object को अनदेखा या अस्वीकार करते हैं; क्लाइंट इसे सहन करता है और फिर भी JSON निकालता है। यदि आपका सर्वर पैरामीटर को पूरी तरह अस्वीकार करता है, तो vulnfanatic.sendJsonResponseFormat अक्षम करें।

लाइसेंस

Apache-2.0 (© Martin Petran) — plugin.json देखें।

टूल डाउनलोड करें
  • एक तर्क डेटा-प्रवाह सारांश — फ़ंक्शन के भीतर प्रत्येक कॉल तर्क को कहाँ परिभाषित और उपयोग किया गया है,
  • कॉलर्स में पैरामीटर समाधान — जब एक खतरनाक तर्क कॉल करने वाले फ़ंक्शन का पैरामीटर होता है, तो संदर्भ रिपोर्ट करता है कि प्रत्येक कॉलर वास्तव में इसके लिए क्या पास करता है (उदा. "सभी कॉलर एक स्ट्रिंग लिटरल पास करते हैं"), ताकि एक फ़ॉर्मेट/आकार पैरामीटर जो हमेशा स्थिर होता है उसे हमलावर-नियंत्रित समझने की गलती न हो,
  • कॉल करने वाले फ़ंक्शन का पूरा डीकंपाइल किया गया बॉडी,
  • डेटा-प्रकार परिभाषाएँ (struct/union/enum) कॉल श्रृंखला और तर्क चर में संदर्भित प्रकारों के लिए, ताकि मॉडल वास्तविक बफ़र/फ़ील्ड आकार और पूर्णांक चौड़ाई जान सके,
  • उन फ़ंक्शनों के डीकंपाइल किए गए बॉडी जो कॉल के तर्क चर का उत्पादन या उपभोग करते हैं (HLIL def/use के माध्यम से ट्रेस), जो उपयोग-मुक्ति / दोहरी-मुक्ति और दूषित-आकार तर्क को संभव बनाता है,
  • प्रवेश बिंदुओं / निर्यातित फ़ंक्शनों से कॉल तक कॉल पथ,
  • उन कॉल पथों के साथ प्रत्येक फ़ंक्शन का डीकंपाइल किया गया बॉडी (खतरनाक कॉल के सबसे निकट पहले), प्रत्येक कॉल साइट और अगले हॉप की रक्षा करने वाली स्थितियों से एनोटेट किया गया,
  • उन पथ फ़ंक्शनों द्वारा कॉल किए गए अन्य फ़ंक्शनों के बॉडी (उदा. MAIN→ABCD→strcpy के लिए, MAIN और ABCD द्वारा कहीं और कॉल किए गए फ़ंक्शन भी), क्योंकि उनमें वे बाउंड/सत्यापन जाँच हो सकती हैं जो खतरनाक मान को गेट करती हैं (vulnfanatic.includeCallPathSiblings, बजट अनुमति देने पर भरी जाती हैं), और
  • दूषित-स्रोत संकेत (उसी फ़ंक्शन में कॉल किए गए recv/read/getenv जैसे इनपुट फ़ंक्शन)।
  • high
  • vulnfanatic.skipConstantArgCalls (डिफ़ॉल्ट बंद) — ओवरफ़्लो-श्रेणी के कॉल साइट को छोड़ें जिनके तर्क सभी संकलन-समय स्थिरांक हैं।
  • सेटिंगअर्थ
    vulnfanatic.apiProviderकिस LLM बैकएंड को कॉल करना है: openai (डिफ़ॉल्ट), anthropic, google, या azure। नीचे LLM बैकएंड देखें। सभी प्रदाता Python मानक पुस्तकालय के माध्यम से पहुँचे जाते हैं — pip install करने की आवश्यकता नहीं।
    vulnfanatic.apiBaseUrlचयनित प्रदाता के लिए एंडपॉइंट आधार (नीचे तालिका देखें)। डिफ़ॉल्ट http://localhost:8080/v1। परीक्षण मोड सक्षम करने के लिए शाब्दिक TEST पर सेट करें (नीचे देखें)।
    vulnfanatic.apiKeyAPI कुंजी / बियरर टोकन। स्थानीय सर्वर के लिए खाली हो सकता है। 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/v1Authorization: BearerOpenAI-संगत Chat/Completions: स्थानीय llama.cpp / ollama / vLLM, OpenAI, और AWS Bedrock का OpenAI-संगत एंडपॉइंट.
    anthropicखाली → https://api.anthropic.comx-api-key + anthropic-versionClaude Messages API (POST <base>/v1/messages). temperature नहीं भेजा जाता (वर्तमान Claude मॉडल इसे अस्वीकार करते हैं).
    googleखाली → https://generativelanguage.googleapis.comURL में API कुंजीGemini generateContent (<base>/v1beta/models/<model>:generateContent).
    azurehttps://<resource>.openai.azure.comapi-key हेडरAzure OpenAI; model को डिप्लॉयमेंट नाम और azureApiVersion को अपने API संस्करण पर सेट करें।
    vulnfanatic.callPathMaxPaths
    vulnfanatic.callPathIncludeBodies
    vulnfanatic.callPathMaxBodies
    vulnfanatic.includeCallPathSiblings
    vulnfanatic.callPathSiblingMaxBodies
    vulnfanatic.includeDataTypes
    vulnfanatic.maxTypeDefs
    vulnfanatic.includeVariableDataflow
    vulnfanatic.dataflowMaxFunctions
    vulnfanatic.includeStackLayout
    vulnfanatic.scanIndirectCalls
    vulnfanatic.validationPass
    vulnfanatic.validatorModel
    vulnfanatic.validatorProvider
    vulnfanatic.validatorBaseUrl
    vulnfanatic.validatorApiKey
    vulnfanatic.minConfidence
    low
    medium
    high
    low
    vulnfanatic.flagUnparseableResponses
    UNKNOWN
    vulnfanatic.skipConstantArgCalls
    vulnfanatic.verdictReasoning
    concise
    full
    none
    concise
    vulnfanatic.runPhase1
    vulnfanatic.runPhase2
    vulnfanatic.runPhase3
    vulnfanatic.phase2RequireSymbols
    vulnfanatic.phase2ForceEnable
    vulnfanatic.tokenizerEncoding
    vulnfanatic.offlineBuildContext
    vulnfanatic.debugLogging
    vulnfanatic.debugAnonymous
    डीबग लॉगिंग
    vulnfanatic.sendJsonResponseFormat
    vulnfanatic.tlsVerify
    vulnfanatic.caBundlePath
    CERTIFICATE_VERIFY_FAILED
    vulnfanatic.rulesPhase1Path
    vulnfanatic.rulesPhase2Path
    vulnfanatic.rulesPhase3Path