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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
ghostrings — Go बाइनरीज़ में स्ट्रिंग परिभाषाओं को पुनर्प्राप्त करने के लिए Ghidra स्क्रिप्ट्स | Kitploit
उपकरण/GitHubGitHub/nccgroup/ghostrings
कोड विश्लेषणरिवर्स इंजीनियरिंगबाइनरी विश्लेषण
GitHubnccgroup/ghostrings

ghostrings

Go बाइनरीज़ में स्ट्रिंग परिभाषाओं को पुनर्प्राप्त करने के लिए Ghidra स्क्रिप्ट्स

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

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

सभी देखें →

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

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

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

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

Ghostrings

Go बाइनरीज़ में P-Code विश्लेषण के साथ स्ट्रिंग परिभाषाओं को पुनर्प्राप्त करने के लिए स्क्रिप्ट्स। x86, x86-64, ARM, और ARM64 पर परीक्षण किया गया।

स्क्रिप्ट्स

Golang

ये Script Manager में Golang श्रेणी में पाए जा सकते हैं।

  • GoDynamicStrings.java
    • स्टैक पर निर्मित स्ट्रिंग संरचनाओं को खोजने के लिए P-Code का विश्लेषण करता है। निचले स्तर की "register" शैली विश्लेषण का उपयोग करता है।
  • GoFuncCallStrings.java
    • फ़ंक्शन कॉल्स को सीधे रजिस्टरों के माध्यम से पारित स्ट्रिंग संरचनाओं को खोजने के लिए P-Code का विश्लेषण करें, बिना उन्हें स्टैक पर लिखे। Ghidra के नए अंतर्निहित Golang समर्थन के साथ "normalize" शैली विश्लेषण का उपयोग करता है (समर्थित Golang संस्करणों के लिए Ghidra रिलीज़ नोट्स देखें)।
  • GoStaticStrings.java
    • केवल-पठनीय मेमोरी में स्थिर रूप से आवंटित Go स्ट्रिंग संरचनाओं को खोजें।
  • GoKnownStrings.java
    • मानक अद्वितीय स्ट्रिंग्स की खोज करता है और उन्हें परिभाषित करता है। स्ट्रिंग डेटा data/known_strings.json से लोड किया जाता है।
  • GoStringFiller.java
    • प्रारंभिक विश्लेषण के बाद, स्ट्रिंग डेटा के आरोही लंबाई क्रम के आधार पर, go.string.* में अंतराल को भरता है।

