ICC 在 Android 堆栈中的何处处理?

Where is ICCs handled in the Android stack?

我被分配去做一个项目,我应该为 Android 编写一个应用程序来拦截在框架中传递的所有通信意图。事实上,我想拦截现在在包括所有 IPC 的设备中进行的所有 ICC(组件间通信)。

据我所知,在下面列出的 Android 中有两种通用的 ICC 方法。

为了完成这个项目,我应该操纵 Android 框架来挂接一些特定的模块吗? (虽然我不会这样做)。

我更感兴趣的是创建一个应用程序来拦截所有 ICC 而不 操纵框架。有可能吗?

如果我要触及框架,请告诉我所有 ICC 将在哪个模块/组件中处理?

Should I manipulate Android framework to hook some specific modules?

是的。由于 Linux 内核的进程沙盒功能,您的应用无法访问其他应用的信息或那里正在发生的事情。

I rather more interested in creating an app to intercept all ICCs without manipulating the framework. Is it possible at all?

绝对不会

If I should touch the framework, please tell me at which module(s)/component(s) all ICCs would be handled?

要拦截所有 ICC,包括启动 Activity、启动服务、绑定到服务和发送广播,您可以操纵 Activity Manager 服务。

无论何时在您的应用程序中,您调用 startActivity()(及其所有类型,例如 startActivityForResult())、sendBroadcast()startServicebindService(属于其中 RPC 和使用 Messenger),将执行以下步骤。 (在引擎盖后面!)

  • 您的应用通过内核中提供的 Binder 机制联系 Service Manager
  • Service Manager 就像注册系统服务的索引。因此它会 return 通过 Binder 机制将 Activity Manager 的句柄返回给您的应用程序。
  • 您的应用程序现在调用它刚刚获得的 Activity Manager 实例上指定的方法。

  • Activity Manager 中将采取进一步的步骤,例如:意图解析(通过 Package ManagerresolveIntent() 方法)以及权限检查。

您的情况有两种选择:

  1. 直接操作 Activity Manager 代码。
  2. 定义您自己的系统服务,充当 Activity Manager 的代理并将其注册到 Service ManagerRecommended