3

我正在尝试在 c 上为 android 创建一个 setuid 程序。我在 android 2.3-4.2 上对其进行了测试,它在除三星 Galaxy s4 (i9500) 之外的所有设备上运行良好。

我使用 CF-Auto-Root 在设备上安装 su ,它工作正常。但我的应用程序表现不佳。

我已将 mysu 安装到系统目录并设置所有权限:

shell@android:/ $ ls -Z /system/bin/mysu
-rwsr-sr-x root     root              u:object_r:system_file:s0 mysu

这就是关于 Chainfire 的 su:

shell@android:/ $ ls -Z /system/xbin/su
-rwsr-sr-x root     root              u:object_r:system_file:s0 su

Selinux 处于许可模式:

shell@android:/ $ getsebool -a
android_cts --> on
app_bluetooth --> off
app_external_sdcard_rw --> on
app_internal_sdcard_rw --> on
app_ndk --> off
app_network --> on
app_read_logs --> off
app_vpn --> off
debugfs --> on
in_qemu --> off
manage_mac --> on
manage_selinux --> on
support_runas --> on
system_app_manage --> off

shell@android:/ $ getenforce
Permissive

在 mysu 中,我在调用 shell 之前使用了 setuid 和 setgid,但它们在 Galaxy S4 上失败了:

shell@android:/ $ mysu
euid, egid: 0, 0
uid, gid: 2000, 2000
setgid(0): Permission denied
setuid (0): Permission denied
execv("/system/bin/sh", exec_args): Permission denied

我究竟做错了什么?除了 setuid 和 setgid,Chainfire 的 su 是什么?

4

3 回答 3

3

解决方案:在调用 setuid(0) 之前执行 fork()。

于 2013-08-14T09:27:17.553 回答
0

从 android 4.3 开始,setgid 和 setuid 不再允许使用。

于 2014-04-24T09:04:21.293 回答
0

G4 很可能有一个定制的内核,它可能会禁止第三方程序将 uid 设置为 0。

还有一件事,SELinux 是从 4.​​3 开始引入的,即使你在 adb shell 上 su 成为 root 用户,你仍然不能做任何其他事情。

于 2013-08-14T08:22:31.793 回答