Механизм обнаружения джейлбрейка дает ложное срабатывание из-за того, что приложение установлено на пользовательском устройстве

Команда разработчиков реализовала механизм обнаружения джейлбрейка. Но один из наших клиентов сообщил, что его телефон никогда не был взломан, но он все равно не может запустить наше приложение. В ходе расследования мы обнаружили, что клиент установил приложение La Terminal - SSH Client из магазина приложений. Что вызывает эту проблему. После удаления этого приложения приложение нашей компании работает нормально.

Код для взлома:

func isDeviceJailBroken() -> Bool {
if UIDevice.current.isSimulator { return false }
let appNames = ["cydia",
                "Sileo",
                "Icy",
                "MxTube",
                "RockApp",
                "blackra1n",
                "SBSettings",
                "FakeCarrier",
                "WinterBoard",
                "IntelliScreen",
                "loader",
                "FlyJB",
                "Zebra",
                "WinterBoard",
                "Snoop-itConfig",
                "Terminal"]
for appName in appNames {
    if UIApplication.shared.canOpenURL(URL(string: "\(appName)://")!) {
        return true
    }
}
return false
}

Я думал, что в идентификаторе пакета этого клиентского приложения SSH есть слово «Терминал». Возможно, именно поэтому это вызывает проблемы. Поэтому я загрузил еще одно приложение «Beam Terminal», в идентификаторе пакета которого есть слово «Терминал». Но на этот раз приложение нашей компании работает.

La Terminal - SSH Client  (Error)
https://itunes.apple.com/lookup?id=1629902861
bundleId: com.xibbon.LaTerminal

Beam Terminal   (No Error)
https://itunes.apple.com/lookup?id=603488666
bundleId: com.beamwallet.BeamTerminal

Кто-нибудь может сказать мне, какая здесь закономерность?


122
1

Ответ:

Решено

Начнем с того, что это не «названия приложений». Это схемы URL. Я предполагаю, что ваша команда разработчиков собрала схему URL-адресов для каждого из приведенных выше приложений или они просто подключили имена приложений в надежде, что имя приложения будет соответствовать схеме URL-адресов приложения? Трудно сказать наверняка, поскольку они уже путают «название приложения» со «схемой URL-адресов», а это две совершенно разные вещи.

В любом случае вполне вероятно, что приложение-нарушитель зарегистрировало одно из вышеуказанных «имен приложений» в качестве своей схемы URL-адресов, поэтому canOpenURL() возвращает true.