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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
VulFi — IDA Pro प्लगइन बाइनरी के भीतर क्वेरी-आधारित खोज के लिए, मुख्य रूप से भेद्यता अनुसंधान के लिए उपयोगी। | Kitploit
उपकरण/GitHubGitHub/accenture/vulfi
स्थैतिक विश्लेषणभेद्यता विश्लेषणरिवर्स इंजीनियरिंगबाइनरी विश्लेषण
GitHubaccenture/vulfi

VulFi

IDA Pro प्लगइन बाइनरी के भीतर क्वेरी-आधारित खोज के लिए, मुख्य रूप से भेद्यता अनुसंधान के लिए उपयोगी।

रिपॉजिटरी देखें
669741 साल पहलेKitploit द्वारा समीक्षित

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

सभी देखें →

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

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

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

सभी उपकरण देखें →
साझा करें

VulFi v3.0

परिचय

VulFi (Vulnerability Finder) उपकरण IDA Pro के लिए एक प्लगइन है जिसका उपयोग बाइनरी में बग शिकार के दौरान सहायता के लिए किया जा सकता है। इसका मुख्य उद्देश्य सबसे दिलचस्प फ़ंक्शनों (जैसे strcpy, sprintf, system, आदि) के सभी क्रॉस-रेफ़रेंस के साथ एक एकल दृश्य प्रदान करना है। ऐसे मामलों में जहाँ Hexrays डीकंपाइलर का उपयोग किया जा सकता है, यह उन कॉलों को बाहर करने का प्रयास करेगा जो भेद्यता अनुसंधान के दृष्टिकोण से दिलचस्प नहीं हैं (जैसे strcpy(dst,"Hello World!"))। डीकंपाइलर के बिना, नियम बहुत सरल होते हैं (आर्किटेक्चर पर निर्भर न होने के लिए) और इस प्रकार केवल सबसे स्पष्ट मामलों को बाहर करते हैं।

अपडेट पर अधिक जानकारी के लिए Changelog देखें।

स्थापना

vulfi.py, vulfi_prototypes.json और vulfi_rules.json फ़ाइलों को IDA प्लगइन फ़ोल्डर में रखें (cp vulfi* <IDA_PLUGIN_FOLDER>)।

डेटाबेस फ़ाइल तैयार करना

VulFi चलाने से पहले सुनिश्चित करें कि आपको उस बाइनरी की अच्छी समझ है जिसके साथ आप काम कर रहे हैं। सभी मानक फ़ंक्शनों (strcpy, memcpy, आदि) की पहचान करने का प्रयास करें और उन्हें तदनुसार नाम दें। प्लगइन केस-असंवेदनशील है, इसलिए MEMCPY, Memcpy और memcpy सभी मान्य नाम हैं। हालाँकि, ध्यान दें कि फ़ंक्शन की खोज के लिए सटीक मिलान आवश्यक है। इसका मतलब है कि memcpy? या std_memcpy (या कोई अन्य प्रकार) को मानक फ़ंक्शन के रूप में नहीं पहचाना जाएगा और इसलिए संभावित भेद्यताओं की तलाश में उन पर विचार नहीं किया जाएगा। यदि आप किसी अज्ञात बाइनरी के साथ काम कर रहे हैं, तो आपको पहले कंपाइलर विकल्प Options > Compiler सेट करने होंगे। उसके बाद VulFi सभी स्पष्ट झूठी सकारात्मकताओं (जैसे किसी स्थिर स्ट्रिंग के साथ printf का कॉल) को फ़िल्टर करने की पूरी कोशिश करेगा। कृपया ध्यान दें कि जबकि प्लगइन किसी विशिष्ट आर्किटेक्चर से बंधे बिना बनाया गया है, कुछ प्रोसेसर प्रकार निर्दिष्ट करने के लिए पूर्ण समर्थन नहीं रखते हैं और ऐसे मामले में VulFi सभी क्रॉस-रेफ़रेंस को संभावित खतरनाक मानक फ़ंक्शनों के रूप में चिह्नित करेगा ताकि आप मैन्युअल विश्लेषण के साथ आगे बढ़ सकें। इन मामलों में, आप प्लगइन की ट्रैकिंग सुविधाओं से लाभ उठा सकते हैं।

उपयोग

स्कैनिंग

स्कैन शुरू करने के लिए, शीर्ष बार मेनू से Search > VulFi विकल्प चुनें। यह या तो एक नया स्कैन शुरू करेगा, या idb/i64 फ़ाइल में संग्रहीत पिछले परिणामों को पढ़ेगा। जब भी आप डेटाबेस सहेजते हैं तो डेटा स्वचालित रूप से सहेजा जाता है।

