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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
FindFunc — असेंबली पैटर्न, बाइट अनुक्रम, स्ट्रिंग/नाम संदर्भ, और आकार बाधाओं द्वारा फ़ंक्शन को फ़िल्टर करने के लिए IDA Pro प्लगइन, जिसमें नियम-आधारित खोज और उन्नत बाइनरी कॉपी करना शामिल है। | Kitploit
उपकरण/GitHubGitHub/felixber/findfunc
स्थैतिक विश्लेषणकोड विश्लेषणरिवर्स इंजीनियरिंगडीबगर्सबाइनरी विश्लेषण
GitHubfelixber/findfunc

FindFunc

असेंबली पैटर्न, बाइट अनुक्रम, स्ट्रिंग/नाम संदर्भ, और आकार बाधाओं द्वारा फ़ंक्शन को फ़िल्टर करने के लिए IDA Pro प्लगइन, जिसमें नियम-आधारित खोज और उन्नत बाइनरी कॉपी करना शामिल है।

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

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

सभी देखें →

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

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

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

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

FindFunc: IDA Pro में फ़ंक्शंस की उन्नत फ़िल्टरिंग/खोज

FindFunc एक IDA Pro प्लगइन है जो कोड फ़ंक्शंस को खोजने के लिए है जिनमें एक निश्चित असेंबली या बाइट पैटर्न होता है, एक निश्चित नाम या स्ट्रिंग का संदर्भ होता है, या विभिन्न अन्य बाधाओं का पालन करते हैं।

FindFunc ने 2022 HexRays IDA Pro Plugin Contest में तीसरा स्थान जीता!

ffmain

नियमों के साथ फ़िल्टरिंग

FindFunc की मुख्य कार्यक्षमता उपयोगकर्ता को "Rules" या बाधाओं का एक सेट निर्दिष्ट करने देती है जिसे IDA Pro में एक कोड फ़ंक्शन को संतुष्ट करना होता है। FF फिर उन सभी फ़ंक्शंस को खोजेगा और सूचीबद्ध करेगा जो सभी नियमों को संतुष्ट करते हैं (इसलिए वर्तमान में सभी नियम AND-संयोजन में हैं)। अपवाद: नियमों को नकारात्मक मिलान के लिए "inverted" किया जा सकता है। ऐसे नियम इस प्रकार "AND NOT" के अनुरूप होते हैं।

FF प्रसंस्करण समय को कम करने के लिए नियमों को स्मार्ट क्रम में शेड्यूल करेगा। सुविधा अवलोकन:

  • वर्तमान में 6 नियम उपलब्ध हैं, नीचे देखें
  • फ़ंक्शन चंक्स से अवगत
  • प्रदर्शन के लिए नियमों का स्मार्ट शेड्यूलिंग
  • सरल ASCII प्रारूप में फ़ाइल से/में नियमों को सहेजना/लोड करना
  • प्रयोग के लिए कई स्वतंत्र टैब्स
  • क्लिपबोर्ड के माध्यम से टैब्स के बीच नियमों की प्रतिलिपि (फ़ाइल प्रारूप के समान प्रारूप)
  • पूरे सत्र (सभी टैब्स) को फ़ाइल में सहेजना
  • निर्देश बाइट्स की उन्नत प्रतिलिपि (सभी, केवल ऑपकोड, इमीडिएट्स को छोड़कर सभी, ...)
  • परिणामों को परिष्कृत करने के त्वरित प्रयोगों के लिए टैब्स क्लोन करें
  • कोड मिलान एड्रेसिंग-साइज़-प्रीफ़िक्स और ऑपरेंड-साइज़-प्रीफ़िक्स का सम्मान करता है

बटन "Find Functions" मौजूदा परिणामों को साफ़ करता है और एक ताज़ा खोज शुरू करता है, "Refine Results" केवल पिछली खोज के परिणामों पर विचार करता है।

उन्नत बाइनरी प्रतिलिपि (Advanced Binary Copying)

