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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
Virtuailor — IDA Pro में स्वचालित C++ वर्चुअल टेबल बनाने का IDAPython उपकरण | Kitploit
उपकरण/GitHubGitHub/0xgalz/virtuailor
स्थैतिक विश्लेषणगतिशील विश्लेषण (सैंडबॉक्सिंग)रिवर्स इंजीनियरिंगडीबगर्सबाइनरी विश्लेषण
GitHub0xgalz/virtuailor

Virtuailor

IDA Pro में स्वचालित C++ वर्चुअल टेबल बनाने का IDAPython उपकरण

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

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

सभी देखें →

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

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

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

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

Virtuailor - C++ vtables पुनर्निर्माण के लिए IDAPython उपकरण

Virtuailor एक IDAPython उपकरण है जो इंटेल आर्किटेक्चर, दोनों 32बिट और 64बिट कोड और AArch64 (नया!) के लिए लिखे गए C++ कोड के लिए vtables का पुनर्निर्माण करता है। यह उपकरण 2 भागों से निर्मित है: स्थैतिक और गतिशील।

पहला भाग स्थैतिक है, जिसमें निम्नलिखित क्षमताएं हैं:

  • अप्रत्यक्ष कॉल का पता लगाता है।
  • सशर्त ब्रेकपॉइंट्स का उपयोग करके अप्रत्यक्ष कॉल के मान असाइनमेंट को हुक करता है (हुक कोड)।

दूसरा भाग गतिशील है, जिसमें निम्नलिखित क्षमताएं हैं:

  • vtable संरचनाएँ बनाता है।
  • फ़ंक्शन और vtables पतों का नाम बदलता है।
  • असेंबली अप्रत्यक्ष कॉल में संरचना ऑफसेट जोड़ता है।
  • अप्रत्यक्ष कॉल से उनके वर्चुअल फ़ंक्शन में xref जोड़ता है (एकाधिक xrefs)।
  • AArch64 के लिए - अपरिभाषित vtables और संबंधित वर्चुअल फ़ंक्शन को ठीक करने का प्रयास करता है (फर्मवेयर के लिए समर्थन)।

उपयोग कैसे करें?

Virtuailor अब IDA संस्करण 7.0 से नवीनतम संस्करण (7.5) तक का समर्थन करता है। यदि आप IDA संस्करण 7.4 से पुराने का उपयोग कर रहे हैं तो आपको beforeIDA-7.4 शाखा पर स्विच करना होगा। मास्टर शाखा उपलब्ध नवीनतम संस्करण (7.5) का समर्थन करती है।

  1. डिफ़ॉल्ट रूप से Virtuailor कोड में सभी पतों में वर्चुअल कॉल की तलाश करेगा। यदि आप कोड को केवल विशिष्ट पता सीमा तक सीमित करना चाहते हैं, तो कोई समस्या नहीं है, बस Main फ़ाइल को संपादित करके वेरिएबल start_addr_range और end_addr_range में लक्षित सीमा जोड़ें:
root@kitploit:~
if __name__ == '__main__':

    start_addr_range = idc.MinEA()  # You can change the virtual calls address range
    end_addr_range = idc.MaxEA()
    add_bp_to_virtual_calls(start_addr_range, end_addr_range)
  1. वैकल्पिक, (लेकिन अत्यधिक अनुशंसित), अपने idb का स्नैपशॉट बनाएं। बस ctrl+shift+t दबाएं और स्नैपशॉट बनाएं।

  2. File->Run script... दबाएं, फिर Virtuailor फ़ोल्डर में जाएं और Main.py चलाना चुनें। अधिक स्पष्ट और दृश्य स्पष्टीकरण के लिए आप निम्न GIF देख सकते हैं। How to use

अब GUI आपको लक्षित करने के लिए एक सीमा चुनने का विकल्प प्रदान करेगा, यदि आप पूरे बाइनरी को लक्षित करना चाहते हैं तो आरंभ और अंत पतों में डिफ़ॉल्ट मानों के साथ OK दबाएं।

उसके बाद ब्रेकपॉइंट्स आपके कोड में रखे जाएंगे और आपको बस इतना करना है कि IDA डीबगर के साथ अपने कोड को निष्पादित करें, जो भी कार्य आप चाहते हैं करें और देखें कि vtables कैसे बन रहे हैं! AArch64 के लिए आप एक रिमोट gdb सर्वर सेट अप कर सकते हैं और IDA डीबगर का उपयोग करके डीबग कर सकते हैं।

