【问题标题】:Starting an Android Activity from a LKM/kernel-space从 LKM/内核空间启动 Android Activity
【发布时间】:2013-07-06 03:38:30
【问题描述】:

我正在开发一个安全模块,我想从可加载内核模块 (LKM) 启动一个活动,以便在用户尝试访问某些安全内容时对其进行身份验证。

我曾在 Android 上工作过,我也曾在 Linux 桌面上工作过,但我不知道如何在 Android 中从内核空间启动活动?

【问题讨论】:

  • 你能修改安卓源吗?
  • 我没有修改任何 Android 代码。我只是在制作我自己的模块,我使用 insmod 命令插入,就像我们在 Linux 中所做的那样

标签: java android c linux linux-kernel


【解决方案1】:

您可以从您的 lkm 执行 /system/bin 中的“am”可执行文件(活动管理器)。

adb shell am start -a android.intent.action.MAIN -n com.android.mms/.ui.ConversationList

从 lkm 内部执行此操作的方法是使用内核函数 'call_usermodehelper'

示例:

#include <linux/kmod.h>

char *argv[] = { "/system/bin/am", "start", "-a", "android.intent.action.MAIN",  
"-n", "com.android.mms/.ui.ConversationList",  NULL};

static char *envp[] =  { 
  "HOME=/", 
  "PATH=/sbin:/system/sbin:/system/bin:/system/xbin", NULL };

call_usermodehelper (argv[0], argv, envp, 1);

【讨论】:

  • 请注意,这将是异步的 - 您需要让 可能 启动的 Activity 以某种方式向内核发出信号,这种方式不能被冒名顶替者欺骗。通常这可以通过使该 Activity 成为系统代码的一部分或让它在 Android 内核和用户空间源中明确定义的另一个特殊 UID 下运行来完成。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多