FF की एक द्वितीयक विशेषता निम्नलिखित विकल्पों के साथ निर्देशों के बाइनरी प्रतिनिधित्व की प्रतिलिपि बनाने का विकल्प है:

  • सभी कॉपी करें -> सभी बाइट्स को क्लिपबोर्ड पर कॉपी करें
  • बिना इमीडिएट्स के कॉपी करें -> निर्देश बाइट्स में किसी भी इमीडिएट मान को रिक्त (AA ?? BB) करें
  • केवल ऑपकोड -> निर्देश के वास्तविक ऑपकोड (और प्रीफ़िक्स) को छोड़कर सब कुछ रिक्त कर देगा
  • ...

विवरण के लिए नीचे "advanced copying" अनुभाग देखें। यह सुविधा बाइट पैटर्न नियम (Byte Pattern rule) के साथ अच्छी तरह से मेल खाती है!

निर्माण और स्थापना

FindFunc एक IDA Pro पायथन प्लगइन है जिसमें कोई बाहरी पैकेज निर्भरता नहीं है। इसे रिपॉजिटरी डाउनलोड करके और फ़ाइल 'findfuncmain.py' और फ़ोल्डर 'findfunc' को अपने IDA Pro प्लगइन निर्देशिका में कॉपी करके स्थापित किया जा सकता है। IDA 9.0+ के लिए रिपॉजिटरी को सीधे प्लगइन निर्देशिका में क्लोन भी किया जा सकता है। किसी भी तरह से निर्माण की आवश्यकता नहीं है।

आवश्यकताएँ: python3 वातावरण के साथ IDA Pro 8.x (8.3+)। FindFunc केवल x86/x64 आर्किटेक्चर के लिए डिज़ाइन किया गया है। इसे Windows 10 + 11 पर IDA 8.3 - 9.2, python 3.11 के साथ परीक्षण किया गया है।

उपलब्ध नियम

वर्तमान में निम्नलिखित छह नियम उपलब्ध हैं। उन्हें प्रदर्शन प्रभाव के संबंध में भारी से हल्के क्रम में यहाँ क्रमबद्ध किया गया है। बड़े डेटाबेस के साथ एक अच्छा विचार है कि पहले एक सस्ते नियम के साथ उम्मीदवार-फ़ंक्शंस को कम करें, फिर भारी मिलान करें जैसे कि कोड नियमों (Code Rules) के माध्यम से। FF स्वचालित रूप से नियमों को स्मार्ट तरीके से शेड्यूल करेगा।

कोड पैटर्न

किसी दिए गए असेंबली कोड स्निपेट को शामिल करने के आधार पर फ़ंक्शन को फ़िल्टर करने का नियम। यह IDA के टेक्स्टुअल डिसअसेंबली प्रतिनिधित्व के लिए टेक्स्ट-खोज नहीं है, बल्कि अंतर्निहित निर्देश का उन्नत मिलान करता है। स्निपेट में कई क्रमिक निर्देश हो सकते हैं, प्रति पंक्ति एक। फ़ंक्शन चंक्स समर्थित हैं। शाब्दिक असेंबली के अलावा विशेष वाइल्डकार्ड मिलान का समर्थन करता है:

  • "pass" -> किसी भी ऑपरेंड के साथ किसी भी निर्देश से मेल खाता है
  • "mov* any,any" -> मेमोनिक "mov*" (जैसे mov, movzx, ...) और किन्हीं दो तर्कों वाले निर्देशों से मेल खाता है।
  • "mov eax, r32" -> मेमोनिक "mov" वाले किसी भी निर्देश से मेल खाता है, जिसका पहला ऑपरेंड रजिस्टर eax और दूसरा ऑपरेंड कोई 32-बिट रजिस्टर हो।
    • समान: r किसी भी रजिस्टर के लिए, r8/r16/r32/r64 एक विशिष्ट चौड़ाई के रजिस्टर के लिए, "imm" किसी भी इमीडिएट के लिए
  • "mov r64, imm" -> एक 64-बिट रजिस्टर में स्थिरांक के किसी भी मूव से मेल खाता है
  • "any r64,r64" -> दो 64-बिट रजिस्टरों के बीच किसी भी ऑपरेशन से मेल खाता है
  • mov -> mov मेमोनिक के किसी भी निर्देश से मेल खाता है

