阻止Android DownloadManager下载受限应用程序



我想阻止DownloadManager下载NetworkPolicyManager禁止访问互联网的应用程序的文件。我使用的自定义 ROM 通过向 iptables 编写这样的条目来强制执行这一点:

-A INPUT -i <interface> -m owner --uid-owner <UID> -j REJECT --reject-with icmp-port-unreachable

下载管理器是在他自己的UID下启动的,因此可以为不应该访问互联网的应用程序下载文件。如果我也要限制下载管理器,其他应用程序 - 应该能够访问互联网 - 无法通过下载管理器下载文件作为附带损害。我的(长期(目标是通过关闭这个(安全(漏洞来为这个自定义 ROM 做出贡献。

我查看了 DownloadManager 的源代码,但不明白排队方法中的实际下载从哪里开始。在此方法之后执行哪些代码?我也在其他方法中找不到任何线索。

public long enqueue(Request request) {
ContentValues values = request.toContentValues(mPackageName);
Uri downloadUri = mResolver.insert(Downloads.Impl.CONTENT_URI, values);
long id = Long.parseLong(downloadUri.getLastPathSegment());
return id;
}

最后,我想修改 DownloadManager,以便受限制的应用程序排队的下载相应地设置其状态并停止而不会使客户端应用程序(尝试开始下载的应用程序(崩溃。

COLUMN_STATUS = STATUS_FAILED = 1 << 4 = 16
COLUMN_REASON = ERROR_UNKNOWN = 1000 or ERROR_BLOCKED = 1010

但是如果我不明白发生了什么,我就不能这样做。请帮助我理解代码或提示我正确的方向。

经过一些研究和CommonsWares的帮助,我找到了DownloadThread.java在那里执行实际下载。由于这篇文章可能不会得到更好的答案,我现在将尽可能好地自己回答这个问题: 检查请求实体是否有权在

NetworkPolicyManager.getUidPolicy(int uid)

可能会完成这项工作。但这需要android.permission.MANAGE_NETWORK_POLICY哪个是保护级别的签名。

最新更新