macOS Files, Folders, Binaries & Memory
Структура ієрархії файлів
/Applications: Встановлені додатки повинні бути тут. Усі користувачі зможуть до них отримати доступ.
/bin: Бінарні файли командного рядка
/cores: Якщо існує, використовується для зберігання дампів ядра
/dev: Все трактується як файл, тому ви можете побачити тут збережені пристрої апаратного забезпечення.
/etc: Файли конфігурації
/Library: Тут можна знайти багато підкаталогів та файлів, пов'язаних з налаштуваннями, кешами та журналами. Папка Library існує в корені та в кожному каталозі користувача.
/private: Недокументовано, але багато згаданих тек є символічними посиланнями на приватну теку.
/sbin: Основні системні бінарні файли (пов'язані з адмініструванням)
/System: Файл для запуску OS X. Тут ви повинні знайти в основному лише файли, специфічні для Apple (не сторонні).
/tmp: Файли видаляються через 3 дні (це символічне посилання на /private/tmp)
/Users: Домашня тека для користувачів.
/usr: Конфігураційні та системні бінарні файли
/var: Файли журналів
/Volumes: Підключені диски з'являться тут.
/.vol: Запускаючи
stat a.txt
, ви отримуєте щось на зразок16777223 7545753 -rw-r--r-- 1 username wheel ...
, де перше число - це ідентифікаційний номер тома, де існує файл, а друге - номер іноду. Ви можете отримати доступ до вмісту цього файлу через /.vol/ з цією інформацією, запустившиcat /.vol/16777223/7545753
Теки додатків
Системні додатки розташовані в
/System/Applications
Встановлені додатки зазвичай встановлюються в
/Applications
або в~/Applications
Дані додатків можна знайти в
/Library/Application Support
для додатків, які працюють як root, та~/Library/Application Support
для додатків, які працюють як користувач.Демони сторонніх додатків, які потребують запуску як root, зазвичай розташовані в
/Library/PrivilegedHelperTools/
Додатки в пісочниці відображаються в теку
~/Library/Containers
. Кожен додаток має теку з назвою, що відповідає ідентифікатору пакета додатка (com.apple.Safari
).Ядро розташоване в
/System/Library/Kernels/kernel
Розширення ядра Apple розташовані в
/System/Library/Extensions
Розширення ядра сторонніх виробників зберігаються в
/Library/Extensions
Файли з чутливою інформацією
macOS зберігає інформацію, таку як паролі, в кількох місцях:
pagemacOS Sensitive LocationsВразливі інсталятори pkg
pagemacOS Installers AbuseОсобливі розширення OS X
.dmg
: Файли образів дисків Apple дуже поширені для програм-інсталяторів..kext
: Вони повинні мати певну структуру і є версією драйвера для OS X. (це пакет).plist
: Також відомий як property list, зберігає інформацію у форматі XML або бінарному форматі.Може бути XML або бінарний. Бінарні можна прочитати за допомогою:
defaults read config.plist
/usr/libexec/PlistBuddy -c print config.plsit
plutil -p ~/Library/Preferences/com.apple.screensaver.plist
plutil -convert xml1 ~/Library/Preferences/com.apple.screensaver.plist -o -
plutil -convert json ~/Library/Preferences/com.apple.screensaver.plist -o -
.app
: Додатки Apple, які слідують структурі теки (це пакет)..dylib
: Динамічні бібліотеки (подібні до файлів DLL у Windows).pkg
: Це те саме, що й xar (eXtensible Archive format). Команда installer може використовуватися для встановлення вмісту цих файлів..DS_Store
: Цей файл є в кожній текі, він зберігає атрибути та налаштування теки..Spotlight-V100
: Ця тека з'являється в кореневій текі кожного тому в системі..metadata_never_index
: Якщо цей файл знаходиться в корені тому, Spotlight не індексуватиме цей том..noindex
: Файли та теки з цим розширенням не будуть індексуватися Spotlight.
Пакети macOS
Пакет - це тека, яка виглядає як об'єкт у Finder (приклад пакетів - файли *.app
).
Кеш спільних бібліотек Dyld
На macOS (і iOS) всі системні спільні бібліотеки, такі як фреймворки та dylib, об'єднані в один файл, який називається кешем спільних бібліотек dyld. Це покращує продуктивність, оскільки код може завантажуватися швидше.
Аналогічно до кешу спільних бібліотек dyld, ядро та розширення ядра також компілюються в кеш ядра, який завантажується під час завантаження.
Для вилучення бібліотек з одного файлу кешу спільних бібліотек dylib можна було використовувати бінарний файл dyld_shared_cache_util, який можливо зараз не працює, але ви також можете використовувати dyldextractor:
У старіших версіях ви можете знайти спільний кеш в /System/Library/dyld/
.
У iOS ви можете знайти їх в /System/Library/Caches/com.apple.dyld/
.
Зверніть увагу, що навіть якщо інструмент dyld_shared_cache_util
не працює, ви можете передати спільний dyld бінарний файл в Hopper і Hopper зможе ідентифікувати всі бібліотеки та дозволить вам вибрати, яку саме ви хочете дослідити:
Спеціальні дозволи на файли
Дозволи на теки
У теці, читання дозволяє переглядати її, запис дозволяє видаляти та записувати файли в ній, а виконання дозволяє переміщатися по каталозі. Таким чином, наприклад, користувач з дозволом на читання файлу всередині каталогу, де він не має дозволу на виконання, не зможе прочитати файл.
Модифікатори прапорців
Є деякі прапорці, які можуть бути встановлені в файлах, що змінюють поведінку файлу. Ви можете перевірити прапорці файлів всередині каталогу за допомогою ls -lO /шлях/до/каталогу
uchg
: Відомий як прапорець uchange, запобігає будь-яким діям зміни або видалення файлу. Щоб встановити його, виконайте:chflags uchg file.txt
Користувач root може видалити прапорець та змінити файл
restricted
: Цей прапорець робить файл захищеним за допомогою SIP (ви не можете додати цей прапорець до файлу).Sticky bit
: Якщо в каталозі встановлено прапорець Sticky bit, тільки власник каталогу або root можуть перейменовувати або видаляти файли. Зазвичай це встановлено в каталозі /tmp, щоб запобігти звичайним користувачам видаленню або переміщенню файлів інших користувачів.
Усі прапорці можна знайти в файлі sys/stat.h
(знайдіть його за допомогою mdfind stat.h | grep stat.h
) і це:
UF_SETTABLE
0x0000ffff: Маска прапорців, які може змінити власник.UF_NODUMP
0x00000001: Не викидати файл.UF_IMMUTABLE
0x00000002: Файл не може бути змінений.UF_APPEND
0x00000004: Записи в файл можуть бути лише додані.UF_OPAQUE
0x00000008: Каталог є непрозоримим щодо об'єднання.UF_COMPRESSED
0x00000020: Файл стиснутий (деякі файлові системи).UF_TRACKED
0x00000040: Немає сповіщень про видалення/перейменування для файлів з цим набором.UF_DATAVAULT
0x00000080: Потрібно дозвіл для читання та запису.UF_HIDDEN
0x00008000: Підказка, що цей елемент не повинен відображатися в графічному інтерфейсі.SF_SUPPORTED
0x009f0000: Маска прапорців, які підтримує суперкористувач.SF_SETTABLE
0x3fff0000: Маска прапорців, які може змінити суперкористувач.SF_SYNTHETIC
0xc0000000: Маска системних тільки для читання синтетичних прапорців.SF_ARCHIVED
0x00010000: Файл заархівований.SF_IMMUTABLE
0x00020000: Файл не може бути змінений.SF_APPEND
0x00040000: Записи в файл можуть бути лише додані.SF_RESTRICTED
0x00080000: Потрібен дозвіл для запису.SF_NOUNLINK
0x00100000: Елемент не може бути видалений, перейменований або змонтований.SF_FIRMLINK
0x00800000: Файл є посиланням на програму.SF_DATALESS
0x40000000: Файл є об'єктом без даних.
ACL файлів
ACL файлів містять ACE (Access Control Entries), де можна призначити більш деталізовані дозволи різним користувачам.
Можливо надати ці дозволи каталогу: list
, search
, add_file
, add_subdirectory
, delete_child
, delete_child
.
А для файлу: read
, write
, append
, execute
.
Коли файл містить ACL, ви побачите "+" при переліку дозволів, як у:
Ви можете читати ACLs файлу за допомогою:
Ви можете знайти всі файли з ACL за допомогою (це дуже повільно):
Розширені атрибути
Розширені атрибути мають назву та бажане значення, і можуть бути переглянуті за допомогою ls -@
та змінені за допомогою команди xattr
. Деякі поширені розширені атрибути:
com.apple.resourceFork
: Сумісність ресурсного виливу. Також видимий якfilename/..namedfork/rsrc
com.apple.quarantine
: MacOS: Механізм карантину Gatekeeper (III/6)metadata:*
: MacOS: різноманітні метадані, такі як_backup_excludeItem
, абоkMD*
com.apple.lastuseddate
(#PS): Дата останнього використання файлуcom.apple.FinderInfo
: MacOS: Інформація Finder (наприклад, кольорові мітки)com.apple.TextEncoding
: Вказує кодування тексту файлів ASCIIcom.apple.logd.metadata
: Використовується logd на файлах у/var/db/diagnostics
com.apple.genstore.*
: Генераційне сховище (/.DocumentRevisions-V100
в корені файлової системи)com.apple.rootless
: MacOS: Використовується захистом цілісності системи для позначення файлу (III/10)com.apple.uuidb.boot-uuid
: Позначки logd для епох завантаження з унікальним UUIDcom.apple.decmpfs
: MacOS: Прозоре стиснення файлів (II/7)com.apple.cprotect
: *OS: Дані про шифрування для кожного файлу (III/11)com.apple.installd.*
: *OS: Метадані, використовувані installd, наприклад,installType
,uniqueInstallID
Ресурсні виливи | macOS ADS
Це спосіб отримання Альтернативних потоків даних в MacOS. Ви можете зберегти вміст всередині розширеного атрибуту з назвою com.apple.ResourceFork всередині файлу, зберігаючи його у file/..namedfork/rsrc.
Ви можете знайти всі файли, що містять цей розширений атрибут, за допомогою:
decmpfs
Розширений атрибут com.apple.decmpfs
вказує, що файл зберігається у зашифрованому вигляді, ls -l
повідомить про розмір 0, а стислі дані знаходяться у цьому атрибуті. Кожного разу, коли файл доступний, він буде розшифрований у пам'яті.
Цей атрибут можна побачити за допомогою ls -lO
, вказаний як стиснутий, оскільки стиснені файли також позначаються прапорцем UF_COMPRESSED
. Якщо стиснутий файл видалити цей прапорець за допомогою chflags nocompressed </шлях/до/файлу>
, система не буде знати, що файл був стиснутий, і тому не зможе розпакувати та отримати доступ до даних (вона буде вважати, що файл насправді порожній).
Інструмент afscexpand можна використовувати для примусового розпакування файлу.
Універсальні бінарники та Формат Mach-o
Бінарники Mac OS зазвичай компілюються як універсальні бінарники. Універсальний бінарник може підтримувати кілька архітектур у одному файлі.
pagemacOS Universal binaries & Mach-O FormatВитяг пам'яті macOS
pagemacOS Memory DumpingФайли категорії ризику Mac OS
Каталог /System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/System
- це місце, де зберігається інформація про ризики, пов'язані з різними розширеннями файлів. Цей каталог категоризує файли на різні рівні ризику, що впливає на те, як Safari обробляє ці файли під час завантаження. Категорії наступні:
LSRiskCategorySafe: Файли цієї категорії вважаються повністю безпечними. Safari автоматично відкриє ці файли після їх завантаження.
LSRiskCategoryNeutral: Ці файли не супроводжуються жодними попередженнями і не відкриваються автоматично Safari.
LSRiskCategoryUnsafeExecutable: Файли цієї категорії спричиняють попередження, що файл є додатком. Це слугує як захисний захід для попередження користувача.
LSRiskCategoryMayContainUnsafeExecutable: Ця категорія призначена для файлів, таких як архіви, які можуть містити виконуваний файл. Safari спричинить попередження, якщо вона не може перевірити, що всі вміст безпечні або нейтральні.
Файли журналів
$HOME/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2
: Містить інформацію про завантажені файли, таку як URL, звідки вони були завантажені./var/log/system.log
: Основний журнал систем OSX. com.apple.syslogd.plist відповідає за виконання системного журналювання (можна перевірити, чи воно вимкнене, шукаючи "com.apple.syslogd" вlaunchctl list
./private/var/log/asl/*.asl
: Це журнали системи Apple, які можуть містити цікаву інформацію.$HOME/Library/Preferences/com.apple.recentitems.plist
: Зберігає нещодавно відкриті файли та програми через "Finder".$HOME/Library/Preferences/com.apple.loginitems.plsit
: Зберігає елементи для запуску при запуску системи.$HOME/Library/Logs/DiskUtility.log
: Файл журналу для програми DiskUtility (інформація про диски, включаючи USB-накопичувачі)./Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist
: Дані про бездротові точки доступу./private/var/db/launchd.db/com.apple.launchd/overrides.plist
: Список демонів, які вимкнені.
Last updated