22

我虽然不可能,但我注意到 NQ Mobile Security 能够在我单击卸载后和调用 PackageUninstaller 之前显示一条消息。我想在我的应用程序中复制这种行为。

我尝试了一个监听“android.intent.action.DELETE”意图的活动,如下所示: 如何知道我的应用程序已从设备上卸载...?

但是当我要卸载我的应用程序时,会弹出选择器,要求选择我的应用程序或包卸载程序。我怎样才能避免这种情况?

是否有不同的方法来拦截您的应用程序 UNINSTALL 事件?(在回答不可能之前,请尝试卸载 NQ Mobile Security 看看会发生什么。在我的 Android 2.3.4 上,它显示一个漂亮的屏幕,说没有安全应用程序不安全)。

4

5 回答 5

29

我注意到 NQ Mobile Security 能够在我单击卸载后和调用 PackageUninstaller 之前显示一条消息

他们一定是在利用 Android 中的一些安全漏洞。我会研究它,看看我能不能把它修好。应用程序不应该在卸载时获得控制权。

感谢您指出了这一点!

是否有不同的方法来拦截您的应用程序 UNINSTALL 事件?

我当然希望不会。

于 2012-04-18T23:07:36.470 回答
6

Opera Max 是一个执行类似操作的应用程序 - 卸载后会打开一个网页。

他们怎么做到的?

通过使用本地代码中的 libevent,他们观察 /data/data/com.opera.max 目录被删除,然后发布好的旧 action.VIEW 广播,当它发生时。

安装他们的应用程序,运行它,然后在根设备上从 adb shell 删除 /data/data/com.opera.max 目录

更新:我创建了一个示例应用程序来展示它是如何工作的。顺便说一句,它不适用于最近的(我认为是 KitKat+)Android 版本:https ://github.com/pelotasplus/ActionAfterUninstall

于 2014-11-09T15:44:42.463 回答
4

我很确定他们正在监视 LogCat 以在活动管理器调用 PackageUninstaller 时进行拦截。我认为他们终止了任务并开始了自己的活动。它非常聪明,但肯定是在利用 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 包管理器删除一个包,它几乎只会删除它。在这样做之前它执行的唯一检查是正在删除的包当前是否已注册为具有活动的设备管理员:

    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 -卸载.c。这实际上不会阻止卸载的发生,但确实提供了一种捕获它并采取一些措施的方法。老实说,我很惊讶这在 Android 中有效,并且团队可能在最近的版本中填补了空白。

于 2015-07-30T01:03:14.457 回答