Секретные Коды, Или Как Я Писал Свое Приложение Для Android

Думаю, каждый, у кого есть устройство на базе ОС Android, хотя бы слышал о «секретных кодах».

Однако поиск на Хабре показал, что на эту тему нет ни одной статьи.

Но некоторые коды весьма мощные: например, один из кодов на моем Samsung Galaxy Tab позволяет настроить GPS, что ускоряет поиск спутников, другой позволяет строго установить режим сетевого подключения (GPRS, EDGE, 3G. .

), что позволяет хорошо экономить заряд батареи при перескакивании между режимами.

Но я расскажу историю не столько о возможностях кодов, сколько об исследовании механизма запуска приложений с использованием кодов в ОС Android, о том, как найти все коды (и приложение, в которое все это вылилось).

И еще немного о том, как сделать приложение, которое будет реагировать на ваш код. Под катом 6 картинок, немного кода и много текста.

Для самых нетерпеливых прошу сразу написать результаты в конце статьи и только потом читать технологию.



Введение

Про коды в Android слышал давно.

Самый распространенный из них — *#*#4636#*#* — это информация о телефоне, аккумуляторе, состоянии сети и т. д.

Секретные коды, или как я писал свое приложение для Android

Но недавно я установил программу Автозапуск , сделал поиск установленных приложений и (о чудо!) увидел странное событие «Введен секретный код».

На него ответила целая куча заявок! Этот факт побудил меня провести более глубокий поиск по этой теме.

Вот что я узнал: {Не желая обременять основную часть публики лишними пояснениями, торжественно клянусь подробнее объяснить неясные места в комментариях, если стану членом уважаемого сообщества.

}

Первая часть.

События в Android

Как вы знаете, каждое приложение Android содержит манифест. Это специально созданный XML-файл, содержащий информацию о целевой версии ОС, какие разрешения требуются для работы приложения и т. д. Самое интересное в этом манифесте — разделы, описывающие BroadcastReceivers. Это классы, которые реагируют на возникновение определенных событий.

Таких событий много, например: совершен исходящий вызов (android.intent.action.NEW_OUTGOING_CALL), изменилось состояние режима «полет» (android.intent.action.ACTION_AIRPLANE_MODE_CHANGED)… Официальный список можно видимый на сайте Андроид .

Однако список ни в коем случае не является полным, т.к.

каждое приложение может создавать свое событие.

Это создает некоторый хаос в документации при попытке выяснить, на что может реагировать приложение.

Именно в этом хаосе было успешно спрятано событие, представляющее большой интерес: android.provider.Telephony.SECRET_CODE Как показало открытие исходных кодов стандартной звонилки в Android, когда вы вводите в звонилке что-то, начинающееся с *#*# и заканчивающееся на #*#*, происходит поиск и передается сообщение BroadcastRecever, который это слушает. конкретный код (то есть между *#* # и #*#*)

Часть вторая.

Реакция на код

Теперь давайте посмотрим, что требуется от приложения, чтобы отреагировать на возникновение этого события:

<receiver android:name=".

receivers.DebugReceiver"> <intent-filter> <action android:name="android.provider.Telephony.SECRET_CODE" /> <data android:scheme="android_secret_code" android:host="727" /> </intent-filter>

Где: — начало раздела BroadcastReceiver и указание того, какой приёмник следует вызывать при возникновении данного события.

— собственно событие, на которое реагирует получатель, набирая код. - и вот самое интересное.

Блок данных отвечает за дополнительные параметры события и необходим для события секретного кода.

Поле android:host здесь означает именно тот код, который разбудит нашу спящую красавицу ото сна.

Те.

Для запуска Приемника ".

receivers.DebugReceiver", приложения, из манифеста которого этот блок (подробнее о нем позже), нужно в звонилке набрать *#*#727#*#* Как видите, добавить скрытые функции в ваши приложения Android очень просто.

Не буду говорить, что делать в Ресивере, там свой путь, лично я называю его отладочной активностью.



Часть третья.

Мы ищем партизан

