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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
pythia — डेल्फी एक्ज़ीक्यूटेबल्स से RTTI जानकारी निकालने के लिए एक उपकरण, जो शुद्ध Python में लिखा गया है | Kitploit
उपकरण/GitHubGitHub/nccgroup/pythia
रिवर्स इंजीनियरिंगमालवेयर विश्लेषणबाइनरी विश्लेषण
GitHubnccgroup/pythia

pythia

डेल्फी एक्ज़ीक्यूटेबल्स से RTTI जानकारी निकालने के लिए एक उपकरण, जो शुद्ध Python में लिखा गया है

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

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

सभी देखें →

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

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

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

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

परिचय / tl;dr

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

  • क्लास ट्री जनरेट करें।
  • IDA के लिए नाम और टिप्पणियाँ जनरेट करें।
  • आगे की प्रोसेसिंग में डालें, जैसे स्वचालित डिकंपाइलेशन।

एक IDAPython स्क्रिप्ट प्रदान की गई है जो आउटपुट को IDA में लोड कर सकती है।

यह स्क्रिप्ट Delphi के रिवर्स इंजीनियरिंग के लिए अन्य टूल्स को पूरक बनाने के लिए लिखी गई थी।

लेखक और लाइसेंस

एनसीसी ग्रुप Plc द्वारा ओपन सोर्स के रूप में जारी - http://www.nccgroup.com/

डेविड कैनिंग्स (@edeca) [email protected] द्वारा विकसित

http://www.github.com/nccgroup/pythia

यह प्रोजेक्ट AGPL लाइसेंस के तहत जारी किया गया है। अधिक जानकारी के लिए LICENSE देखें।

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

उच्च स्तरीय प्रवाह इस प्रकार है:

  • PE फ़ाइल लोड करें और कोड सेक्शन खोजें
  • प्रत्येक कोड सेक्शन को 4 बाइट्स के अंतराल पर स्कैन करें
  • संभावित vftables की पहचान करें और उन्हें मान्य करें
  • क्लास नाम और पैरेंट संबंधों को पार्स करें
  • फंक्शन इनहेरिटेंस की पहचान करें

संभावित vftables की पहचान करना

Delphi vftables अच्छी तरह से प्रलेखित हैं। नवीनतम संस्करण की जानकारी Embarcadero से उपलब्ध है। Delphi 2005 के लिए अनौपचारिक दस्तावेज़ उपलब्ध है (यहाँ देखें)।

Free Pascal का स्रोत कोड भी उपयोगी है (Github mirror)।

vftable में पहला आइटम vmtSelfPtr होता है, जो वर्चुअल फंक्शन टेबल की शुरुआत की ओर संकेत करता है। स्क्रिप्ट PE फ़ाइल में प्रत्येक कोड सेगमेंट को आगे की ओर +0x4C बाइट्स इंगित करने वाले स्थान के लिए स्कैन करती है। ध्यान दें कि Delphi कंपाइलर vftables को 4 बाइट सीमा पर संरेखित करता है (अनुकूलन के लिए)।

उदाहरण के लिए, निम्नलिखित VA 0x0046E1C8 में ऑफसेट 0x0046E214 होता है, जो वर्तमान स्थान से 0x4C आगे है। जैसा कि IDA में दिखाया गया है:

root@kitploit:~
.text:0046E1C8                   ; Classes::TComponent *vftable_TDCP_misty1
.text:0046E1C8 14 E2 46 00       vftable_TDCP_misty1 dd offset off_46E214

यह दृष्टिकोण झूठे सकारात्मक (false positives) उत्पन्न कर सकता है, इसलिए vftable के अन्य फ़ील्ड्स को उचित मानों के लिए जाँचा जाता है। उदाहरण के लिए vmtInstanceSize की जाँच यह सुनिश्चित करने के लिए की जाती है कि यह अत्यधिक न हो और फंक्शन पॉइंटर्स को सत्यापित किया जाता है कि वे एक एक्ज़िक्यूटेबल सेक्शन में स्थित हों। परीक्षण के दौरान ब्रूट फोर्स खोज विधि के बावजूद झूठे सकारात्मक की दर बहुत कम थी।

