Задать вопрос
@locisvv

Как предотвратить запущенный PendingIntent?

Приложения Android Settings (Android ~4.0 - 4.4) имеет уязвимость с помощью которой можно запускать неправомерные задания, например MASTER_CLEAR, отправка СМС, без наличия необходимых permision.
Я хочу написать небольшой модуль для XPosed Framework(фреймворк который может манипулировать системными java классами), который должен предотвращать запуск PendingIntent из системными правами.
Принцип роботы уязвимости:
seclists.org/fulldisclosure/2014/Nov/81

Код который запускает PendingIntent который может выполнить вредоносное действие:

private void addAccount(String accountType) {
        Bundle addAccountOptions = new Bundle();
        mPendingIntent = PendingIntent.getBroadcast(this, 0, new Intent(), 0);
        addAccountOptions.putParcelable(KEY_CALLER_IDENTITY, mPendingIntent);
        addAccountOptions.putBoolean(EXTRA_HAS_MULTIPLE_USERS, Utils.hasMultipleUsers(this));
        AccountManager.get(this).addAccount(
                accountType,
                null, /* authTokenType */
                null, /* requiredFeatures */
                addAccountOptions,
                null,
                mCallback,
                null /* handler */);
        mAddAccountCalled  = true;
    }


Вот как хочу отменить запущенный PendingIntent

//Вытаскиваю Context и переменную mPendingIntent
                Context context = (Context) param.thisObject;
                Field field = findField(param.thisObject.getClass(), "mPendingIntent");

                PendingIntent mPendingIntent = (PendingIntent) field.get(context);
                //отменяю её 
                mPendingIntent.cancel();

               //.... остальной код
  • Вопрос задан
  • 3120 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
@creati8e
Android разработчик
Вам нужно создать новый PendingIntent с тем же requestCode и флагом, что и запущенный PendingIntent, который вы хотите отменить. И отменить только что созданный PeningIntent.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы