Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
macos_app_structure — Approfondimento didattico sui bundle di app macOS, sui file plist e sul comportamento dei processi launchd, con note di sicurezza offensiva sull'impacchettamento di payload come file .app e sull'elusione del monitoraggio dell'albero dei processi. | Kitploit
Strumenti/GitHubGitHub/yo-yo-yo-jbo/macos_app_structure
Meccanismi di PersistenzaEvasione IDS/IPSApprendimento e FormazioneRed TeamingSviluppo Payload
GitHubyo-yo-yo-jbo/macos_app_structure

macos_app_structure

Approfondimento didattico sui bundle di app macOS, sui file plist e sul comportamento dei processi launchd, con note di sicurezza offensiva sull'impacchettamento di payload come file .app e sull'elusione del monitoraggio dell'albero dei processi.

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Vedi Repository
472182 mesi faRevisionato da Kitploit
Condividi

Introduzione a macOS - Struttura delle app macOS

Passare a macOS da Linux o Windows può sembrare come camminare in una terra nuova e sconosciuta. Dato che Linux è open-source e Windows è ben documentato e molto popolare (e macOS non è né l'uno né l'altro, per l'esattezza), macOS può essere impegnativo a volte. In questo articolo del blog, intendo discutere alcune delle prime cose che potresti notare su macOS - App, App ovunque!

App vs. processi (task?)

Venendo da un background Windows o Linux, il concetto di App potrebbe sembrare strano. Sappiamo tutti che i thread sono "unità di esecuzione" e che i processi sono contenitori per thread con il proprio spazio di indirizzamento -- cosa c'è altro? Beh, i processi sono raramente distribuiti in file singoli. Sia su Windows che su Linux ci sono molte cose di cui il codice potrebbe aver bisogno per funzionare, alcune delle quali sono:

  • Moduli caricabili (.dll, .so). Ad esempio, la libreria runtime del C (msvcr<version>.dll su Windows, libc-<version>.so) così come altre dipendenze.
  • Risorse. Ad esempio, su Windows, i file eseguibili sono in un formato chiamato PE, che ha delle directory - una di queste è la directory delle risorse (anche in qualche modo documentata qui) che può contenere risorse (immagini, stringhe e altro). Le risorse potrebbero anche essere caricate dinamicamente dal disco, ovviamente.
  • Firme digitali. Quelle sono meno comuni su Linux (anche se esistono in qualche forma - ad esempio, nei Pacchetti Debian) ma sono importanti. Su Windows possono esistere nel file PE stesso (leggi qui) o nei file di catalogo (cioè, esternamente).
  • Configurazione. Su Linux, queste sono file (come i tuoi fidati file .bashrc), e su Windows sono suddivise tra file (ad es., xml, ini, json) e il Registro di Windows.
  • Altri eseguibili.

Beh, macOS pone una forte enfasi sui Application Bundle. L'idea è di impacchettare (quasi) tutto ciò che serve al programma per funzionare in una struttura di directory - incluse risorse, informazioni di localizzazione, ecc.. Naturalmente, non tutto può essere impacchettato in modo ordinato (come la libreria runtime del C, per esempio) - ma significa comunque che le cose sono raggruppate insieme in modo pulito - nessun bisogno di navigare un enorme Registro o di leggere pagine di manuale per oscure posizioni di file di configurazione. Gli application bundle sono semplicemente directory che terminano con .app - anche se l'interfaccia utente nasconde l'estensione .app (e il fatto che sia una directory). Dal punto di vista di un attaccante questo è interessante - poiché un Application Bundle può avere icone arbitrarie e nasconde l'estensione .app - consegnare malware potrebbe essere ottenuto ingannando un utente ignaro facendogli cliccare una tale app. Per esempio, pensa a un file Resume.app con un'icona PDF.

La struttura delle directory per un Application Bundle può essere facilmente esaminata, ovviamente con l'app Calculator integrata:

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 %

Come puoi vedere, Calculator.app è una directory. Sotto di essa c'è un singolo elemento - un'altra directory chiamata Contents. Sotto Contents ci sono diversi elementi:

  • Info.plist - contiene metadati sull'App. Ne parleremo più avanti.
  • MacOS - contiene l'eseguibile principale dell'App (come si può vedere nel terzo elenco di directory).
  • PkgInfo - non obbligatorio. Un file binario che contiene informazioni sul pacchetto.
  • PlugIns - non obbligatorio. Una directory che potrebbe contenere plugin per l'App. Calculator ne ha due - uno per "Base e Scientifica" e uno per "Esadecimale" (non so davvero perché abbiano fatto quella separazione, né mi interessa).
  • Resources - non obbligatorio. Come suggerisce il nome, contiene risorse. Potresti trovare diversi elementi lì, inclusi file .icns con icone, oltre a directory con il suffisso .lprroj che sono relative alla localizzazione.
  • _CodeSignature - non obbligatorio. Come suggerisce il nome - contiene informazioni sulla firma del codice.
  • version.plist - non obbligatorio, contiene informazioni sulla versione.

Nota che ci sono pochissimi elementi che sono ufficialmente richiesti. In effetti, possiamo creare la nostra prima App senza nemmeno compilare nulla! Ma prima dobbiamo discutere di quel file Info.plist.

File Property list

Più guardi macOS, più troverai questi strani file. Non sono altro che glorificati file di configurazione. Avranno sempre un'estensione .plist, che è solo un modo abbreviato per chiamare il loro nome formale: file Property list. Sfortunatamente, ci sono 3 diversi formati plist mantenuti da Apple:

  • Un formato xml, leggibile dagli esseri umani.
  • Un formato json, non ampiamente utilizzato.
  • Un formato binario, di solito riconoscibile dal testo bplist come magic.

Fortunatamente, esiste un'utilità chiamata plutil che supporta tutti i formati. Per visualizzare un file plist, basta usare plutil -p. Per esempio:

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 %
Scarica lo strumento