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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
macos_app_structure — macOS ऐप बंडलों, plist फ़ाइलों और launchd प्रोसेस व्यवहार पर शैक्षिक गहन अध्ययन, साथ ही पेलोड को .app फ़ाइलों के रूप में पैकेज करने और प्रोसेस-ट्री मॉनिटरिंग से बचने पर आक्रामक सुरक्षा नोट्स। | Kitploit
उपकरण/GitHubGitHub/yo-yo-yo-jbo/macos_app_structure
स्थायित्व तंत्रआईडीएस/आईपीएस से बचनालर्निंग और शिक्षारेड टीमिंगपेलोड डेवलपमेंट
GitHubyo-yo-yo-jbo/macos_app_structure

macos_app_structure

macOS ऐप बंडलों, plist फ़ाइलों और launchd प्रोसेस व्यवहार पर शैक्षिक गहन अध्ययन, साथ ही पेलोड को .app फ़ाइलों के रूप में पैकेज करने और प्रोसेस-ट्री मॉनिटरिंग से बचने पर आक्रामक सुरक्षा नोट्स।

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

सभी देखें →

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

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

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

सभी उपकरण देखें →
रिपॉजिटरी देखें
472182 महीने पहलेKitploit द्वारा समीक्षित
साझा करें

macOS का परिचय - macOS ऐप संरचना

Linux से या Windows से macOS पर आना एक अनजान नई दुनिया में चलने जैसा महसूस हो सकता है। चूँकि Linux open-source है और Windows अच्छी तरह से documented और बहुत लोकप्रिय है (और macOS वास्तव में इन दोनों में से नहीं है), macOS कभी-कभी चुनौतीपूर्ण हो सकता है। इस blogpost में, मैं macOS पर आपके सामने आने वाली कुछ पहली चीज़ों पर चर्चा करने का इरादा रखता हूँ - Apps, हर जगह Apps!

Apps बनाम processes (tasks?)

Windows या Linux पृष्ठभूमि से आने पर, Apps की अवधारणा अजीब लग सकती है। हम सभी जानते हैं कि threads "निष्पादन की इकाइयाँ" हैं और processes अपने स्वयं के address space वाले threads के कंटेनर हैं -- इसमें और क्या है? खैर, processes शायद ही कभी एकल फ़ाइलों में deployed होते हैं। Windows और Linux दोनों पर कोड को कार्य करने के लिए कई चीज़ों की आवश्यकता हो सकती है, उनमें से कुछ हैं:

  • लोड करने योग्य मॉड्यूल (.dll, .so)। उदाहरण के लिए, C runtime library (msvcr<version>.dll Windows पर, libc-<version>.so) साथ ही अन्य निर्भरताएँ।
  • संसाधन। उदाहरण के लिए, Windows पर, executable फ़ाइलें PE नामक प्रारूप में आती हैं, जिसमें निर्देशिकाएँ होती हैं - उनमें से एक resource directory है (यहाँ कुछ हद तक documented भी है) जिसमें संसाधन हो सकते हैं (images, strings और अन्य)। संसाधनों को निश्चित रूप से डिस्क से dynamically भी लोड किया जा सकता है।
  • डिजिटल हस्ताक्षर। ये Linux पर कम आम हैं (हालाँकि किसी न किसी रूप में मौजूद होते हैं - उदाहरण के लिए, Debian Packages में) लेकिन महत्वपूर्ण हैं। Windows पर ये स्वयं PE फ़ाइल में मौजूद हो सकते हैं (यहाँ पढ़ें) या catalogue फ़ाइलों में (अर्थात् बाह्य रूप से)।
  • कॉन्फ़िगरेशन। Linux पर, ये फ़ाइलें होती हैं (आपकी भरोसेमंद .bashrc files की तरह), और Windows पर ये फ़ाइलों (जैसे xml, ini, json) और Windows Registry के बीच विभाजित होती हैं।
  • अन्य executables।