अधिक उदाहरण:

root@kitploit:~
mov r64, [r32 * 8 + 0x100]
mov r, [r * 8 - 0x100]
mov r64, [r32 * 8 + imm]
pass
mov r, word [eax + r32 * 8 - 0x100]
any r64, r64
push imm
push any

सावधानियाँ: IDA से असेंबली कॉपी करते समय सावधान रहें। IDA निर्देश में स्थानीय चर नाम और अन्य जानकारी मिला देता है जो मिलान विफलता का कारण बनता है। साथ ही, लेबल समर्थित नहीं हैं ("call sub_123456")।

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

इमीडिएट मान (स्थिरांक)

फ़ंक्शन में दिए गए इमीडिएट को कम से कम एक बार किसी भी स्थिति में शामिल होना चाहिए। इमीडिएट मान निर्देश के बाइनरी प्रतिनिधित्व में निश्चित मान होता है। इमीडिएट मान 0x100 से मेल खाने वाले निर्देशों के उदाहरण:

root@kitploit:~
mov eax, 0x100
mov eax, [0x100]
and al, [eax + ebx*8 + 0x100]
push 0x100

इमीडिएट्स को सीधे क्लिपबोर्ड से नियमों की सूची में पेस्ट किया जा सकता है। नोट: IDA किसी भी आकार और इमीडिएट की किसी भी स्थिति का व्यापक मिलान करता है। यदि आप इसे 4 या 8 बाइट्स की विशिष्ट चौड़ाई के रूप में जानते हैं, तो एक बाइट पैटर्न तेज़ हो सकता है (लेकिन गलत सकारात्मक उत्पन्न कर सकता है)।

बाइट पैटर्न

फ़ंक्शन में दिए गए बाइट पैटर्न को कम से कम एक बार शामिल होना चाहिए। पैटर्न IDA के बाइनरी खोज के समान प्रारूप का है, और इस प्रकार वाइल्डकार्ड का समर्थन करता है - उन्नत-प्रतिलिपि सुविधा के लिए एकदम सही मेल!

उदाहरण:

root@kitploit:~
11 22 33 44 aa bb cc
11 22 33 ?? ?? bb cc -> ?? कोई भी बाइट हो सकता है

बाइट-पैटर्न को सीधे क्लिपबोर्ड से नियमों की सूची में पेस्ट किया जा सकता है। नोट: पैटर्न मिलान काफी तेज़ है और मैचों को जल्दी से कम करने के लिए एक अच्छा उम्मीदवार है!

स्ट्रिंग संदर्भ

फ़ंक्शन में दिए गए स्ट्रिंग को कम से कम एक बार संदर्भित होना चाहिए। स्ट्रिंग को पायथन के 'fnmatch' मॉड्यूल के अनुसार मिलान किया जाता है, और इस प्रकार वाइल्डकार्ड-जैसे मिलान का समर्थन करता है। मिलान केस-असंवेदनशील है। निम्नलिखित प्रारूपों के स्ट्रिंग पर विचार किया जाता है: [idaapi.STRTYPE_C, idaapi.STRTYPE_C_16] (इसे Config वर्ग में बदला जा सकता है)।

उदाहरण:

  • "TestString" -> फ़ंक्शन को कम से कम एक बार सटीक स्ट्रिंग (केस की अनदेखी) का संदर्भ देना चाहिए
  • "TestStr*" -> फ़ंक्शन को 'TestStr' से शुरू होने वाले स्ट्रिंग का कम से कम एक बार संदर्भ देना चाहिए (जैसे TestString, TestStrong) (केस की अनदेखी)