एक बार स्कैन पूरा हो जाने या पिछले परिणाम लोड हो जाने के बाद, निम्नलिखित कॉलम वाला एक दृश्य प्रस्तुत किया जाएगा:

  • IssueName - संदिग्ध समस्या के शीर्षक के रूप में उपयोग किया जाता है।
  • FunctionName - फ़ंक्शन का नाम।
  • FoundIn - वह फ़ंक्शन जिसमें संभावित रूप से दिलचस्प संदर्भ होता है।
  • Address - पता लगाए गए कॉल का पता।
  • Status - समीक्षा स्थिति, प्रारंभ में प्रत्येक नई वस्तु को Not Checked निर्दिष्ट किया गया है। अन्य स्थितियाँ False Positive, Suspicious और Vulnerable हैं। इन्हें किसी आइटम पर राइट-क्लिक मेनू का उपयोग करके सेट किया जा सकता है और किसी दिए गए फ़ंक्शन कॉल की मैन्युअल समीक्षा के परिणामों को प्रतिबिंबित करना चाहिए।
  • Priority - कम दिलचस्प कॉलों पर अधिक दिलचस्प को प्राथमिकता देने का प्रयास। संभावित मान High, Medium और Low हैं (उन मामलों के लिए Info भी जहां स्कैनर सभी मापदंडों को ठीक से पहचानने में सक्षम नहीं था)। प्राथमिकताएँ vulfi_rules.json फ़ाइल में अन्य नियमों के साथ परिभाषित की गई हैं।
  • Comment - दिए गए आइटम के लिए उपयोगकर्ता द्वारा परिभाषित टिप्पणी।

यदि idb/i64 फ़ाइल में कोई डेटा नहीं है या उपयोगकर्ता नया स्कैन करने का निर्णय लेता है, तो प्लगइन पूछेगा कि क्या उसे डिफ़ॉल्ट शामिल नियमों का उपयोग करके स्कैन चलाना चाहिए या क्या उसे एक कस्टम नियम फ़ाइल का उपयोग करना चाहिए। कृपया ध्यान दें कि पहले से मौजूद डेटा के साथ नया स्कैन चलाने से पहले से पाए गए आइटम, जो पिछले परिणामों वाले उसी नाम के नियम द्वारा पहचाने गए हैं, अधिलेखित नहीं होते हैं। इसलिए, स्कैन को फिर से चलाने से मौजूदा टिप्पणियाँ और स्थिति अपडेट नहीं हटती हैं।

basic

VulFi दृश्य के भीतर राइट-क्लिक संदर्भ मेनू में, आप परिणामों से आइटम को हटा सकते हैं या सभी आइटम हटा सकते हैं। कृपया ध्यान दें कि यह ऑपरेशन करने के बाद कोई भी टिप्पणी या स्थिति अद्यतन खो जाएगी। संस्करण 2.1 के अनुसार, VulFi एक साथ कई चयनित आइटमों पर किए गए संचालन का भी समर्थन करता है। यह कई आइटमों को एक निश्चित स्थिति के साथ चिह्नित करने, हटाने या कई पंक्तियों में समान टिप्पणी जोड़ने की अनुमति देता है। कभी-कभी ऐसा होता है कि ऑपरेशन सही ढंग से रिफ्रेश नहीं होता है। जब ऐसा होता है, तो UI को कुछ बार रिफ्रेश करें (Ctrl+U) जब तक आपको परिवर्तन दिखाई न दें।

जाँच

जब भी आप किसी संभावित कमजोर फ़ंक्शन के पता लगाए गए उदाहरण का निरीक्षण करना चाहते हैं, तो वांछित पंक्ति में कहीं भी डबल-क्लिक करें और IDA आपको उस मेमोरी स्थान पर ले जाएगा जिसे संभावित रूप से दिलचस्प के रूप में पहचाना गया था। राइट-क्लिक और Set Vulfi Comment विकल्प का उपयोग करके आप दिए गए उदाहरण के लिए टिप्पणी दर्ज कर सकते हैं (उदाहरण के लिए स्थिति को सही ठहराने के लिए)।

अधिक फ़ंक्शन जोड़ना

