2. Подписывание кода
• гарантировать то, что код не был изменен
• идентифицировать источник кода (разработчика
или того, кто его подписал)
• определить, что код имеет право выполнять
определенные задачи (доступ в keychain, доступ
в iCloud, …)
3. Public Key Cryptography
Суть шифрования с открытым ключом заключается в том,
что для шифрования данных используется один ключ
(открытый), а для расшифрования другой (закрытый)
(поэтому такие системы часто называют ассиметричными).
7. RSA
• данные зашифрованные при помощи открытого
ключа, могут быть расшифрованы только при
помощи закрытого
• данные зашифрованные при помощи закрытого
ключа, могут быть расшифрованы только при
помощи открытого
10. Provisioning profile
Назначение — не допустить запуск кода не разрешенного
Apple
• связывает разработчиков и устройства c
командой (Development Team)
• определяет, что может делать код
(entitlements)
• формируется Apple и изначально подписан
14. Что нужно для подписи
• developer или distribution сертификат
• приватный ключ для сертификата
• provisioning profile в котором есть используемый
сертификат
15. Что подписываем
• бинарник основного приложения
• динамические библиотеки
31. Типовые задачи
• проверить, что AdHoc сборка может запускаться
на устройстве
• переподписать сборку с новым сертификатом
• внедрить свой код
32. Проверка IPA
• распаковать ipa как zip файл
• открыть файл embedded.mobileprovision и найти
секцию ProvisionedDevices
• убедиться, что в секции ProvisionedDevices есть
UDID устройства на которое производится
установка
33. Проверка IPA
Установить плагин для Quick Look
https://github.com/chockenberry/Provisioning
https://github.com/ealeksandrov/ProvisionQL
34. Переподписывание сборки
• распаковать IPA
• заменить файл embedded.mobileprovision тем,
который будет подходить для приватного ключа
используемого при переподписи
• удалить файл CodeResources
• взывать codesign
• запаковать в ZIP и изменить расширение на IPA
36. Внедрение кода
• 6-й xCode позволяет собирать динамические
библиотеки для iOS (раньше надо было править
конфигурационные файлы xCode)
• можно собрать динамическую библиотеку dylib и
сделать так, чтобы приложение загружало ее при
старте
https://github.com/fanruten/mach-patcher/
37. Внедрение кода
Чтобы не указывать абсолютный путь, можно использовать
@executable_path/inferno.dylib
38. Внедрение кода
• распаковать IPA
• заменить файл embedded.mobileprovision тем, который будет
подходить для приватного ключа используемого при
переподписи
• удалить файл CodeResources
• скопировать dylib в бандл
• модифицировать бинарник (внедрить dylib)
• взывать codesign для бинарника и dylib
• запаковать в ZIP и изменить расширение на IPA
40. IPA из AppStore
• зашифрованные
• можно расшифровать при помощи устройства с
jailbreak используя Clutch
• после расшифровки получим IPA, который можно
подписать и ставить на устройства