खैर, macOS Application Bundles पर बहुत जोर देता है। विचार यह है कि प्रोग्राम को चलाने के लिए आवश्यक (लगभग) सब कुछ एक निर्देशिका संरचना में पैकेज किया जाए - इसमें संसाधन, localization जानकारी आदि शामिल हैं। बेशक, सब कुछ अच्छी तरह से पैकेज नहीं किया जा सकता (उदाहरण के लिए, C runtime library) - लेकिन इसका मतलब यह है कि चीज़ें एक साथ bundled होती हैं - विशाल Registry को नेविगेट करने या अस्पष्ट configuration फ़ाइल स्थानों के लिए manual pages पढ़ने की कोई आवश्यकता नहीं है। Application bundles केवल .app से समाप्त होने वाली निर्देशिकाएँ हैं - भले ही UI .app extension (और यह तथ्य कि यह एक निर्देशिका है) छिपा देता है। एक attacker के दृष्टिकोण से यह दिलचस्प है - चूँकि एक Application Bundle में मनमाने icons हो सकते हैं और यह .app extension छिपाता है - अनजान उपयोगकर्ता को ऐसे ऐप पर क्लिक करने के लिए धोखा देकर malware वितरित किया जा सकता है। उदाहरण के लिए, PDF icon वाली Resume.app फ़ाइल के बारे में सोचें।

Application Bundle की निर्देशिका संरचना को आसानी से देखा जा सकता है, जाहिर है अंतर्निहित Calculator App द्वारा:

jbo@McJbo ~ % cd /System/Applications/Calculator.app
jbo@McJbo Calculator.app % ll
total 0
drwxr-xr-x   3 root  wheel    96 Mar 17 21:34 .
drwxr-xr-x  43 root  wheel  1376 Mar 17 21:34 ..
drwxr-xr-x   9 root  wheel   288 Mar 17 21:34 Contents
jbo@McJbo Calculator.app % cd Contents
jbo@McJbo Contents % ll
total 16
drwxr-xr-x    9 root  wheel   288 Mar 17 21:34 .
drwxr-xr-x    3 root  wheel    96 Mar 17 21:34 ..
-rw-r--r--    1 root  wheel  2147 Mar 17 21:34 Info.plist
drwxr-xr-x    3 root  wheel    96 Mar 17 21:34 MacOS
-rw-r--r--  204 root  wheel     8 Mar 17 21:34 PkgInfo
drwxr-xr-x    4 root  wheel   128 Mar 17 21:34 PlugIns
drwxr-xr-x   54 root  wheel  1728 Mar 17 21:34 Resources
drwxr-xr-x    3 root  wheel    96 Mar 17 21:34 _CodeSignature
-rw-r--r--    1 root  wheel   461 Mar 17 21:34 version.plist
jbo@McJbo Contents % cd MacOS
jbo@McJbo MacOS % ll
total 344
drwxr-xr-x  3 root  wheel      96 Mar 17 21:34 .
drwxr-xr-x  9 root  wheel     288 Mar 17 21:34 ..
-rwxr-xr-x  1 root  wheel  540912 Mar 17 21:34 Calculator
jbo@McJbo MacOS %

जैसा कि आप देख सकते हैं, Calculator.app एक निर्देशिका है। इसके अंतर्गत एक ही item है - Contents नामक एक और निर्देशिका। Contents के अंतर्गत कई items हैं:

  • Info.plist - App के बारे में metadata रखता है। इस पर बाद में और चर्चा करेंगे।
  • MacOS - App का मुख्य executable रखता है (जैसा कि तीसरी निर्देशिका listing में देखा जा सकता है)।
  • PkgInfo - अनिवार्य नहीं। एक binary फ़ाइल जो पैकेज जानकारी रखती है।
  • PlugIns - अनिवार्य नहीं। एक निर्देशिका जिसमें App के लिए plugins हो सकते हैं। Calculator के पास दो हैं - एक "Basic and Scientific" के लिए और एक "Hexadecimal" के लिए (मैं वास्तव में नहीं जानता कि उन्होंने यह अलगाव क्यों किया, और मुझे परवाह भी नहीं है)।
  • Resources - अनिवार्य नहीं। जैसा कि नाम से पता चलता है, संसाधन रखता है। वहाँ आपको कई items मिल सकते हैं, जिनमें Icons के साथ .icns फ़ाइल, साथ ही localization से संबंधित .lprroj suffix वाली निर्देशिकाएँ शामिल हैं।
  • _CodeSignature - अनिवार्य नहीं। जैसा कि नाम से पता चलता है - कोड signing जानकारी रखता है।
  • version.plist - अनिवार्य नहीं, संस्करण जानकारी रखता है।