प्लगइन कस्टम नियम बनाने की भी अनुमति देता है। ये नियम IDA इंटरफ़ेस में परिभाषित किए जा सकते हैं (एकल फ़ंक्शन के लिए आदर्श) या कस्टम नियम फ़ाइल के रूप में आपूर्ति की जा सकती है (उन नियमों के लिए आदर्श जो कई फ़ंक्शनों को कवर करने का लक्ष्य रखते हैं)।

इंटरफ़ेस के भीतर

जब आप किसी कस्टम फ़ंक्शन को ट्रेस करना चाहते हैं, जिसे विश्लेषण के दौरान पहचाना गया था, तो उसके बॉडी में कहीं भी राइट-क्लिक करें और Add <name> function to VulFi चुनें। आप वर्तमान डिसएसेंबली/डीकंपाइलर दृश्य में एक फ़ंक्शन नाम को हाइलाइट और राइट-क्लिक भी कर सकते हैं ताकि फ़ंक्शन बॉडी में स्विच करने से बचा जा सके।

add custom

नियमों का कस्टम सेट

कई नियमों के सेट के साथ एक कस्टम फ़ाइल लोड करना भी संभव है। नीचे दी गई संरचना के साथ एक कस्टम नियम फ़ाइल बनाने के लिए आप यहां शामिल टेम्पलेट फ़ाइल यहाँ का उपयोग कर सकते हैं।

root@kitploit:~
[   // नियमों की एक सारणी
    {
        "name": "RULE NAME", // नियम का नाम
        "function_names":[
            "function_name_to_look_for" // सभी फ़ंक्शन नामों की सूची जो इस नियम में परिभाषित शर्तों के विरुद्ध मिलान किया जाना चाहिए
        ],
        "wrappers":true,    // उपरोक्त फ़ंक्शनों के रैपर भी देखें (ध्यान दें कि रैप किए गए फ़ंक्शन को भी नियम से मेल खाना चाहिए)
        "mark_if":{
            "High":"True",  // यदि True पर मूल्यांकन होता है, तो प्राथमिकता High से चिह्नित करें (नीचे नियम देखें)
            "Medium":"False", // यदि True पर मूल्यांकन होता है, तो प्राथमिकता Medium से चिह्नित करें (नीचे नियम देखें)
            "Low": "False" // यदि True पर मूल्यांकन होता है, तो प्राथमिकता Low से चिह्नित करें (नीचे नियम देखें)
        }
    }
]

एक उदाहरण नियम जो फ़ंक्शन malloc के सभी क्रॉस-रेफ़रेंस को देखता है और जाँचता है कि क्या इसका पैरामीटर स्थिर नहीं है और क्या फ़ंक्शन का रिटर्न मान जाँचा गया है, नीचे दिखाया गया है:

root@kitploit:~
{
    "name": "Possible Null Pointer Dereference",
    "function_names":[
        "malloc"
    ],
    "wrappers":false,
    "mark_if":{
        "High":"not param[0].is_constant() and not function_call.return_value_checked()",
        "Medium":"False",
        "Low": "False"
    }
}

नियम

गैर-फ़ंक्शन संरचनाओं के लिए सहायक

  • Loop Check - सभी लूपों को चिह्नित करता है। ऐसे मामले में param[0] लूप का काउंटर है (यदि पता चला) और param[1] वह शर्त है जिसके विरुद्ध लूप को समाप्त करने के लिए काउंटर की जाँच की जाती है।
  • Array Access - सभी ऐरे एक्सेस को चिह्नित करता है। इस मामले में param[0] ऐरे है और param[1] इंडेक्स है।

नियम बनाते समय वही फ़ंक्शन सामान्य फ़ंक्शन पैरामीटर के समान उपयोग किए जा सकते हैं (कुछ भी जो param[<index>] पर कॉल किया जा सकता है)।

उपलब्ध चर

  • param[<index>]: किसी फ़ंक्शन कॉल के पैरामीटर तक पहुँचने के लिए उपयोग किया जाता है (इंडेक्स 0 से शुरू होता है)
  • function_call: फ़ंक्शन कॉल ईवेंट तक पहुँचने के लिए उपयोग किया जाता है
  • param_count: एक फ़ंक्शन को पारित किए गए पैरामीटरों की संख्या रखता है