नोट: स्ट्रिंग मिलान तेज़ है और उम्मीदवारों को जल्दी से कम करने के लिए एक अच्छा विकल्प है!

नाम संदर्भ

फ़ंक्शन में दिए गए नाम/लेबल को कम से कम एक बार संदर्भित होना चाहिए। नाम/लेबल को पायथन के 'fnmatch' मॉड्यूल के अनुसार मिलान किया जाता है, और इस प्रकार वाइल्डकार्ड-जैसे मिलान का समर्थन करता है। मिलान केस-असंवेदनशील है।

उदाहरण:

  • "memset" -> फ़ंक्शन को कम से कम एक बार नाम "memset" का संदर्भ देना चाहिए
  • "mem*" -> फ़ंक्शन को "mem" से शुरू होने वाले नाम (memset, memcpy, memcmp) का कम से कम एक बार संदर्भ देना चाहिए

नोट: नाम मिलान बहुत तेज़ है और उम्मीदवारों को जल्दी से कम करने के लिए आदर्श है!

फ़ंक्शन का आकार

फ़ंक्शन का आकार दी गई सीमा के भीतर होना चाहिए: "min <= functionsize <= max"। डेटा "min,max" फॉर्म के स्ट्रिंग के रूप में दर्ज किया जाता है। फ़ंक्शन के आकार में इसके सभी चंक्स शामिल हैं।

नोट: फ़ंक्शन आकार मिलान बहुत तेज़ है और उम्मीदवारों को जल्दी से कम करने के लिए आदर्श है!

कीबोर्ड शॉर्टकट और GUI

उपयोग में आसानी के लिए FF का उपयोग निम्नलिखित कीबोर्ड शॉर्टकट के माध्यम से किया जा सकता है:

  • Ctrl+Alt+F -> TabWidget लॉन्च/दिखाएँ (मुख्य GUI)
    • या View->FindFunc
  • Ctrl+F -> वर्तमान में सक्षम नियमों के साथ खोज शुरू करें
  • Ctrl+R -> वर्तमान में सक्षम नियमों के साथ मौजूदा परिणामों को परिष्कृत करें
  • नियम
    • Ctrl+C -> चयनित नियमों को क्लिपबोर्ड पर कॉपी करें
    • Ctrl+V -> क्लिपबोर्ड से वर्तमान टैब में नियम पेस्ट करें (जोड़ता है)
    • Ctrl+S -> चयनित नियमों को फ़ाइल में सहेजें
    • Ctrl+L -> फ़ाइल से चयनित नियम लोड करें (जोड़ता है)
    • Ctrl+A -> सभी नियम चुनें
    • Del -> चयनित नियम हटाएँ
  • सत्र सहेजें
    • Ctrl+Shift+S -> सत्र को फ़ाइल में सहेजें
    • Ctrl+Shift+L -> फ़ाइल से सत्र लोड करें

आगे GUI उपयोग

  • टैब पर राइट-क्लिक: टैब क्लोन करने का विकल्प
  • नियमों को डेटा कॉलम पर डबल-क्लिक करके संपादित किया जा सकता है
  • नियमों को इन्वर्ट-मैच कॉलम पर डबल-क्लिक करके उलटा (नकारात्मक मिलान) किया जा सकता है
  • नियमों को सक्षम-कॉलम पर डबल-क्लिक करके सक्षम/अक्षम किया जा सकता है
  • नियमों या परिणामों में किसी भी सेल पर व्हील-क्लिक करने से सेल क्लिपबोर्ड पर कॉपी हो जाती है
  • बाइट-पैटर्न और इमीडिएट्स को सीधे क्लिपबोर्ड से नियम तालिका में पेस्ट किया जा सकता है
  • टैब्स को डबल-क्लिक करके नाम बदला जा सकता है
  • नियम-सूची और परिणाम-सूची दोनों के लिए सॉर्टिंग समर्थित है
  • परिणाम आइटम पर डबल-क्लिक करें और IDA में उस पर जाएँ
    • फ़ंक्शन नाम: फ़ंक्शन की शुरुआत पर जाएँ
    • कोई अन्य कॉलम: अंतिम मिलान किए गए नियम के मिलान पर जाएँ
  • चेकबॉक्स प्रोफ़ाइल: खोज के लिए प्रोफाइलिंग जानकारी आउटपुट करता है
  • चेकबॉक्स डीबग: कोड नियम मिलान के लिए विस्तृत डीबगिंग आउटपुट डंप करता है - इसका उपयोग केवल तभी करें यदि कुछ फ़ंक्शन कोड जाँच नियम तक पहुँचते हैं, अन्यथा इसमें बहुत लंबा समय लग सकता है!