ध्यान दें कि बहुत कम items आधिकारिक रूप से आवश्यक हैं। वास्तव में, हम बिना कुछ compile किए भी अपना पहला App बना सकते हैं! लेकिन पहले हमें उस Info.plist फ़ाइल पर चर्चा करनी होगी।

Property list फ़ाइलें

आप macOS को जितना अधिक देखेंगे, उतनी ही अधिक ये अजीब फ़ाइलें मिलेंगी। ये केवल बेहतर रूप में प्रस्तुत configuration फ़ाइलें हैं। उनके पास हमेशा .plist extension होगा, जो उनके औपचारिक नाम: Property list files को बुलाने का एक छोटा तरीका है। दुर्भाग्य से, Apple द्वारा 3 अलग-अलग plist प्रारूप बनाए रखे जाते हैं:

  • एक xml प्रारूप, जो मनुष्यों द्वारा पठनीय है।
  • एक json प्रारूप, जो व्यापक रूप से उपयोग नहीं किया जाता।
  • एक binary प्रारूप, जो आमतौर पर magic के रूप में bplist टेक्स्ट द्वारा दिखाई देता है।

सौभाग्य से, plutil नामक एक utility है जो सभी प्रारूपों का समर्थन करती है। किसी plist फ़ाइल को output करने के लिए, बस plutil -p का उपयोग करें। उदाहरण के लिए:

jbo@McJbo Contents % plutil -p Info.plist | head -n 20
{
  "BuildMachineOSBuild" => "22A380007"
  "CFBundleDevelopmentRegion" => "English"
  "CFBundleExecutable" => "Calculator"
  "CFBundleGetInfoString" => "10.14, Copyright © 2000-2018, Apple Inc."
  "CFBundleHelpBookFolder" => "Calculator.help"
  "CFBundleHelpBookName" => "com.apple.Calculator.help"
  "CFBundleIconFile" => "AppIcon"
  "CFBundleIconName" => "AppIcon"
  "CFBundleIdentifier" => "com.apple.calculator"
  "CFBundleInfoDictionaryVersion" => "6.0"
  "CFBundleName" => "Calculator"
  "CFBundlePackageType" => "APPL"
  "CFBundleShortVersionString" => "10.16"
  "CFBundleSignature" => "????"
  "CFBundleSupportedPlatforms" => [
    0 => "MacOSX"
  ]
  "CFBundleVersion" => "223"
  "CTIgnoreUserFonts" => 1
jbo@McJbo Contents %

plutil में conversion कार्यक्षमताएँ भी built-in हैं - हम अभी उन्हें प्रदर्शित नहीं करेंगे। Apple किसी App के Info.plist में कई आवश्यकताओं का documentation करता है, लेकिन वास्तव में बहुत कम फ़ील्ड अनिवार्य हैं। यहाँ कुछ दिलचस्प फ़ील्ड हैं:

  • CFBundleExecutable - मुख्य executable का नाम, जो MacOS निर्देशिका के अंतर्गत होने की उम्मीद है।
  • CFBundleIconFile - icon फ़ाइल का नाम। अनिवार्य नहीं।
  • CFBundleIdentifier - App Bundle के लिए एक पहचानकर्ता। Apple reverse DNS notation (जैसे com.apple.calculator) का उपयोग करने की सलाह देता है।
  • CFBundleName - bundle का नाम।

इसे ध्यान में रखते हुए, हम अपना पहला शानदार ऐप बना सकते हैं, बिना कोडिंग किए भी! एक नज़र डालें:

#!/bin/zsh

# Create Bundle structure
mkdir -p ./MyApp.app/Contents/MacOS
टूल डाउनलोड करें