Содержание статьи
Есть у коммерческого софта одна очень нехорошая особенность, которую я бы назвал бесконечным ростом функциональности. В определенный момент основная функциональность приложения достигает критической точки, после которой ее уже невозможно ни улучшить, ни оптимизировать, и, чтобы продажи новых версий софта не падали, компании начинают пихать в него все подряд, включая возможности, вовсе не имеющие отношения к изначальной цели его создания. И если на десктопе это не такая уж проблема — запустил, поюзал, закрыл, — то на мобильниках подобный софт приводит к повышенному расходу заряда батареи, а порой и к совсем непредсказуемым последствиям.
В этой колонке я хотел бы поговорить об известном очень многим пользователям приложении под названием Сбербанк. Это мобильный клиент одноименного банка, причем клиент очень качественный и приятный в использовании. Он удобен, функционален, у него прекрасный интерфейс и есть встроенная защита от фишинга и утечек данных.
Сбербанк не даст использовать себя без знания PIN-кода, при первом запуске он обязательно проверит смартфон на наличие прав root и, если они есть, не даст переводить деньги куда угодно, ограничив функциональность шаблонами (правда, этот механизм довольно легко обойти). У него есть встроенная клавиатура, которая защищает от шпионских приложений, реализованных в виде сторонних клавиатур. Для общения с сервером он, естественно, использует токены и зашифрованный канал.
Сбербанк действительно не прогадал с выбором разработчиков своего мобильного клиента. Однако то ли программисты слишком увлеклись, то ли требования Сбербанка были настолько извращенными, но хорошее когда-то приложение однажды тоже стало жертвой бесконечного наращивания функциональности. И это привело к тому, что с большинства моих устройств Сбербанк пришлось удалить, а на оставшихся использовать специальные методики, чтобы свести его вредное воздействие на систему к минимуму.
В чем проблема?
Первая проблема мобильного Сбербанка — это его размер. APK-файл с приложением весит ни много ни мало 41 Мбайт. Для сравнения: игра Smash Hit с отличной трехмерной графикой весит 80 Мбайт, игра Geometry Dash с кучей уровней и музыкальных треков — 48 Мбайт, а Google Chrome — те же 41 Мбайт. Заметь, что в данном случае мы сравниваем сложный комплексный софт с клиентским приложением, единственная задача которого — получать данные с сервера и отправлять их обратно в ответ на действия пользователя.
$ ls -lh *.apk
-rw-r--r-- 1 j1m j1m 41M апр 26 08:21 com.android.chrome.apk
-rw-r--r-- 1 j1m j1m 41M апр 25 07:20 ru.sberbankmobile.apk
ОK, я согласен, что при текущих объемах встроенной памяти и скоростях интернета размер приложения не имеет особого значения, однако его вес также влияет и на количество оперативной памяти, потребляемой приложением. На разных устройствах с разным объемом RAM и разными настройками Low Memory Killer размер приложения в оперативке может варьироваться от 40 до 80 Мбайт. Опять же для сравнения: одно из самых прожорливых на оперативку приложений Google Chrome с одной открытой вкладкой потребляет ~90 Мбайт. А самое печальное, что в отличие от того же Chrome, который будет вытеснен из памяти через некоторое время после закрытия, Сбербанк останется в ней висеть в виде сервиса на все время работы смартфона. Если ты его убьешь — он перезапустится, если перезагрузишь смартфон — он запустится при загрузке, применишь таск-киллер — получишь пинг-понг под названием «Прощай, батарея»: таск-киллер убивает сервис, система его запускает, и так продолжается бесконечно.
Ну ладно, висит и висит, может быть это такая оптимизация для ускорения запуска или еще что, на современных смартфонах с тремя гигами памяти 80 Мбайт — это ерунда. Но нет же, сервис не просто висит в памяти, он регулярно будит смартфон, чтобы обновить информацию о местоположении устройства и выполнить какие-то другие свои дела. Еще раз: приложение, которым ты пользуешься раз в неделю, чтобы положить деньги на телефон или проверить баланс, постоянно висит в фоне и регулярно будит смартфон! Если тебе кажется это странным, тогда читай дальше, и ты узнаешь, что такое действительно «странно».
«Банк заботится о вашей финансовой безопасности»
Именно такой ответ я получил от @sberbank в твиттере, когда показал им приведенный ниже скриншот. Что это такое? Это сообщение встроенного в Сбербанк антивируса Касперского. Да, дорогой читатель, Сбербанк не только висит в фоне и постоянно будит смартфон, он еще и просыпается каждый раз, когда ты устанавливаешь новое приложение, а еще у него есть определенный распорядок проверки. Ты сидишь, читаешь книжку — и вдруг просыпается Сбербанк и начинает сканировать систему. Как это влияет на батарейку, я думаю, пояснять не надо.
Самая же парадоксальная черта Сбербанка в том, что, обвиняя другие приложения в возможности отправки СМС (как на приведенном скриншоте), сам Сбербанк может не только их отправлять, но и читать и даже изменять. Также он умеет читать контакты, делать снимки, управлять Bluetooth, звонить, изменять настройки смартфона, настройки Wi-Fi, узнавать местоположение, убивать фоновые процессы, читать и изменять историю браузера, изменять настройки APN, следить за запущенными приложениями, отслеживать установку и удаление приложений, читать и писать логи звонков.
Недурно, не правда ли? Не каждый троян обладает таким внушительным списком полномочий. И не надо говорить, что все это нужно антивирусу, — мне трудно придумать, зачем ему может понадобиться возможность звонить, снимать, управлять Wi-Fi или читать логи звонков. О списках контактов я не заикаюсь, Сбербанк использует доступ к ним, чтобы совершать быстрые переводы денег. Ты же не против, чтобы твоя книга контактов сливалась в Сбербанк, не так ли?
Что делать?
Сбербанк не единственное приложение, ставшее жертвой стремления запихать в приложение все, что только можно. В маркете таких огромное количество, и методики «борьбы» с ними почти всегда одинаковы. Первое, что необходимо сделать, — это отозвать у приложения полномочия. Если у тебя стоит Android 6.0, то сделать это можно, открыв «Настройки -> Приложения -> Сбербанк» и отключив в меню «Разрешения» все, кроме «Память». При следующем запуске приложение вновь запросит разрешения, и их надо отклонить.
Если нет Android 6.0, но есть CyanogenMod, то же самое можно сделать в меню «Настройки -> Конфиденциальность -> Защищенный режим -> Сбербанк» (правда, в этом случае приложение может падать). Если нет ни Android 6.0, ни CyanogenMod, но есть root, следует поставить Xposed, через него установить модуль Xprivacy и уже с его помощью отозвать полномочия.
Далее необходимо сделать так, чтобы Сбербанк не висел в фоне и не выжирал батарейку. Для этого обязательно нужны права root и приложение Greenify. Устанавливаем приложение, соглашаемся предоставить ему права root, нажимаем кнопку + в тулбаре и видим список будящих смартфон приложений. Наверняка Сбербанк окажется где-то в начале. Тапаем по нему и нажимаем круглую кнопку внизу экрана. Теперь приложение будет заморожено сразу после выключения экрана и уже не запустится самостоятельно.
Вместо выводов
На самом деле я, конечно же, понимаю, откуда в клиенте Сбербанка взялась подобная функциональность. Как ни крути, а проще встроить в приложение антивирус, чем разбираться с тысячами пользователей, у которых увели деньги. Да и многие юзеры любят гиперфункциональные приложения, которые умеют варить кофе. Тот же ES File Explorer очень популярен, несмотря на просто фантастическую перегруженность всевозможными функциями. Вот только в качестве аргумента в разгоревшемся споре «приложения vs боты» я все чаще слышу слова: «Боты простые, быстрые и не требуют установки, а современные приложения громоздкие и садят батарейку».
На этом все, удачи.