如何在卸载我的应用程序之前显示活动(Android)
我认为这是不可能的,但我注意到NQ Mobile Security在我单击卸载后和调用PackageUninstall之前能够显示一条消息。 我想在我的应用程序中复制此行为 我尝试了一个听“android.intent.action.DELETE”intent的活动,如下所示: 但当我即将卸载我的应用程序时,选择器弹出,要求选择我的应用程序或软件包卸载程序。我怎样才能避免这种情况 是否有其他方法拦截应用程序卸载事件?(在回答这是不可能的之前,请尝试卸载NQ Mobile Security,看看会发生什么。在我的Android 2.3.4上,它会显示一个漂亮的屏幕,表明没有安全应用程序是不安全的) 我注意到NQ Mobile Security在我单击卸载后和调用PackageUninstall之前能够显示一条消息 他们一定是在利用安卓系统的安全漏洞。我会研究一下,看看能不能把它修好。应用程序不应在卸载时获得控制权 谢谢你指出这一点 是否有其他方法拦截应用程序卸载事件如何在卸载我的应用程序之前显示活动(Android),android,android-activity,uninstallation,Android,Android Activity,Uninstallation,我认为这是不可能的,但我注意到NQ Mobile Security在我单击卸载后和调用PackageUninstall之前能够显示一条消息。 我想在我的应用程序中复制此行为 我尝试了一个听“android.intent.action.DELETE”intent的活动,如下所示: 但当我即将卸载我的应用程序时,选择器弹出,要求选择我的应用程序或软件包卸载程序。我怎样才能避免这种情况 是否有其他方法拦截应用程序卸载事件?(在回答这是不可能的之前,请尝试卸载NQ Mobile Security,看看
我当然希望不是。他们可能要求用户在不知不觉中授予他们非常关键的权限。查看此应用程序的“权限”选项卡(截至2012年6月15日): 此应用程序获得的权限列表完全不正确。除其他外: 系统工具检索正在运行的应用程序允许应用程序检索 有关当前和最近运行的任务的信息。恶意应用 可能会发现其他应用程序的私人信息 更改/拦截网络设置和流量允许应用程序更改网络设置 以及拦截和检查所有网络流量,例如 更改任何APN的代理和端口。恶意应用程序可能会监视, 在您不知情的情况下重定向或修改网络数据包 阻止平板电脑睡眠阻止手机睡眠允许应用程序 防止平板电脑进入睡眠状态。允许应用程序阻止 打电话是为了防止睡觉 更改用户界面设置可使应用程序 更改当前配置,例如区域设置或整体字体 尺寸。 修改全局系统设置允许应用程序修改 系统的设置数据。恶意应用程序可能会损坏系统的 配置 显示系统级警报允许应用程序显示 系统警报窗口。恶意应用可能会占据整个屏幕 装载和卸载文件系统允许应用程序装载和卸载文件系统 可移动存储的文件系统 更改网络连接允许 该应用程序用于更改网络连接状态 更改WI-FI状态允许应用程序连接到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行
为此,应用程序必须由用户明确注册为设备管理员。请参阅此处的设备管理说明:。我很确定,当Activity Manager调用PackageUninstaller时,他们正在监视LogCat以进行拦截。我认为他们结束了任务,开始了自己的活动。
它非常聪明,但肯定是在利用Android的安全漏洞。Opera Max是一款类似的应用程序,卸载后会打开一个网页 他们是怎么做到的 通过使用libevent,从本机代码中,他们监视要删除的/data/data/com.opera.max目录,然后在发生时发布良好的旧action.VIEW广播 从adb shell remove/data/data/com.opera.max目录安装并运行应用程序,然后在根设备上运行
更新:我创建了一个示例应用程序,展示了它的工作原理。顺便说一句,它不适用于最新的(KitKat+我想)Android版本:根据,下面是一些实现此功能的示例代码:。这实际上不会阻止卸载的发生,但确实提供了一种方法来捕获它并采取一些操作。我真的很惊讶这在Android中能起作用,而且团队可能在最近的版本中填补了这一空白。如果应用程序在卸载时启动
活动
或IntentService
,会有什么问题/安全威胁?@TedHopp非常客气地说,一个合法的应用程序永远不会做到这一点,而一个恶意的应用程序可能会造成很多其他伤害。但是完全阻止这样一个功能可能是非常有害的,一些寻求丰富用户体验的合法应用程序。@commonware你的研究有进展吗?@AlexanderMironov:有。如果你向我证明你是谷歌安卓项目的员工,我很乐意向你提供细节。我已经将这些细节提交给了安卓安全团队。这甚至不是一个真正的答案;这更像是一个评论。不仅如此,你还试图让人们更难做到这一点!我看不出防止这种情况有多安全,因为应用程序仍然可以在不同的时间点运行恶意代码。当用户必须在应用程序中使用专用的卸载部分时,这对他们来说很烦人。好的,您已经给出了一个很好的工作指针,在卸载应用程序时,用户可以授予运行活动的权限吗?
请参阅上面的“我的更新”。我想如果你把你的应用注册为“设备管理员”,那么你可以在这里做一些事情。否则,设备管理
所需的权限似乎是“android.Permission.BIND\u Device\u ADMIN
。应用程序看起来不是在要求它吗?我已经注册了我的应用程序