उपलब्ध फ़ंक्शन

  • क्या पैरामीटर स्थिर है: param[<index>].is_constant()
  • पैरामीटर का संख्यात्मक मान प्राप्त करें: param[<index>].number_value()
  • पैरामीटर का स्ट्रिंग मान प्राप्त करें: param[<index>].string_value()
  • कॉल के बाद पैरामीटर को null पर सेट किया गया है: param[<index>].set_to_null_after_call()
  • क्या किसी फ़ंक्शन का रिटर्न मान जाँचा गया है: function_call.return_value_checked(<constant_to_check>)
  • क्या पैरामीटर का उपयोग निर्दिष्ट फ़ंक्शनों की सूची में से किसी एक में कॉल में पैरामीटर के रूप में पहले/बाद में भी किया गया है: param[<index>].used_in_call_<before|after>(["function1","function2"])
  • क्या चयनित फ़ंक्शन का कॉल किसी विशिष्ट अन्य फ़ंक्शन से पहुंच योग्य है: function_call.reachable_from("<function_name>")
  • क्या पैरामीटर हस्ताक्षरित तुलना का हिस्सा है: param[<index>].is_sign_compared()
  • क्या पैरामीटर का उपयोग वर्तमान फ़ंक्शन में ऐरे इंडेक्स के रूप में किया गया है: param[<index>].used_as_index()

उदाहरण

  • उन सभी कॉलों को चिह्नित करें जहाँ तीसरा पैरामीटर > 5 है: param[2].number_value() > 5
  • उन सभी कॉलों को चिह्नित करें जहाँ दूसरे पैरामीटर में "%s" है: "%s" in param[1].string_value()
  • उन सभी कॉलों को चिह्नित करें जहाँ दूसरा पैरामीटर स्थिर नहीं है: not param[1].is_constant()
  • उन सभी कॉलों को चिह्नित करें जहाँ रिटर्न मान पैरामीटरों की संख्या के बराबर मान के विरुद्ध मान्य है: function_call.return_value_checked(param_count)
  • उन सभी कॉलों को चिह्नित करें जहाँ रिटर्न मान किसी भी मान के विरुद्ध मान्य है: function_call.return_value_checked()
  • उन सभी कॉलों को चिह्नित करें जहाँ तीसरे से शुरू होने वाला कोई भी पैरामीटर स्थिर नहीं है: all(not p.is_constant() for p in param[2:])
  • उन सभी कॉलों को चिह्नित करें जहाँ कोई भी पैरामीटर स्थिर है: any(p.is_constant() for p in param)
  • सभी कॉलों को चिह्नित करें: True
  • उन सभी कॉलों को चिह्नित करें जहाँ दूसरा पैरामीटर स्थिर नहीं है और strlen से जाँच नहीं की गई है: not param[1].is_constant() and not param[1].used_in_call_before(["strlen"])

समस्याएँ और चेतावनियाँ

  • जब आप उस इंडेक्स के साथ पैरामीटर का अनुरोध करते हैं जो सीमा से बाहर है, तो किसी फ़ंक्शन के किसी भी कॉल को Low प्राथमिकता के रूप में चिह्नित किया जाएगा। यह क्रॉस-रेफ़रेंस को याद करने से बचने का एक तरीका है जहाँ सभी पैरामीटरों को सही ढंग से प्राप्त करना संभव नहीं था (यह मुख्य रूप से डिसएसेंबली मोड पर लागू होता है)।
  • जब आप VulFi दृश्य के भीतर खोज करते हैं और दृश्य से बाहर संदर्भ बदलते हैं और वापस आते हैं, तो दृश्य लोड नहीं होगा। आप या तो संदर्भ बदलने से पहले खोज ऑपरेशन को समाप्त करके, VulFi दृश्य को साइड-व्यू में ले जाकर ताकि वह हमेशा दिखाई दे, या दृश्य को बंद करके और फिर से खोलकर (कोई डेटा नहीं खोएगा) इसे हल कर सकते हैं।
  • अधिक विदेशी आर्किटेक्चर के लिए स्कैन बहुत सारी झूठी सकारात्मकताओं के साथ समाप्त होते हैं।
  • VulFi चूज़र में मल्टी-सेलेक्ट ऑपरेशनों के जुड़ने से, रिफ्रेश ऑपरेशन कभी-कभी दृश्य को अपडेट करने में विफल रहता है। यदि आप देखते हैं कि आपके परिवर्तन प्रतिबिंबित नहीं हुए हैं, तो Ctrl+U शॉर्टकट का उपयोग करके मैन्युअल रूप से दृश्य को रिफ्रेश करें (कुछ बार)।
टूल डाउनलोड करें
  • उन सभी कॉलों को चिह्नित करें जो read फ़ंक्शन से पहुंच योग्य हैं: function_call.reachable_from("read")