В этой статье мы поговорим о том, почему не следует полностью полагаться на сторонние библиотеки, предназначенные для повышения безопасности ваших приложений.
Автор: Пратик Джианчандани (Prateek Gianchandani)
В этой статье мы поговорим о том, почему не следует полностью полагаться на сторонние библиотеки, предназначенные для повышения безопасности ваших приложений. Обычно подобные библиотеки используются для проверок несанкционированного использования, присутствие джейлбрейка и т. п. Писать подобные инструменты с нуля отнимает слишком много времени, и мы для решения этой задачи обычно используем библиотеки от сторонних разработчиков. В этой статье будет рассматриваться библиотека AntiPiracy.
На первый взгляд все выглядит весьма привлекательно. Вот часть описания со страницы на github.
The Full Shmoopi Anti-Piracy Library использует массу алгоритмов для определения несанкционированного использования, включая: *Signer Identity Checks *Process ID Checks *Plist Checks *Bundled Item Checks (CodeRules, Resources, Etc) *Encryption Checks *Anti-Debugging *Encryption Checks *Anti-Tampering *Binary Checks *Integrity Checks *CRC Checks *MD5/SHA1 Hashing Checks и так далее.
Звучит неплохо. Ниже показан скриншот со страницы на github с примерами использования библиотеки:
Рисунок 1: Примеры использования функция библиотеки
Если вы читали мои предыдущие статьи, то знаете, что при помощи техники method swizzling и Cycript можно полностью изменить логику работы методов isJailbroken и isPirated, как показано на рисунке ниже.
Рисунок 2: Изменение алгоритмов работы у каждого метода
Вывод следующий: не следует полностью полагаться на сторонние библиотеки для защиты приложений.
Как же можно выйти из ситуации? Если честно, то никак. Можно лишь затруднить жизнь злоумышленнику.
Выгрузив информацию о классах и увидев подобные имена, злоумышленник не придаст им значения и начнет изучать другие классы и контроллеры представлений.
Подведем итог. Как вы могли заметить, довольно рискованно использовать сторонние библиотеки безопасности без какой-либо их модификации. В данном случае хорошо структурированный и понятный код, как ни странно, создает угрозу безопасности приложения.