iOS за время своего существования показала себя как OS с хорошо защищенными данными. Среди некоторых разработчиков бытует миф, что доступ к файлам приложения без JL получить нельзя. Так вот, это не так. Если вам интересно как получить доступ к файлам приложения и почему нельзя хранить пароли и пользовательскую информацию в открытом виде, то вам под кат
В iOS приложения работают в режиме песочницы и получить данные другого приложения у вас не получится. Но когда вы подключаете устройство к компьютеру с OS X или Windows на борту, то дела обстоят иначе.
Все начиналось безобидно. Мое приложение вело лог в файл и возник случай, когда мне понадобилось этот лог достать. Быстро нашлась утилита, которая позволила это сделать, выбор пал на iExplorer. Подключаю телефон в заблокированном состоянии, открываю программу нахожу свое приложение. Перетягиваю лог и все готово.
На следующее утро возник вопрос, можно ли полазить в приложении, которое скачано с AppStore. Не долго думая открываю WhatsApp и просматриваю его файлы. Первое, что бросилось в глаза, так это файлы ChatSearch.sqlite, ChatStorage.sqlite и Contacts.sqlite. В клиенте под Android есть подобные файлы, поэтому копирую файлы на компьютер и открываю программой Liya. Базы данных в открытом виде. Вся переписка, контакты вытащены с телефона, при том, что он заблокирован (хотя заранее было отмечено, что я доверяю этому компьютеру).
Докатились, думаю. Ладно, посмотрим что тут еще есть интересного. Полазив по папкам и plist'ам в файле net.whatsapp.WhatsApp.plist, что лежит в папке Library/Preferences нахожу пару интересных полей, таких как OwnJabberID, OwnPhoneNumber, OwnCountryCode и даже такое интересное поле как SrvPrice, которое у меня равно US0.99$. Первый вопрос, который напрашивается, что если подменить при первом старте приложения стандартный plist на вытащенный из другого установленного клиента. Проверяем. Удалил приложение сделав копию его данных и установил чистое с AppStore. Подменяю plist в iExplorer. Программа заходит в аккаунт, но как-то понимает что это не «корректные данные» и просит авторизироваться через стандартную форму.
Возникает мысль, что чего-то не хватает. После небольших экспериментов и сравнении файлов выяснилось, что достаточно для успешной авторизации файлов net.whatsapp.WhatsApp.plist, pw.dat и файла fieldstats.active. Разложив их по своим местам клиент поверил, что это я и приложение заработало. Не удалось только стянуть с iCloud базу данных переписки, но она у меня сохранилась при backup'e. Положив файлы по местам все подтянулось.
WhatsApp на своем сайте молчат о подобном способе архивирования своей переписки.
Для того чтобы избежать подобных казусов я рекомендую следующее:
- Шифровать пользовательские данные
- Требовать авторизацию пользователя, хотя бы через промежуточный пароль (в качестве примера QIWI)
- Не хранить важную информацию, такую как транзакции, денежные операции и прочее на устройстве