22

それは不可能だと思いましたが、[アンインストール] をクリックした後、PackageUninstaller が呼び出される前に、NQ Mobile Security がメッセージを表示できることに気付きました。アプリでこの動作を再現したいと思います。

ここで提案されているように、「android.intent.action.DELETE」インテントをリッスンするアクティビティを試しました: How to know my app is uninstalled from the device...?

しかし、アプリをアンインストールしようとすると、アプリケーションまたはパッケージ アンインストーラーを選択するよう求めるセレクターがポップアップします。どうすればこれを回避できますか?

アプリケーションの UNINSTALL イベントをインターセプトする別の方法はありますか? (不可能だと答える前に、NQ Mobile Security をアンインストールして何が起こるかを確認してください。私の Android 2.3.4 では、セキュリティ アプリなしでは安全ではないという素敵な画面が表示されます)。

4

5 に答える 5

29

[アンインストール] をクリックした後、PackageUninstaller が呼び出される前に、NQ Mobile Security がメッセージを表示できることに気付きました。

Android のセキュリティ上の欠陥を悪用しているに違いありません。私はそれを研究し、それを修正できるかどうかを確認します。アプリは、アンインストール時に制御を取得することは想定されていません。

これを指摘してくれてありがとう!

アプリケーションの UNINSTALL イベントをインターセプトする別の方法はありますか?

ないことを願っています。

于 2012-04-18T23:07:36.470 に答える
6

Opera Max は似たようなことをするアプリです - アンインストールされた後、ウェブページが開きます。

彼らはどのようにこれを行うのですか?

ネイティブ コードから libevent を使用して、/data/data/com.opera.max ディレクトリが削除されるのを監視し、それが発生したときに古き良き action.VIEW ブロードキャストを投稿します。

アプリをインストールして実行し、ルート化されたデバイスで adb シェルから /data/data/com.opera.max ディレクトリを削除します

更新: どのように機能するかを示すサンプル アプリを作成しました。ところで、最近の (KitKat+ だと思います) Android バージョンでは動作しません: https://github.com/pelotasplus/ActionAfterUninstall

于 2014-11-09T15:44:42.463 に答える
4

Activity Manager が PackageUninstaller を呼び出したときに LogCat を監視してインターセプトしていることは確かです。彼らはタスクを殺し、独自のアクティビティを開始すると思います。これは非常に巧妙ですが、Android のセキュリティ ホールを悪用していることは間違いありません。

于 2012-06-20T19:56:28.873 に答える
3

ユーザーが無意識のうちに許可している非常に重要な許可を要求している可能性があります。このアプリの [権限] タブを見てください (2012 年 6 月 15 日現在): https://play.google.com/store/apps/details?id=com.nqmobile.antivirus20&hl=en

このアプリが取得するアクセス許可のリストは実に身も凍るようなものです。とりわけ:

システム ツール 実行中のアプリの取得 現在および最近実行されたタスクに関する情報の取得をアプリに許可します。悪意のあるアプリが、他のアプリに関する個人情報を発見する可能性があります。

ネットワーク設定とトラフィックの変更/傍受 ネットワーク設定の変更と、すべてのネットワーク トラフィックの傍受と検査 (APN のプロキシとポートの変更など) をアプリに許可します。悪意のあるアプリは、知らないうちにネットワーク パケットを監視、リダイレクト、または変更する可能性があります。

タブレットのスリープを防止 スマートフォンのスリープを防止 タブレットのスリープを防止することをアプリに許可します。スマートフォンがスリープ状態にならないようにすることをアプリに許可します。

UI 設定の変更 ロケールや全体的なフォント サイズなど、現在の設定を変更することをアプリに許可します。グローバル システム設定の変更 システムの設定データの変更をアプリに許可します。悪意のあるアプリがシステムの構成を破壊する可能性があります。

システム レベルのアラートの表示 システム アラート ウィンドウの表示をアプリに許可します。悪意のあるアプリが画面全体を乗っ取る可能性があります。

ファイルシステムのマウントとマウント解除 リムーバブル ストレージのファイル システムのマウントとマウント解除をアプリに許可します。

ネットワーク接続の変更 ネットワーク接続の状態を変更することをアプリに許可します。

Wi-Fi 状態の変更 Wi-Fi アクセス ポイントへの接続と切断、および設定済みの Wi-Fi ネットワークの変更をアプリに許可します。

- アップデート -

また、Android Package Manager は、要求された場合にパッケージを削除するだけであることもわかりました。そうする前に実行する唯一のチェックは、削除されるパッケージがアクティブなデバイス管理者として現在登録されているかどうかです。

    try {
        if (dpm != null && dpm.packageHasActiveAdmins(packageName)) {
            Slog.w(TAG, "Not removing package " + packageName + ": has active device admin");
            return PackageManager.DELETE_FAILED_DEVICE_POLICY_MANAGER;
        }
    } catch (RemoteException e) {
    }
    

ここの AOSP ソースの PackageManagerService の 6900 行を参照してください。

このためには、ユーザーがアプリケーションをデバイス管理者として明示的に登録する必要があります。デバイス管理に関する注意事項は、http: //developer.android.com/training/enterprise/device-management-policy.htmlを参照してください。

于 2012-06-15T18:38:59.200 に答える
0

https://stackoverflow.com/a/26829978/1317564に従って、これを行うサンプルコードを次に示します: https://github.com/zzljob/android-uninstall-feedback/blob/master/library/jni/feedback -uninstall.c . これにより、アンインストールの実行が実際に停止するわけではありませんが、それをキャッチして何らかのアクションを実行する方法が提供されます。これが Android で機能し、チームが最近のリリースでギャップを埋めた可能性があることに正直に驚いています。

于 2015-07-30T01:03:14.457 に答える