Теперь перейдем к поиску Приемников, реагирующих на коды.

Моей первой мыслью (и первой реализацией) был такой код:

for(int i=0;i<10000;i++) { Intent intent = new Intent("android.provider.Telephony.SECRET_CODE", Uri.parse(" android_secret_code://"+ i.toString())); ComponentName cn = intent.resolveActivity(pm); .

}

Я не помню точный код; его удалили за ненадобностью, поскольку было найдено лучшее решение.

Это решение просто перечисляет все коды от 0 до 10000 — диапазона, в котором находится значительная часть кодов.

Но не все.

Именно это «не все» побудило меня искать более детально и привело к новому решению: 1) Возьмите список всех установленных приложений через PackageManager:

List<android.content.pm.PackageInfo> pil = pm.getInstalledPackages(PackageManager.GET_DISABLED_COMPONENTS);

2) Из каждого пакета извлекаем его манифест:

AssetManager am = context.createPackageContext(p.packageName, 0).

getAssets(); xml = assets.openXmlResourceParser("AndroidManifest.xml");

3) Простая магия с разбором манифеста и поиском нужных Receivers, IntentFilters, Actions. 4) Прибыль.

У этого метода есть только один недостаток: он был замечен в приложении.

Суперпользователь от ChainsDD. Дело в том, что у этого приложения кривый манифест выглядит примерно так:

<receiver android:name=".

receivers.DebugReceiver"> <intent-filter> <action android:name="android.provider.Telephony.SECRET_CODE" /> <data android:scheme="android_secret_code"/> </intent-filter>

Как видите, он не указывает код, на который следует реагировать, и Receiver вызывается при вводе любого кода.

Декомпилировав эту программу, я убедился, что это было сделано по ошибке и не из желания вести журнал всех вводимых кодов, потому что.

в самом Приёмнике производится проверка на равенство кода коду заданное значение, и если код не равен заданному значению, то ничего не происходит :( т.е.

этот Приемник запускается каждый раз при вводе кода, чего можно было бы избежать, указав, какой код должен будить Приемник.



Часть последняя.

Для самых терпеливых.

Последнюю часть я оставил для презентации результатов.

Результатом всех этих исследований стала замечательная (не побоюсь этого слова) программа, аналогов которой на рынке не нашлось: Секретные коды Помимо описанной выше возможности поиска секретных кодов, программа также позволяет: — Запустить найденные коды — Комментируйте/читайте комментарии других пользователей о кодах.

Это сделано для того, чтобы люди, боящиеся FactoryFormat, могли убедиться в безопасности кода перед его запуском, а отчаянные экспериментаторы могли написать, что делает тот или иной код. Я лично запускал ВСЕ доступные коды на Samsung Galaxy Tab 7" и закомментировал все коды, отображающие хоть какую-то информацию.

(Кстати, FactoryFormat я успешно пережил, поскольку заранее сделал резервную копию всех приложений и данных.

) — Назначьте кодам значки для большей наглядности списка кодов.

Для начала 6 скриншотов: Основная деятельность:

Секретные коды, или как я писал свое приложение для Android

Поиск кода:

Секретные коды, или как я писал свое приложение для Android

Поиск кода завершен:

Секретные коды, или как я писал свое приложение для Android

Список кодов:

Секретные коды, или как я писал свое приложение для Android

Код активности:

Секретные коды, или как я писал свое приложение для Android

Некоторые из доступных значков кода:

Секретные коды, или как я писал свое приложение для Android

P.S. На ScreenShots всего 3 кода, потому что.

они были сделаны на эмуляторе.

На моем Galaxy Tab их более 100. P.P.S статья опубликована по просьбе Владислава Аксенова в связи с отсутствием у него аккаунта (кому понравилась статья и кто не против инвайта, вот почта, пришлите на: [email protected]).

Написал статью Черный лебедь .

Спасибо кроватти за приглашение! Вот QR:

Секретные коды, или как я писал свое приложение для Android

Теги: #разработка Android #секретные коды #разработка Android

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.