Самый простой способ проверить это посмотреть на embedded.mobileprovision
([[NSBundle mainBundle] pathForResource:@"embedded.mobileprovision" ofType:nil]
):
- Сложно разобрать, так как это подписанный plist (подписанные данные PKCS # 7,в соответствии с
openssl asn1parse -inform der
), но плохой взлом заключается в том, чтобы просто искать <plist
и </plist>
. - Разработка содержит UDID, а
<key>get-task-allow</key><true/>
- Специальная рассылка содержит UDID (иget-task-allow = false)
- В дистрибутиве App Store нет идентификаторов UDID.
Другая вещь, которую вы можете проверить, - это права, встроенные в исполняемый файл (otool -l
перечисляет его какLC_CODE_SIGNATURE
).Разбор этого еще более утомителен (вам нужно проанализировать заголовок Mach-O и команды загрузки, а для «универсальных» двоичных файлов, которые теперь используются по умолчанию, вам нужно проверить загруженную в настоящее время архитектуру или все архитектуры).
- Сборки разработки содержат
<key>get-task-allow</key><true/>
- Сборки Ad Hoc и App Store содержат
<key>get-task-allow</key><false/>
Я не думаю, что права различают Ad Hoc иСборки App Store.
Помимо этих сертификатов и сертификатов, с которыми они подписаны, нет никакой разницы между приложениями для разработки / Ad Hoc / App Store (в профиле прав / ресурсов есть несколько других вещей, но нет ничего более надежного)о чем я могу думать).
Соображения безопасности
Ни одно из них не так сложно обойти.По первому способу приложение могло просто «махнуть» -[NSBundle pathForResource:ofType:]
.Второй метод немного сложнее в зависимости от того, какой API вы используете для чтения файла.