Сегодня с утра пользователи Samsung обнаружили, что на их телефонах откуда-то взялся апдейт для почты МТС, хотя они её не устанавливали и даже не были в курсе про её существование.
Т.е. Android просто по названию перепутал оригинальное приложение и моё. И это несмотря на то, что все приложения подписываются ключом разработчика (естественно я подписал своим, у меня нет доступа к оригинальному).
К счастью, при попытке установить приложение, я получил ошибку. Т.е. хоть в данном случае защита сработала.
Выходит, что приложение для МТС и Samsung делал один разработчик (Эльдар Муртазин подтверждил это) и подписал одним ключом. Приложение называется com.seven.Z7 в обоих случаях. И из-за полного совпадения случился такой факап у пользователей (несмотря на разные названия и иконки в маркете).
Почему было невозможно удалить обновление? Этот момент я ещё не исследовал, возможно это связано с тем, что приложение системное (т.е. его нельзя удалить само приложение), а из-за того, что обновилось на другое, у операционной системы снесло крышу и она запуталась в том, что ей можно делать, а что нельзя. Но это только предположение. При этом я не думаю, что приложение от МТС само лично что-то запрещало и влезало в телефон. Обычно обновления системных приложений удалить можно.
PS: Своё приложение из маркета я убрал после проверки, надеюсь, никому не успел навредить.
Я исследовал проблему и выяснил, что проблема в Google Play (бывший Android Market), а именно в том, как он проверяет приложения на идентичность.
Дело в том, что приложения в маркете идентифицируются не по названию приложения, а по названию пакета (package), которое имеет свои характеристики и это название есть "область имён" классов приложения. Изначально это было сделано, чтобы разные приложения не конфликтовали если в них окажется одинаковые классы. Т.е. учитывается полное имя приложения.
Например, возьмём приложение Карты Google, посмотрите какой адрес у него в маркете:
https://play.google.com/store/apps/details?id=com.google.android.apps.maps
Пакет с приложением называется com.google.android.apps.maps, т.е. по стандартному соглашению:
com — common или com от google.com (бывают разные соглашения о именовании)
google — название компании-производителя
android — это приложение для android
apps — это приложение, а не отдельная библиотека
maps — это приложение карты
Ну или как вариант, Facebook:
https://play.google.com/store/apps/details?id=com.facebook.katana
com — common или от facebook.com
facebook — компания-производитель
katana — так называется клиент. Оригинальное название
Я попробовал сделать приложение, которое называется также, как QuickOffice (только специфичный, предустановленный на телефоны от Motorola).
И тут возникла первая проблема у Google: мне удалось загрузить это приложение в Market. Мне разрешили это сделать!
Тут же я увидел шедевральную картину:
Приложение ещё никто не установил, а у него уже есть 54 ошибки, которые прислали пользователи. Т.е. ошибки подхватились от оригинального приложения и я их мог посмотреть. Это проблема в безопасности.
После этого, я открыл с телефона своё приложение и увидел следующую картину (я его ещё не устанавливал):
Мне предлагают открыть приложение или обновить его. При этом, если бы у меня были включены автоматические обновления, я думаю, что оно установилось бы самостоятельно и заменило существующий офис.
Т.е. Android просто по названию перепутал оригинальное приложение и моё. И это несмотря на то, что все приложения подписываются ключом разработчика (естественно я подписал своим, у меня нет доступа к оригинальному).
К счастью, при попытке установить приложение, я получил ошибку. Т.е. хоть в данном случае защита сработала.
Но не факт, что эта ошибка будет возникать на всех прошивках (вполне возможно, что на кастомных типа CyanogenMod вполне могут для удобства отключить проверку на подпись).
(Данный текст уже неактуален, мы можем мелко пакостить, но не сможем обновить приложение)
Как результат, мы можем делать поддельные приложения Facebook (изначально стоит на множестве устройств) или Google Search, Google Maps и любых других. Мы можем назвать их совершенно по-другому и они даже могут делать честные вещи. Например, отсылать SMS на платные номера. Что здесь честного? А мы можем назвать приложение и написать в описании, что мы делаем именно это, а то, что оно заменило другое приложение — случайное совпадение.
(Данный текст уже неактуален, мы можем мелко пакостить, но не сможем обновить приложение)
Выходит, что приложение для МТС и Samsung делал один разработчик (Эльдар Муртазин подтверждил это) и подписал одним ключом. Приложение называется com.seven.Z7 в обоих случаях. И из-за полного совпадения случился такой факап у пользователей (несмотря на разные названия и иконки в маркете).
Почему было невозможно удалить обновление? Этот момент я ещё не исследовал, возможно это связано с тем, что приложение системное (т.е. его нельзя удалить само приложение), а из-за того, что обновилось на другое, у операционной системы снесло крышу и она запуталась в том, что ей можно делать, а что нельзя. Но это только предположение. При этом я не думаю, что приложение от МТС само лично что-то запрещало и влезало в телефон. Обычно обновления системных приложений удалить можно.
PS: Своё приложение из маркета я убрал после проверки, надеюсь, никому не успел навредить.