Как работает Kali AP

Я уже писал про систему защиты от взлома приложений из App Store для iPhone и iPod touch, которую мы назвали Kali AP. Теперь пришло время рассказать немного о том, как она работает, а также ответить на некоторые вопросы касательно Kali, которые взволновали публику. Собственно, в этой статье я пытаюсь раскрыть обе темы.
Заодно мы решили помочь соотечественникам, которые пишут приложения для iPhone, и дать им возможность пользоваться Kali совершенно бесплатно. Так что если у вас есть приложение для iPhone, которое вы продаете в App Store (бесплатное защищать, очевидно, нет смысла), и вас не устраивает ситуация с пиратами — пишите на kaliap@ripdev.com, мы постараемся вам помочь. А теперь — к делу, поговорим о Kali.
Создавать защиту для ПО — дело крайне неблагодарное. Хотя бы потому, что ее мало кто оценит. Например, ее не оценят те, кто, собственно, взламывают приложения — ну зачем им дополнительные сложности в их и без того непростых задачах? Как и не оценят обычные пользователи, которые привыкли брать софт там, где он «хорошо лежит» — в различных торрентах и других p2p сетях. Ну, или борцы за «открытый код», «все бесплатное» и мир во всем мире — для них еще одна система защиты или шифрования это как серпом по гениталиям.