इनहेरिटेंस

vftable में पाया गया प्रत्येक फंक्शन यह जाँचने के लिए देखा जाता है कि क्या यह पैरेंट से इनहेरिट किया गया है या ओवरलोड किया गया है। Delphi एकाधिक इनहेरिटेंस का समर्थन नहीं करता, इसलिए इसे पैरेंट vftable में समान ऑफसेट वाले पॉइंटर की जाँच करके प्राप्त किया जा सकता है।

यदि दोनों पॉइंटर्स एक ही फंक्शन को संदर्भित करते हैं, तो यह इनहेरिट किया गया है। यदि चाइल्ड का पॉइंटर अलग है, तो इसे ओवरलोड किया गया है।

उदाहरण आउटपुट

टूल का प्राथमिक आउटपुट एक JSON फ़ाइल है जिसे बाद की प्रोसेसिंग / टूल्स में डाला जा सकता है। हालाँकि, कुछ अन्य आउटपुट प्रारूप भी शामिल हैं।

ट्री आउटपुट

एक फ़ाइल उत्पन्न करने के लिए --save-tree विकल्प का उपयोग करें, जैसे:

root@kitploit:~
TObject (at 0x0040112c)
|-- Exception (at 0x004081f8)
|   |-- EAbort (at 0x00408260)
|   |-- EAbstractError (at 0x00408ad4)
|   |-- EAssertionFailed (at 0x00408a74)
|   |-- EBcdException (at 0x004bd110)
|   |   +-- EBcdOverflowException (at 0x004bd16c)
|   |-- EBitsError (at 0x0041ab04)
|   |-- EComponentError (at 0x0041abbc)
|   |-- EConvertError (at 0x00408850)
|   |-- EDCP_cipher (at 0x0046a0ac)
|   |   +-- EDCP_blockcipher (at 0x0046a29c)
|   |-- EDCP_hash (at 0x00469f20)
.. etc ..

भविष्य के लक्ष्य

  • Delphi संस्करण की पहचान करें (उदाहरण के लिए PACKAGEINFO या DVCLAL संसाधन से) और विभिन्न vftable लेआउट के लिए स्कैनिंग समायोजित करें।
  • अधिक क्लास जानकारी पार्स करें, जैसे प्रॉपर्टी (Delphi विशिष्ट आइटम) और मेथड टेबल
  • Delphi RTTI जानकारी पार्स करें (vftable में vmtTypeInfo)
  • कैपस्टोन के साथ कोड डिसअसेंबल करें और वर्चुअल कॉल की पहचान करें (उदाहरण के लिए call [ecx+3Fh] का किसी इंस्टेंस मेथड से मिलान करें)

सावधानियाँ

  • इस समय केवल 32-बिट कोड पर परीक्षण किया गया है। कृपया मुझे 64-बिट नमूने भेजें।
  • केवल Windows PE फ़ाइलों का समर्थन करता है (Delphi अन्य प्रारूपों में भी संकलित होगा)।
  • इसे पूर्ण Delphi डिकंपाइलर के रूप में डिज़ाइन नहीं किया गया है। DeDe / IDR / Hex-Rays का उपयोग करें।
  • केवल उन Delphi बायनेरिज़ के लिए उपयोगी है जो ऑब्जेक्ट्स का उपयोग करते हैं (सभी नहीं करते)।
  • आधुनिक Delphi TComparer<System.Bindings.EvalProtocol.TPair<System.IInterface,System.Pointer>> जैसे नामों का उपयोग करता है जो IDA में काफी दुर्बोध्य हैं।

कृपया मुझे उन बायनेरिज़ के उदाहरण भेजें जहाँ यह टूल काम नहीं करता, ताकि इसे बेहतर बनाया जा सके।

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