उन्नत बाइनरी प्रतिलिपि

अक्सर हम असेंबली के बाइनरी पैटर्न खोजना चाहते हैं, लेकिन हार्डकोडेड पतों और मानों (इमीडिएट्स) के बिना, या यहाँ तक कि केवल निर्देश के वास्तविक ऑपकोड। FindFunc इसे आसान बनाता है डिसअसेंबली पॉपअप-मेनू में तीन कॉपी विकल्प जोड़कर:

सभी बाइट्स कॉपी करें

बाइट-पैटर्न-नियम (या IDA की बाइनरी खोज) में उपयोग के लिए सभी निर्देश बाइट्स को हेक्स-स्ट्रिंग के रूप में क्लिपबोर्ड पर कॉपी करता है।

root@kitploit:~
B8 44332211      mov eax,11223344
68 00000001      push 1000000
66:894424 70     mov word ptr ss:[esp+70],ax

will be copied as

root@kitploit:~
b8 44 33 22 11 68 00 00 00 01 66 89 44 24 70

केवल गैर-इमीडिएट बाइट्स कॉपी करें

दिए गए निर्देश के लिए निर्देश बाइट्स कॉपी करता है, किसी भी इमीडिएट मान को मास्क करता है। उदाहरण:

root@kitploit:~
B8 44332211      mov eax,11223344
68 00000001      push 1000000
66:894424 70     mov word ptr ss:[esp+70],ax

will be copied as

root@kitploit:~
b8 ?? ?? ?? ?? 68 ?? ?? ?? ?? 66 89 44 24 ??

केवल ऑपकोड कॉपी करें

सभी निर्देश बाइट्स को हेक्स-स्ट्रिंग के रूप में क्लिपबोर्ड पर कॉपी करता है, किसी भी बाइट को मास्क करता है जो वास्तविक ऑपकोड नहीं है (sib, modrm सहित, लेकिन लीगेसी प्रीफ़िक्स रखता है)।

root@kitploit:~
B8 44332211      mov eax,11223344
68 00000001      push 1000000
66:894424 70     mov word ptr ss:[esp+70],ax

will be copied as

root@kitploit:~
b8 ?? ?? ?? ?? 68 ?? ?? ?? ?? 66 89 ?? ?? ??

ऑपकोड + इमीडिएट्स कॉपी करें

एक संयोजन जो ऑपकोड और इमीडिएट्स रखता है, लेकिन उदाहरण के लिए mod r/m मास्क करता है। ध्यान दें कि यह ऑपकोड रखता है भले ही वे विशिष्ट रजिस्टर अनिवार्य करते हों, जैसे:

root@kitploit:~
B8 44332211      mov eax,11223344

will keep the opcode B8.

नोट: यह IDA के API का उपयोग करके एक "सर्वोत्तम प्रयास" है, इस प्रकार कुछ मामले हो सकते हैं जहाँ यह केवल आंशिक रूप से काम करता है। 100% सही समाधान के लिए हमें एक समर्पित x86 डिसअसेम्बली लाइब्रेरी शिप करनी होगी।