И только разработчики, уставшие от зашкаливающего уровня воровства их приложений (а про уровни я уже писал в других статьях, разработчики регистрируют от 50 до 95% пользователей с украденными приложениями) могут заинтересоваться таким продуктом. Да и то, среди разработчиков как раз очень силен уровень скептицизма по отношению к системам защиты, поскольку «все равно все сломают», поэтому зачем тратить время, силы и деньги на это, проще пытаться игнорировать пиратов и ничего не делать.
Еще один подход, часто встречающийся среди разработчиков — «это проблема Apple, поэтому пусть она ее и решает». К счастью, не все разработчики считают такую «страусиную» позицию правильной — рассчитывать на сознательность пользователей или решение Apple, когда пираты изобретают автоматизированные инструменты для взлома и размещения приложений, довольно сложно. Ждать, что Apple «запретит» jailbreak (а именно на телефоны с jailbreak устанавливаются взломанные приложения), тоже не приходится — во-первых, см. выше «все равно взломают», во-вторых, как ни крути, а jailbreak Apple все же опосредованно выгоден — не будь его, многие пользователи просто не покупали бы телефон (и мы говорим не о единицах, а о миллионах пользователей — есть информация, что процедуру jailbreak проходит около 20-25% всех проданных iPhone).
Еще одна причина, по которой разработчики зачастую решают не тратить силы на защиту своих приложений — это потому, что серьезно инвестировать время и силы на защиту готов мало кто, а простую защиту действительно нет смысла делать, потому что «все равно взломают». Поэтому лучше потратить время на улучшение функциональности приложения, удовлетворение запросов пользователей, чем на невидимую защиту, которую никто не заметит и не оценит. Вот здесь как раз и может оказаться полезной помощь сторонних компаний, которые обладают нужными знаниями в определенной области и владеют достаточными ресурсами для разработки, и, что самое главное — дальнейшей поддержки специализированной системы защиты. Как вы понимаете, в данном случае я говорю о Ripdev и системе защиты приложений для App Store — Kali AntiPiracy.
С момента анонса этой системы мы получили достаточно много различных вопросов и прочего фидбека (сюда я включаю не только жалобы по недоразумению, но и проклятия — было и такое), чтобы на основе этой входящей информации понять, что именно интересует людей в этой защите. Поэтому и возникла эта статья, в которой, конечно, не будет технических know-how, но будет небольшой рассказ о том, как работает наша защита, почему мы считаем ее очень удачной, и в чем заключается ее unique selling proposition.
Для начала — небольшое введение о том, как работает система взлома приложений для iPhone на данный момент, чтобы вы представляли себе, с чем нам приходится бороться. Взломщик покупает приложение в App Store и запускает его у себя на телефоне — само приложение изначально защищено от копирования тем, что его исполняемый код зашифрован специальным ключом. Но когда приложение стартует — система вычитывает его ключи и, «расшифровавшись», загружается в память.
Затем к запущенному приложению подключается отладчик, выполнение программы останавливается, а из оперативной памяти устройства (в которой загружена расшифрованная программа) создается «слепок». После этого образ памяти телефона выгружается на диск, где из этого «слепка» памяти путем нехитрых манипуляций создается рабочее приложение, которое уже может работать без зашифрованных ключей.
Поэтому нам осталось всего лишь сделать так, чтобы хакеры не могли провести вышеописанную процедуру — и все будет замечательно. Просто? Конечно, описать задачу значительно проще, чем ее реализовать, но мы не ищем легких путей.
[ad#intext-inside]
Соответственно, система защиты Kali AP состоит из трех модулей, каждый из которых отвечает за свой участок защиты. Во-первых, это «антиотладка» — подсистема, которая предназначена для того, чтобы не дать хакеру запустить приложение под отладчиком. Если Kali засекает попытки «подобраться» к приложению с отладчиком — приложение, скорей всего, «упадет», не дав хакеру сделать свое черное дело.
Но, допустим, хакеру удалось таки заставить программу работать под отладчиком, и тогда в действие вступает вторая подсистема защиты — «антидамп». Как я писал выше, приложение, защищенное с помощью Apple DRM, на старте вычитывает свои зашифрованные ключи и после этого загружается в память незашифрованным. В случае с Kali все сложнее, потому что благодаря Kali приложение в памяти фактически никогда не является цельным, исполняемый код (не исходный код — об этом ниже) программы проходит через различные участки, где он вначале модифицируется, а затем пересобирается обратно, и все это завязано на проверку целостности защиты, поэтому без нее, даже если получить «слепок» памяти (который, скорей всего, будет сильно испорченным), программа целостно не соберется.
Третья важная подсистема Kali (я ее уже упомянул выше) — это проверка целостности защиты приложения в целях обнаружения попыток ее взлома. Она состоит из трех компонентов, поочередной проверки различных уровней — проверки самой себя, проверки приложения и проверки различных элементов приложения. Для обеспечения успешной работы последнего компонента в приложение случайным образом внедряются различные проверочные модули, которые и отлавливают любое вмешательство в действия защиты.
Таким образом, благодаря тесному взаимодействию трех подсистем, достигается определенная непробиваемость системы, по крайней мере, с первого наскока. Неудивительно, что хакеры, участвующие в создании инструмента для взлома под названием Crackulous, пощупав iPref с защитой, сказали, что «The protection actually doesnt look bad. On first look, I would say there wont be a crack for that for some time.» («Защита, вообще-то, выглядит неплохо. На первый взгляд, я бы сказал, что какое-то время ее не взломают»).
Но надо также помнить, что невзламываемых систем не бывает — все, что написано одним человеком, другим может быть взломано. Поэтому мы прекрасно понимаем, что рано или поздно появится какой-то гений-подросток, у которого слишком много свободного времени, и он таки что-то наковыряет и взломает Kali (может быть). Именно поэтому код модулей защиты — полиморфен, то есть он периодически меняется. Имеется в виду, что для различных приложений в разные периоды времени могут быть использованы различные подходы в кодировании, что приведет к тому, что создать автоматический Kali-Crackulous будет если не невозможно, то крайне сложно.
Теперь что касается взаимодействия Kali и разработчиков сторонних приложений, как происходит процесс внедрения защиты. По этому поводу тоже было много воплей, что, де, ripdev хочет получить доступ к исходным кодам всех программ. Это не так — Kali не работает с исходным кодом приложения. Написав свою программу, ее разработчик создает релизную версию для ее закачки в App Store, приходит к нам на сервер и закачивает на него приложение (всё это происходит в автоматическом режиме, как часть процесса построения приложения в Xcode).
На сервере приложение обрабатывается скриптом, который создает из готового приложения защищенную версию, добавляя к исполняемому коду приложения код защиты, и после этого разработчик получает готовую версию, которую можно подавать в App Store. Такое «завернутое» в Kali приложение прекрасно проходит проверку в App Store и становится доступным покупателям.
Еще одна тема для беспокойства, которую неоднократно высказывали в обсуждениях Kali заинтересованные лица — это поведение приложения на телефоне пользователя. В частности, многих интересовало, «стучит» ли Kali куда-то на удаленные сервера, проверяя лицензионность приложений. Нет, Kali работает в абсолютно автономном режиме, для работы приложения не требуется подключение к интернету, и никакой передачи данных (а тем более — конфиденциальных данных пользователя) приложение с Kali не осуществляет.
Более того, никаких целенаправленных действий при обнаружении взлома Kali тоже не делает — она не наносит вреда ни данным пользователя, ни его телефону. Да и пользователь (легитимного приложения, приобретенного в App Store) никогда и не узнает, что в его приложении есть какая-то там защита, для него это все выглядит абсолютно прозрачно, точно так же, как и раньше.
[ad#intext-inside]
Ну и последняя тема, волновавшая потенциальных заказчиков такой системы — а что будет в случае успешного взлома Kali? Соглашение, которое разработчики подписывают при использовании Kali, гласит, что сервис предоставляется без гарантий 100% защиты от взлома, да и кто ее согласится дать? Даже разработчики защиты для игрушек делают ее с обещанием, что она продержится «хотя бы два дня после релиза» (по крайней мере, они на это надеются). Мы же точно можем обещать, что если Kali для какого-то конкретного приложения взломают — мы обновим систему и следующую версию приложения можно будет упаковать в обновленную Kali, на которую хакерам опять потребуется время и силы. А разработчики смогут с помощью новых возможностей привлекать пользователей на более поздние версии приложений — ведь их время не будет тратиться на то, чтобы придумать, как защититься от пиратов.
Победит ли Kali пиратство? Нет, конечно, мы на это и не рассчитываем — ведь понятно, что не все разработчики согласны разглашать свои продажи и к тому же отдавать процент с полученных денег. Поэтому будет достаточно много приложений, которые по-прежнему можно будет взламывать и распространять по интернету. Пока что можно сказать, что первые приложения с Kali уже ушли в App Store и скоро там появятся — к сожалению, мы не можем раскрывать названия этих приложений по просьбе заказчиков. Но, по крайней мере, тот факт, что мы не сидим сложа руки, и не надеемся на то, что «пиратство — это как реклама приложения», нам очень сильно нравится. А еще параллельно Kali помогает другим разработчикам, и мешает пиратам — есть в этом какое-то странное удовольствие 🙂