डायनामिक स्ट्रिंग विश्लेषण स्क्रिप्ट की कुछ विशेष विविधताएँ भी हैं:

  • GoDynamicStringsSingle.java
    • GoDynamicStrings.java के समान विश्लेषण करता है, लेकिन एक एकल डीकंपाइलर प्रक्रिया का उपयोग करता है। इसका उपयोग करें यदि किसी बाइनरी का विश्लेषण करने से समानांतर डीकंपाइलर प्रक्रियाओं द्वारा सिस्टम मेमोरी समाप्त हो जाती है।
  • GoDynamicStringsHigh.java
    • प्रायोगिक, उच्च स्तर "normalize" शैली विश्लेषण से P-Code आउटपुट का उपयोग करता है। वर्तमान में एक हैक पर निर्भर करता है जो डीकंपाइलर में डेडकोड एलिमिनेशन को बंद कर देता है (देखें https://research.nccgroup.com/2022/05/20/earlyremoval-in-the-conservatory-with-the-wrench/)। यह हैक Ghidra 10.2 में टूट जाता है।

P-Code

यह Script Manager में PCode श्रेणी में पाया जा सकता है।

  • PrintHighPCode.java
    • वर्तमान में चयनित फ़ंक्शन के लिए उच्च P-Code आउटपुट को कंसोल पर प्रिंट करता है, साथ में उपयोग करने के लिए डीकंपाइलर सरलीकरण शैली के लिए एक चयनकर्ता। मुख्य रूप से P-Code विश्लेषण स्क्रिप्ट विकसित करने के लिए उपयोग किया जाता है।

स्ट्रिंग पुनर्प्राप्ति प्रवाह

Go बाइनरी में स्ट्रिंग परिभाषाओं को पुनर्प्राप्त करने के लिए इन स्क्रिप्ट्स का उपयोग करने का सामान्य प्रवाह यहाँ है:

  1. केवल-पठनीय डेटा मेमोरी ब्लॉक में सभी गलत या स्वचालित रूप से परिभाषित स्ट्रिंग्स को साफ़ करें।
    • "Defined Strings" विंडो में, "Mem Block" कॉलम सक्षम करें और मेमोरी ब्लॉक द्वारा फ़िल्टर करके .rodata, .rdata, या __rodata में सभी स्ट्रिंग्स का चयन करें। फिर कोड लिस्टिंग में राइट-क्लिक करें और "Clear Code Bytes" चुनें।
  2. (वैकल्पिक) कुछ मानक स्ट्रिंग्स का पता लगाने के लिए GoKnownStrings.java चलाएँ।
  3. GoStaticStrings.java चलाएँ।
  4. GoFuncCallStrings.java चलाएँ (यदि Golang बाइनरी संस्करण Ghidra की अंतर्निहित Golang सुविधाओं द्वारा समर्थित है)।
  5. GoDynamicStrings.java चलाएँ।
  6. GoStringFiller.java चलाएँ।
    • यदि यह स्ट्रिंग डेटा के आरोही लंबाई क्रम के उल्लंघन का पता लगाता है, तो उस क्षेत्र में किसी भी गलत सकारात्मक स्ट्रिंग परिभाषाओं को साफ़ करें और स्क्रिप्ट को फिर से चलाएँ। इसे स्वचालित रूप से करने का एक विकल्प है।
    • यदि बाइनरी स्ट्रिप्ड है, तो डायनामिक स्ट्रिंग्स स्क्रिप्ट द्वारा पाए गए एक-बाइट स्ट्रिंग्स के क्षेत्र का पता लगाएं। सुनिश्चित करें कि यह समूहीकृत गैर-नल-समाप्त स्ट्रिंग्स की शुरुआत है (उसके बाद आरोही क्रम में लंबाई के साथ और स्ट्रिंग्स परिभाषित की जानी चाहिए)। पहले एक-बाइट स्ट्रिंग पर लेबल go.string.* बनाएं।

सेटअप

इंस्टॉल करना

Ghidra में:

  1. File -> Install Extensions -> Add extension
  2. एक्सटेंशन ZIP फ़ाइल चुनें

विकास

GhidraDev प्लगइन के साथ Eclipse के लिए:

  1. रेपो क्लोन करें
  2. File -> Import -> Projects from Folder or Archive
  3. रेपो निर्देशिका चुनें
  4. GhidraDev -> Link Ghidra...
  5. आयातित प्रोजेक्ट चुनें

निर्माण

Eclipse के साथ निर्माण करें:

  • GhidraDev -> Export -> Ghidra Module Extension...

Gradle के साथ सीधे निर्माण करें:

root@kitploit:~
$ cd Ghostrings
$ gradle -PGHIDRA_INSTALL_DIR=<ghidra_install_dir>

पृष्ठभूमि

Go प्रोग्रामों के रिवर्स इंजीनियरिंग के साथ एक प्रसिद्ध समस्या यह है कि Go स्ट्रिंग्स में नल टर्मिनेटर की कमी संकलित बाइनरीज़ से स्ट्रिंग परिभाषाओं को पुनर्प्राप्त करना कठिन बना देती है। एक Go प्रोग्राम के कई स्थिर स्ट्रिंग मान संकलित बिल्ड में एक विशाल ब्लॉब में एक साथ संग्रहीत होते हैं, बिना किसी टर्मिनेटर वर्ण के जो यह चिह्नित करते हैं कि एक स्ट्रिंग कहाँ समाप्त होती है और दूसरी शुरू होती है। यहां तक कि एक साधारण प्रोग्राम जो केवल "Hello world!" प्रिंट करता है, उसमें Go रनटाइम सिस्टम और अन्य मानक पुस्तकालयों से संबंधित 1,500 से अधिक स्ट्रिंग्स होती हैं। यह सामान्य ASCII स्ट्रिंग खोज कार्यान्वयन, जैसे कि Ghidra द्वारा प्रदान किया गया, को हजारों वर्णों लंबी गलत सकारात्मक स्ट्रिंग परिभाषाएँ बनाने का कारण बन सकता है।

नल-समाप्त स्ट्रिंग्स के बजाय, Go एक स्ट्रिंग संरचना का उपयोग करता है जिसमें एक पॉइंटर और लंबाई मान होता है। इनमें से कई स्ट्रिंग संरचनाएँ रनटाइम पर प्रोग्राम के स्टैक पर बनाई जाती हैं, इसलिए व्यक्तिगत स्ट्रिंग प्रारंभ स्थानों और लंबाई मानों को पुनर्प्राप्त करने के लिए संकलित मशीन कोड का विश्लेषण करने की आवश्यकता होती है। कुछ मौजूदा स्क्रिप्ट हैं जो x86-64 निर्देशों के कुछ पैटर्न की जाँच करके यह विश्लेषण करती हैं, लेकिन वे निर्देशों के अनियंत्रित विविधताओं के साथ बनाई गई संरचनाओं को छोड़ देती हैं जिनका अंततः स्टैक पर समान प्रभाव होता है, और वे एक विशिष्ट ISA तक भी सीमित हैं।

Ghostrings इन दोनों समस्याओं से बचता है, Ghidra के डीकंपाइलर विश्लेषण द्वारा उत्पादित सरलीकृत, आर्किटेक्चर-स्वतंत्र P-Code संचालन के साथ काम करके।

रिलीज़ जानकारी

कॉपीराइट 2022 NCC Group। GPLv3 लाइसेंस के तहत जारी (देखें LICENSE)।

मुख्य परियोजना लेखक: James Chambers [email protected]

टूल डाउनलोड करें
  • go.string.* में शेष अंतराल की जाँच करें, और स्पष्ट प्रारंभ और अंत बिंदुओं वाली किसी भी स्ट्रिंग को परिभाषित करें।
    • GoStringFiller.java का अधिकतम उपयोग करने के लिए, पहचानें कि अपरिभाषित स्ट्रिंग डेटा में स्ट्रिंग लंबाई कहाँ बदल रही है और उस सीमा के निकटतम स्ट्रिंग्स को परिभाषित करें। फिर GoStringFiller.java को फिर से चलाएँ ताकि यह स्वचालित रूप से उन स्थानों को भर सके जहाँ यह शेष अपरिभाषित स्ट्रिंग्स की लंबाई सही ढंग से निर्धारित कर सकता है।
  • (वैकल्पिक) Ghidra के अंतर्निहित ASCII String विश्लेषण उपकरण को फिर से चलाएँ।
    • मौजूदा स्ट्रिंग्स को अधिलेखित करना अक्षम करें। नल टर्मिनेटर आवश्यकता के साथ और फिर बिना चलाएँ।