समान परिणाम कोड पैटर्न नियमों (Code Pattern Rules) के साथ प्राप्त किए जा सकते हैं, लेकिन यह तेज़ हो सकता है, उपयोगकर्ता इंटरैक्शन और वास्तविक खोज दोनों के लिए।

डिसअसेम्बली कॉपी करें

चयनित डिसअसेम्बली को क्लिपबोर्ड पर कॉपी करता है, जैसा कि IDA में दिखाई देता है।

प्रदर्शन

प्रदर्शन पर एक संक्षिप्त शब्द:

  1. नाम, स्ट्रिंग, फंकसाइज़ लगभग सभी मामलों में मुफ़्त हैं
  2. बाइटपैटर्न पैटर्न की लंबाई > 2 के लिए लगभग मुफ़्त है
  3. इमीडिएट कठिन है: हम idaapi खोज का उपयोग कर सकते हैं, या हम पूरे डेटाबेस को डिसअसेंबल कर सकते हैं और स्वयं खोज सकते हैं - यदि हम कोड पैटर्न की तलाश कर रहे हैं तो हमें यह वैसे भी करना पड़ सकता है। लेकिन: कोड पैटर्न के लिए स्कैन करना वास्तव में इमीडिएट के लिए स्कैन करने की तुलना में बहुत सस्ता है। सभी मैचों के लिए एक एपीआई-खोज अपेक्षाकृत महंगी है - पूरे डेटाबेस को डिसअसेंबल करने की लागत का लगभग 1/8। तो: यदि हम पहले सस्ते नियमों से मैचों को कम करते हैं, तो हम शेष फ़ंक्शंस को डिसअसेंबल करने और स्वयं इमीडिएट की तलाश करने से बहुत लाभ उठाते हैं, खासकर यदि एक कोड-नियम वैसे भी मौजूद है। हालाँकि: यदि कोई सस्ते विकल्प मौजूद नहीं हैं और हमें वैसे भी डेटाबेस के बड़े हिस्से को डिसअसेंबल करना है (कोड पैटर्न नियमों की उपस्थिति के कारण), तो एक इमीडिएट नियम को प्री-फ़िल्टर के रूप में उपयोग करना बहुत लाभदायक हो सकता है। एक इमीडिएट की एपीआई-खोज मोटे तौर पर किसी भी संख्या में कोड-पैटर्न नियमों की खोज के 1/8 के बराबर है - हालाँकि यह कई अलग-अलग कारकों पर भी निर्भर करता है...
  4. कोड पैटर्न अब तक सबसे महंगे हैं, हालाँकि एक पैटर्न की जाँच बनाम कई की जाँच बहुत समान है।

करने को (अव्यवस्थित):

  • jcc स्यूडो-मेमोनिक
  • कोड नियमों में नामित स्थानों की अनुमति दें ('call memset')
  • नियम xref in/out जोड़ें
  • पूर्ववत/पुनः करें
  • प्रगति पट्टी
  • टैब बंद करने के लिए मिडल-क्लिक
  • टैब मेनू: इसके अलावा सभी बंद करें
  • 'आगे के सभी ऑपरेंड अनदेखा करें' विकल्प
  • फ़ंक्शन के अंदर API कॉल के पैरामीटर के लिए नियम
  • पैरेंट/कॉलसाइट/चाइल्ड फ़ंक्शन आवश्यकताओं के लिए नियम
  • फ़ंक्शन पैरामीटर के लिए नियम
  • रेगेक्स-नियम
  • स्ट्रिंग/नाम: केसिंग विकल्प
  • यदि लागू हो तो स्वचालित रूप से इमीडिएट नियमों को बाइट पैटर्न में बदलें?
  • सेटिंग्स: केस संवेदनशीलता, स्ट्रिंग प्रकार, रेंज, ...
  • हेक्सरे नियम?
  • नियमों का OR संयोजन
  • कोड का पायथनीफिकेशन ;)
  • समानांतरीकरण
  • किसी फ़ंक्शन की पहचान करने के लिए नियमों का स्वचालित निर्माण?
टूल डाउनलोड करें