Android: может ли собственный код получать трансляцию из системы Android?

Недавно я увидел забавное приложение - Photo Wonder. Когда это приложение удаляется, на нем отображается страница веб-опроса с просьбой о причине удаления приложения. Теперь вот проблема. Насколько я знаю, после того, как приложение было удалено, система передает ACTION_PAKAGE_REMOVED намерение. Но это смешное приложение смогло показать мою веб-страницу, хотя официальный док говорит   "Установленный пакет не получает этого намерения". Во всяком случае, я мог найти процесс проверки статуса какого-либо приложения.

Теперь вот вопрос. Может ли родное приложение уловить трансляцию из системы Android? Если это возможно, сообщите мне, как это сделать!: - (

Ответ 1

Я считаю, что у меня есть основная идея, как они это сделали. Вот фрагменты головоломки.

  • Любое приложение для Android может запустить процесс, вызвав функцию Runtime.exec().

    Runtime.getRuntime().exec("chmod 755 '/data/data/my.app/files'/native_code");
    

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

  • Когда пользователь открывает Настройки → Приложения → Мое приложение и нажимает кнопку "Силовая остановка", основной процесс приложения убивается, , но хостинг strong > (см. выше) все еще работает. Я лично считаю, что это проблема безопасности, и я собираюсь сообщить об этом в AOSP.

  • Такая нативная программа может работать бесконечно и ничего не делать - просто спать. Но перед сном он регистрирует обработчик сигнала завершения, который будет вызываться, когда процесс вот-вот завершится системой.

    int main(void) {
        signal(SIGTERM, termination_handler);
        while(1) {
            sleep(10);
        }
    }
    
    void termination_handler(int sig) {
       // handle termination signal here
    }
    
  • Теперь вы уже должны знать, что такое последняя часть, не так ли? Мой родной term_handler должен иметь возможность запускать браузер. Я не пробовал это в коде, но я предполагаю, что это возможно, потому что я могу сделать это, используя adb shell, как показано ниже

    adb shell am start -a android.intent.action.VIEW -d http://www.google.com
    

Теперь вернемся к вопросу о том, как это делает браузер Dolphin. Установите приложение и запустите его хотя бы один раз. После запуска он регистрирует собственный наблюдатель удаления, используя принципы, описанные выше. Чтобы увидеть это, подключитесь к устройству и откройте adb shell. Затем вызовите ps, чтобы просмотреть список процессов. Вы увидите два процесса, похожие на следующие

    u0_a109   315   ... mobi.mgeek.TunnyBrowser
    u0_a109   371   ... /data/data/mobi.mgeek.TunnyBrowser/files/watch_server

Как вы можете видеть, он запускает собственную программу watch_server, которая является частью его apk файла. Теперь откройте страницу App info браузера Dolphin и нажмите "Force Stop". Вернитесь к терминалу и снова вызовите ps. Вы увидите, что процесс mobi.mgeek.TunnyBrowser больше отсутствует, но watch_server все еще работает.

Кстати, этот подход будет работать только в том случае, если сервер watcher работает все время. к убедитесь, что он всегда вверх, оба приложения требуют "запустить при запуске", разрешение, где они начинают своих наблюдателей.

Теперь, когда вы удаляете приложение, Android останавливает все процессы, принадлежащие этому приложению. Watcher получает сигнал завершения и открывает браузер с предопределенным URL-адресом и затем выключается.

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

Ответ 2

Там может быть сложная вещь, как это приложение также имеет службу наблюдения.

Вы можете проверить, что разрешение, используемое этим приложением, может содержать разрешения INSTALL и UNINSTALL.

КАК ЭТО РАБОТАЕТ:

  • вместо одного приложения, которое может иметь 2 приложения.

  • и когда вы его устанавливаете, это приложение также устанавливает некоторую службу, которая отслеживает состояние вашего приложения.

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

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