यदि आप अब ब्रेकपॉइंट्स नहीं चाहते/जरूरत नहीं है, तो बस IDA में ब्रेकपॉइंट सूची टैब पर जाएं और अपनी इच्छानुसार ब्रेकपॉइंट्स हटा दें।

यह भी ध्यान देने योग्य है कि यह उपकरण का दूसरा संस्करण है जिसमें 32 और 64 बिट और aarch64 दोनों के लिए समर्थन है, शायद कुछ मामलों में थोड़ी संख्या में ब्रेकपॉइंट छूट जाएंगे। ऐसे मामलों में कृपया एक इश्यू खोलें और मुझसे संपर्क करें ताकि मैं कोड में सुधार कर सकूं और इसे ठीक करने में मदद कर सकूं। इसके लिए अग्रिम धन्यवाद :)

आउटपुट और सामान्य फ़ंक्शन

vtables संरचनाएँ

Virtuailor उन vtable से संरचनाएँ बनाता है जो मारे गए वर्चुअल कॉल में उपयोग की गई थीं। vtable फ़ंक्शन BP ऑपकोड में उपयोग किए गए प्रासंगिक रजिस्टर के आधार पर स्मृति से निकाले जाते हैं।

vtable example चूंकि मैं IDA में संरचना और डेटा अनुभाग में vtables के बीच सहसंबंध बनाना चाहता था, BP डेटा अनुभाग में vtable पते के नाम को संरचना के नाम में बदल देता है। जैसा कि आप निम्नलिखित चित्र में देख सकते हैं: vtable example

वर्चुअल फ़ंक्शन के नाम भी बदले जा रहे हैं, उन स्थितियों को छोड़कर जहां नाम डिफ़ॉल्ट IDA नाम नहीं हैं (प्रतीकों वाले फ़ंक्शन या उपयोगकर्ता द्वारा बदले गए फ़ंक्शन), उन मामलों में फ़ंक्शन नाम वही रहेंगे और उन्हें उनके वर्तमान नाम के साथ vtable संरचना में भी जोड़ा जाएगा।

चुने गए नाम निम्नलिखित पैटर्न का उपयोग करके बनाए गए हैं:

  • vtable_
  • vfunc_ बाकी का नाम या तो सेगमेंट की शुरुआत से ऑफसेट है, यह अधिकतर इसलिए है क्योंकि आजकल अधिकांश बाइनरी PIE और PIC हैं और इस प्रकार ASLR लागू है, (पूर्ण पता नाम का उपयोग करने के बजाय, जो 64बिट वातावरण में काफी लंबा भी होता है)। vtable संरचना में एक टिप्पणी भी है, "Was called from offset: XXXX", यह ऑफसेट सेगमेंट की शुरुआत से ऑफसेट है।

असेंबली में संरचनाएँ जोड़ना

vtable बनाने के बाद Virtuailor बनाई गई संरचना और असेंबली के बीच एक कनेक्शन भी जोड़ता है जैसा कि आप निम्नलिखित छवियों में देख सकते हैं: BP after an execution, Example 2

P.S: BP में उपयोग की गई संरचना ऑफसेट केवल अंतिम कॉल के लिए प्रासंगिक है, सभी किए गए वर्चुअल कॉल की बेहतर समझ प्राप्त करने के लिए xref सुविधा जोड़ी गई जैसा कि अगले अनुभाग में समझाया गया है।

वर्चुअल फ़ंक्शन में Xref

जब C++ को स्थैतिक रूप से रिवर्स करते हैं तो यह देखना आसान नहीं है कि किसने किसे कॉल किया, ऐसा इसलिए है क्योंकि अधिकांश कॉल अप्रत्यक्ष कॉल हैं, हालांकि Virtuailor चलाने के बाद हर वह फ़ंक्शन जिसे अप्रत्यक्ष रूप से कॉल किया गया था, अब उन स्थानों पर एक xref है।

निम्नलिखित gif उनके अप्रत्यक्ष फ़ंक्शन कॉल के साथ जोड़े गए Xrefs को दिखाता है:

xref

पिछले वार्ताएँ और व्याख्यान

यह उपकरण RECon ब्रुसेल्स, ट्रूपर्स और वॉरकॉन में प्रस्तुत किया गया था। प्रस्तुति निम्नलिखित लिंक पर पाई जा सकती है: https://www.youtube.com/watch?v=Xk75TM7NmtA

धन्यवाद

REcon Brussels, Troopers, Warcon crews, Nana, @tmr232, @matalaz, @oryandp, @talkain, @shiftreduce

लाइसेंस

प्लगइन GNU GPL v3 लाइसेंस के तहत लाइसेंस प्राप्त है।

टूल डाउनलोड करें