ReSign iOS Apps

Что-то давненько я не писал в блог, верно? Заметка эта уже не первый месяц хранится у меня в ~/txt/ios_resign.txt. В ней я расскажу, как переподписать приложение на iOS и зачем это может понадобится. При желании вы можете начать свое погружение в revers iOS с этого поста.

Для начала давайте посмотрим для чего нам это может понадобиться:

  • изменение логики приложения, например – удаление проверок безопасности, добавление wall-hack, включение платных функций
  • добавление фреймворков, таких как Frida внутрь приложения
  • переподписание c enterprise аккаунтом, для in-house дистрибьюции
  • вам просто нравится, что приложения подписаны вашим сертификатом
NATIVE RESIGN

Перейдем к основной части, первым шагом мы должны получить provisioning profile, который включает все устройства на которых должно работать приложение. Убедитесь, что прифиль содержит сертификат, например iPhone Developer: Some Body (XXXXXXXXXX). Затем нам нужно создать файл с entitlements, откройте терминал и запустите команду

security cms -D -i %PATH_TO_MOBILEPROVISION% > provision.plist

это создаст xml файл описывающий ваш Provisioning Profile. Провижены лежат обычно тут /Users/n.islamov/Library/MobileDevice/Provisioning\ Profiles/.
Далее нам нужно извлечь entitlements

/usr/libexec/PlistBuddy -x -c 'Print :Entitlements' provision.plist > entitlements.plist

Подготовка закончена перейдем непосредственно к переподписанию. Если у вас .IPA файл, то для начала распакуйте его, если .APP, то пропустите этот шаг

unzip myapp.ipa

Теперь ваша директория содержит Payload/ и Payload/myapp.app/. Далее удалите старые файлы связанные с подписью

rm -rf Payload/myapp.app/_CodeSignature

Заменяем текущий Provisioning Profile на наш

cp %PATH_TO_MOBILEPROVISION% Payload/myapp.app/embedded.mobileprovision

Теперь подписываем приложение сертификатом, входящим в ваш провижн, и entitlements.plist созданным ранее

/usr/bin/codesign -f -s %IDENTITY% --entitlements entitlements.plist Payload/myapp.app

Здесь %IDENTITY% в формате “iPhone Developer: Some Body (XXXXXXXXXX)”.
Если приложение написано на Swift или оно содержит фреймворки, то вы должны еще переподписать все фреймворки входящие в приложение (они находятся в Payload/myapp.app/Frameworks). Если вы этого не сделаете, то приложение установится, но не запустится

/usr/bin/codesign -f -s %IDENTITY% --entitlements entitlements.plist Payload/myapp.app/Frameworks/*

Осталось обратно запаковать проект

zip -qr resigned.ipa Payload
APPLESIGN RESIGN

Все проделанное выше можно проделать одной строкой (но далеко не всегда)

node applesign.js myapp.ipa -B -c -d --identity %IDENTITY% --mobileprovision %PATH_TO_MOBILEPROVISION% --output resigned.ipa

Тут в роли identity выступает 40 символьная hex строка, в моем случае – A8F7CA2ABB49A9D501C0A43978CE2B4D0501D4C6. Все identity можно перечислить с помощью команды

node applesign.js --identities
РЕЗЮМЕ

Теперь вы можете установить resigned.ipa, например с помощью ideviceinstaller или cydia impactor, на любой девайс включенный в ваш провижн. После установки, на устройстве нужно разрешить сертификат разработчика. Удачного похека!

ПОЛЕЗНЫЕ ССЫЛКИ:

Applesign – commandline utility for re-signing iOS applications.
Ideviceinstaller – tool to interact with the installation_proxy of an iOS device.
Cydia impactor – tool for working with mobile devices.

Если вам нравятся мои статьи, можете следить за обновлениями с помощью E-Mail, Twitter, Facebook, а также канала в Telegram.