For*_*rce 13 android root android-service
我目前正在开发一款应用程序,可在驾驶时读取短信/电子邮件.许多用户都希望得到WhatsApp/KakaoTalk的支持.
但是,由于没有"官方"方式来接收他们的消息,因此只有三个选项,都需要root:
在给定的intervall中扫描数据库的更简单方法.
另一种方法是运行具有root权限的服务并注册侦听其推送通知的接收器.这必须使用root来完成,因为两个软件包都需要基于签名的权限才能接收其推送通知.
还有另一件事我想到:安装后是否可以手动添加APK权限?在这种情况下,我可以将c2dm权限添加到我的包中.
问题是,我究竟如何运行具有root权限的服务(实际上是否可能)?我知道如何使用root运行shell命令或二进制文件,但我不知道如何以root身份启动APK的一部分.
是否可以将BroadcastReceiver集成到二进制文件中?我实际上没有使用C/C++的经验,尤其是在Android环境中.
你能帮帮我吗?谢谢.
编辑:就像我在评论中说的那样,我不想使用AccesibilityService,因为它不符合我的需要(例如,如果有多个未读消息,它会给我"2条未读消息",也不包括完整消息身体).
edit2:只是澄清事情:我知道如何用root运行命令.我需要知道的是如何注册接收特定广播"普通"接收器的广播接收器,因为广播本身需要我没有的基于签名的许可.
这远非微不足道,但当您想要监控的应用程序使用 sqlite 数据库时,或者更一般地说,当消息到达时将消息写入文件时,应该可以工作。
您确实需要拥有设备的 root 访问权限,因为这违反了 Android 安全系统:
使用 NDK 编写一个作为守护进程运行的本机进程,并在以 root 身份启动后生成一次。您现在有 3 个主要问题需要解决:
如何查明某些内容是否发生变化?
这是简单的部分。您需要使用 Linux inotify 接口,该接口应该可以在每部 Android 手机上访问,因为 SDK 自 API 1 起就有一个FileObserver,因此您在这里是安全的。
另一个有趣的方法可能是捕获 C2DM 消息。我找到了一个名为BroadcastReceiver 的NDK 类,因此 NDK 可能能够捕获它们。但我个人不会这样做,因为窃取意图感觉是错误的。此外,您还必须重新分发它们或让它们发送给真正的收件人,因此我不会在这里详细描述这一点。它可能会起作用,但可能会更困难,并且只能作为后备措施。
所以,当你解决了这个问题后,下一个问题就出现了:
如何安全地读取变化?
你这里有一个问题,一个大问题。该文件不属于客户端,客户端甚至没有权限知道它在哪里(通常)。因此,受监控的应用程序不知道客户端,并且会表现得好像该文件仅由其自己拥有。如果他们使用一些普通的旧文本文件向您写入消息,您必须找到一种安全地读取它的方法,因为它可能随时被覆盖或扩展。但是当他们使用 sqlite 时你可能会很幸运,根据这一点,同时有多个读者,只有一个作家是完全有效的。我们符合规格,一切都恢复正常。当你现在读出了新数据时,还有更多问题需要解决:
如何将新数据返回到主应用程序中?
您应该只在这个 C/C++ 程序中执行最低限度的操作,因为它以 root 身份运行。您还应该保护您的应用程序用户免受安全漏洞的影响,因此请在编写程序时牢记这一点。我不知道这是否真的有效,但这里有一些想法:
如上文所述,编写此守护程序时请小心,因为它存在潜在的安全隐患。当您完全不了解 C/C++ 时,可能很难做到这一点,即使您编写了简单的程序,这也应该是一项不平凡的任务。
在我通过网络搜索时,我找到了上面提到的 NDK C++ 类。可以在Google 代码中找到它。我既没有 NDK 也没有 C++ 包装器的经验,但当您计划编写此内容时,它可能值得一看。
归档时间: |
|
查看次数: |
19952 次 |
最近记录: |