TL; DR Розробник повинен вибрати, які фрагменти програми підписані і чи підробка цих фрагментів призводить до будь-яких дій при запуску програми. Вам потрібно використовувати пробні та помилкові дані, щоб розібратися в програмі за допомогою програми.
Розробник вирішує, які компоненти в комплекті додатків представлені в печатці, яка підписується перед тим, як подати заявку. Все, що є в печатці, є ефективно захищеним від несанкціонованих дій, оскільки змінити ці речі в основному неможливо, не змінюючи хеш-сигнатури. Але це насправді не означає, що ви не можете підробити їх.
У посібнику для розробників Apple зазначено, що слід підписати:
Ви повинні підписати всі виконувані файли вашого продукту, включаючи додатки, інструменти, приховані допоміжні інструменти, утиліти тощо. Підписання пакету програм охоплює його ресурси, але не його підкомпоненти, такі як інструменти та підгрупи. Кожен з них має бути підписаний незалежно.
Якщо ваша програма складається з великої частини користувальницького інтерфейсу з одним або декількома маленькими допоміжними інструментами, які намагаються представити користувачеві єдине обличчя, ви можете зробити їх невідрізними для підпису коду, надавши їм абсолютно той самий ідентифікатор підпису коду. (Ви можете зробити це, переконавшись, що всі вони мають однакове значення CFBundleIdentifier у своєму Info.plist або за допомогою параметра -i в команді codeign призначити той самий ідентифікатор.) У цьому випадку всі компоненти вашої програми мають доступ до тих же елементів брелока та перевірити, як та сама програма. Робіть це лише в тому випадку, якщо задіяні програми справді мають на меті створити єдине ціле, без різниці.
Універсальний двійковий файл (пакет або інструмент) автоматично має індивідуальні підписи, застосовані до кожного компонента архітектури. Вони є незалежними, і зазвичай перевіряється лише нативна архітектура в системі кінцевого користувача.
У випадку з пакетами інсталятора (пакети .pkg та .mpkg) все неявно підписано: Архів CPIO, що містить корисну навантаження, архів CPIO, що містить сценарії встановлення, та вексель матеріалів (BOM), мають хеш, записаний у XAR заголовка, і цей заголовок у свою чергу підписується. Тому, якщо ви зміните сценарій встановлення (наприклад) після підписання пакета, підпис буде недійсним.
Ви також можете підписати свої плагіни та бібліотеки. Хоча цього наразі не потрібно, це буде в майбутньому, і немає недоліків підпису на цих компонентах.
Залежно від ситуації, кодизайн може додавати у свій виконуваний файл Mach-O, додавати до нього розширені атрибути або створювати нові файли в каталозі Зміст вашого пакета. Жоден з ваших інших файлів не змінюється.
Також звідси не обов'язково вірно, що наявність недійсного підпису програми означає, що він не зможе запуститися. На сторінці написано:
Саме система чи програма, яка запускає або завантажує підписаний код, вирішують, чи слід перевірити підпис і, якщо це зробити, визначити, як оцінити результати цієї перевірки.
Програма може дозволити зміни.
Ваша найкраща ставка - підхід проб і помилок у будь-якій програмі, яку ви намагаєтеся змінити. Це може працювати, а не може. Немає відповіді завжди правдивої, яку можна дати.
Якщо додаток було підписано, ви можете шукати Contents/CodeResources
файл або Contents/_CodeSignature/CodeResources
файл у пакеті. Цей файл перераховує всі підписані компоненти та їх очікувані значення хешу в комплекті. Це гарне місце, щоб почати розуміти, які частини програми розробник вважає достатньо критичною, щоб слідкувати за змінами.