Где codesign хранит подпись для подписанного текстового файла в OSX?

У меня есть простой пакет приложений со следующей структурой:

myapp.app/Contents/
myapp.app/Contents/MacOS/myapp
myapp.app/Contents/Resources/empty.lproj
myapp.app/Contents/Info.plist
myapp.app/Contents/PkgInfo

Если я выполню

codesign -s "Developer ID" myapp.app/Contents/Info.plist

Я могу проверить, что файл был подписан с помощью

codesign -d -v myapp.app/Contents/Info.plist

который дает следующий вывод

Executable=/pathToApp/quicknanobrowser.app/Contents/Info.plist
Identifier=Info
Format=generic
CodeDirectory v=20100 size=113 flags=0x0(none) hashes=1+2 location=embedded
Signature size=1278
Signed Time=26 Jan 2016 12:31:24
Info.plist=not bound
TeamIdentifier=not set
Sealed Resources=none
Internal requirements count=1 size=80

Где хранятся данные о том, что файл был подписан? Структура папок не изменилась (нет новых файлов), размер файла не изменился. Хранится ли он в метаданных файловой системы? Можно ли получить доступ/прочитать эти метаданные?


person Placinta    schedule 26.01.2016    source источник


Ответы (1)


Для двоичных файлов без mach-o codesign хранит подпись в метаданных для каждого файла, называемых расширенными атрибутами HFS+:

ls -l@ Info.plist

com.apple.cs.CodeDirectory  142 
com.apple.cs.CodeRequirements   180 
com.apple.cs.CodeSignature  8551 

Вы можете просмотреть содержимое этих атрибутов с помощью xattr

xattr -p com.apple.cs.CodeSignature Info.plist

но инструмент, похоже, любит сбрасывать в шестнадцатеричном формате. Похоже, что для доступа к атрибутам не существует сокращения оболочки, хотя раньше вы могли получить доступ к вилке ресурсов (также расширенному атрибуту), добавив /rsrc к имени файла (например, cat blah/rsrc).

person Rhythmic Fistman    schedule 26.01.2016