Как определить во время выполнения, предназначено ли приложение для разработки, магазина приложений или специального распространения?

ОК, есть несколько способов показать все файлы в конкретном коммите ...

Чтобы уменьшить информацию и показать только имена файлов, которые были сделаны, вы можете просто добавить --name-only или --name-status flag ..., эти флажки просто показывают вам имена файлов, которые отличаются от предыдущих коммитов, как вы хотите ...

Итак, вы можете сделать git diff, а затем --name-only, с двумя хэш после , что-то вроде ниже:

git diff --name-only 5f12f15 kag9f02 

Я также создаю изображение ниже, чтобы показать все шаги, которые нужно пройти в этой ситуации:

30
задан BoltClock 18 November 2013 в 15:19
поделиться

2 ответа

Самый простой способ проверить - просмотреть embedded.mobileprovision ( [[NSBundle mainBundle] (скрытый) ofType: nil] ):

  • Это немного затруднительно для синтаксического анализа, поскольку это подписанный список plist (подписанные данные PKCS # 7, согласно openssl asn1parse -inform der ), но плохой способ взлома - просто искать < plist и .
  • Разработка содержит UDID и get-task-allow
  • Специальное распределение содержит UDID (и get-task-allow = false)
  • Распространение в магазине приложений не содержит UDID.

Еще вы можете проверить права, встроенные в исполняемый файл ( otool -l перечисляет его как LC_CODE_SIGNATURE ). Анализировать это еще более утомительно (вам нужно проанализировать заголовок Mach-O и команды загрузки, а для «универсальных» двоичных файлов, которые теперь используются по умолчанию, вам нужно будет проверить загруженную в данный момент архитектуру или все архитектуры).

  • Сборки для разработки содержат get-task-allow
  • Сборки Ad Hoc и App Store содержат get-task-allow

Я не думаю, что в правах различают сборки Ad Hoc и App Store.

Кроме них и сертификата, которым он подписан, нет никакой разницы между приложениями для разработки / специальных приложений / приложений из магазина приложений (в профиле прав / инициализации есть еще кое-что, но я не могу придумать ничего более надежного).

Соображения безопасности

Ни то, ни другое не так сложно обойти. Для первого метода приложение может просто «переключить» - [NSBundle pathForResource: ofType:] . Второй способ немного сложнее, в зависимости от того, какой API вы используете для чтения файла.

29
ответ дан 28 November 2019 в 00:08
поделиться

Я извлек файл embedded.mobileprovision и вставил его в онлайн-программу просмотра ASN.1 (например, http://www.geocities.co.jp/SiliconValley-SanJose/3377/asn1JS.html ), и вот что получилось:

SEQUENCE {
   OBJECTIDENTIFIER 1.2.840.113549.1.7.2 (signedData)
   [0] {
      SEQUENCE {
         INTEGER 1
         SET {
            SEQUENCE {
               OBJECTIDENTIFIER 1.3.14.3.2.26
               NULL 
            }
         }
         SEQUENCE {
            OBJECTIDENTIFIER 1.2.840.113549.1.7.1 (data)
            [0] {
               OCTETSTRING 3c3f786d6c20766 ... 6c6973743e0a
            }
         }
         [0] {
            SEQUENCE {
               SEQUENCE {
                  [0] {
                     INTEGER 2
                  }
 ... [much more]

С этим и некоторым знанием ASN.1 ваше объяснение имеет смысл.

Интересной частью является строка октетов, начинающаяся с 3c3f786d6c. Это часть XML в формате списка свойств Apple, которая содержит все ответы о типе распространения (разработчик, ad-hoc, App Store).

2
ответ дан 28 November 2019 в 00:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: