【发布时间】:2016-06-23 12:43:24
【问题描述】:
我编写了一个 android 应用程序来监视正在运行的进程的系统调用,但我得到的只是“不允许操作”。我尝试使用“chmod 4777 strace”和 chown“root:root strace”禁用 SElinux 并在 strace 上启用 root 访问,但我仍然无法解决问题。该应用程序在模拟器 4.3 (API 18) 上运行。
【问题讨论】:
我编写了一个 android 应用程序来监视正在运行的进程的系统调用,但我得到的只是“不允许操作”。我尝试使用“chmod 4777 strace”和 chown“root:root strace”禁用 SElinux 并在 strace 上启用 root 访问,但我仍然无法解决问题。该应用程序在模拟器 4.3 (API 18) 上运行。
【问题讨论】:
进程可以禁用跟踪,并且无法附加,即使是 root。
如果目标进程无法接收来自 strace 的信号(如果以 root 身份运行成功,则可以触发 EPERM,尽管我不确定 strace 是否能很好地处理内容),目标进程本身就是 setuid(它们禁用跟踪),以及如果跟踪已被进程本身简单地禁用。此外,一个进程最多可以由一个调试器跟踪。
strace 不能附加不可转储的进程。进程可以将自己设置为不可转储,并且它也会在 UID 更改时自动发生(由于 setuid 位或 setuid 系统调用)
【讨论】:
在某些情况下,在 Android 上执行 strace 会失败并显示“ptrace(PTRACE_ATTACH, ...): Operation not allowed”,因为 strace 已经在 Android 中运行
$ adb shell su -c ps | grep 跟踪 根 15861 1 1056 4 do_wait 00000452cc S
一旦旧的正在运行的 strace 进程被杀死,新的调用可能会成功:
$ adb shell su -c pkill strace
【讨论】: